Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Verilog

Tableaux et mémoires Verilog : Maîtriser les structures de données multidimensionnelles

Une déclaration de tableau (array) d'un net ou variable peut être scalaire ou vectoriel. Nombre illimité de dimensions en spécifiant une plage d'adresses après le nom d'identificateur : tableau multidimensionnel. Tableaux autorisés pour reg, wire, integer et real.

reg y1 [11:0];           // tableau scalaire reg profondeur=12, chaque 1-bit
wire [0:7] y2 [3:0];     // net vecteur 8-bit avec profondeur 4
reg [7:0] y3 [0:1][0:3]; // tableau 2D lignes=2, cols=4, chaque 8-bit

Un index pour chaque dimension doit être spécifié pour accéder à un élément, peut être expression d'autres variables. Tableau possible pour tout type de données supporté.

Une mémoire de n reg 1-bit n'est pas équivalente à un reg vecteur n-bit.

Assignation

y1 = 0;           // Illégal - tous éléments ne peuvent pas être assignés d'un coup
y2[0] = 8'ha2;    // Assigner 0xa2 à index=0
y2[2] = 8'h1c;    // Assigner 0x1c à index=2
y3[1][2] = 8'hdd; // Assigner 0xdd à ligne=1 col=2
y3[0][0] = 8'haa; // Assigner 0xaa à ligne=0 col=0

Exemple

Le code ci-dessous montre modélisation, assignation et accès à différents tableaux. mem1 = vecteur 8-bit, mem2 = tableau vecteur 8-bit profondeur 4, mem3 = tableau 2D vecteur 16-bit 4 lignes x 2 colonnes.

module des ();
reg [7:0] mem1;
reg [7:0] mem2 [0:3];
reg [15:0] mem3 [0:3][0:1];
initial begin
    int i;
    mem1 = 8'ha9;
    $display ("mem1 = 0x%0h", mem1);
    mem2[0] = 8'haa; mem2[1] = 8'hbb; mem2[2] = 8'hcc; mem2[3] = 8'hdd;
    for(i = 0; i < 4; i = i+1) $display("mem2[%0d] = 0x%0h", i, mem2[i]);
    for(int i = 0; i < 4; i += 1) begin
        for(int j = 0; j < 2; j += 1) begin
            mem3[i][j] = i + j;
            $display("mem3[%0d][%0d] = 0x%0h", i, j, mem3[i][j]);
        end
    end
end
endmodule

Simulation Log :

ncsim> run
mem1 = 0xa9
mem2[0] = 0xaa mem2[1] = 0xbb mem2[2] = 0xcc mem2[3] = 0xdd
mem3[0][0] = 0x0 mem3[0][1] = 0x1 mem3[1][0] = 0x1 mem3[1][1] = 0x2
mem3[2][0] = 0x2 mem3[2][1] = 0x3 mem3[3][0] = 0x3 mem3[3][1] = 0x4
ncsim: *W,RNQUIE: Simulation is complete.

Mémoires

Mémoires = éléments de stockage numérique (RAM, ROM). Modélisées par tableaux 1D de type reg appelés mémoire. Chaque élément = mot, référencé par index unique.

Tableaux et mémoires Verilog : Maîtriser les structures de données multidimensionnelles

Vecteur de registre (Register Vector)

Vecteurs Verilog déclarés avec plage de taille à gauche du nom, réalisés en bascules correspondant à la taille. Module design avec horloge, reset, signaux contrôle pour lecture/écriture. Contient élément de stockage 16-bit "register" mis à jour en écriture, retourne valeur courante en lecture.

module des (input clk, input rstn, input wr, input sel, input [15:0] wdata, output [15:0] rdata);
reg [15:0] register;
always @ (posedge clk) begin
    if (!rstn) register <= 0;
    else begin
        if (sel & wr) register <= wdata;
        else register <= register;
    end
end
assign rdata = (sel & ~wr) ? register : 0;
endmodule

Schéma matériel : bascule 16-bit mise à jour quand logique contrôle écriture active, valeur courante retournée pour lecture.

Tableaux et mémoires Verilog : Maîtriser les structures de données multidimensionnelles

Tableau (Array)

Ici register est tableau 4 emplacements x 16-bit. Module accepte signal addr additionnel pour accéder index particulier.

module des (input clk, input rstn, input [1:0] addr, input wr, input sel, input [15:0] wdata, output [15:0] rdata);
reg [15:0] register [0:3];
integer i;
always @ (posedge clk) begin
    if (!rstn) begin
        for (i = 0; i < 4; i = i+1) register[i] <= 0;
    end else begin
        if (sel & wr) register[addr] <= wdata;
        else register[addr] <= register[addr];
    end
end
assign rdata = (sel & ~wr) ? register[addr] : 0;
endmodule

Schéma : chaque index = bascule 16-bit, adresse d'entrée sélectionne jeu de bascules particulier.

Tableaux et mémoires Verilog : Maîtriser les structures de données multidimensionnelles

Verilog

  1. Maîtriser les tableaux C# : Déclaration, initialisation et opérations
  2. Comprendre la relation entre les tableaux et les pointeurs en C
  3. Techniques de copie de tableaux en Java : Guide complet
  4. Les tableaux en C++ : Déclaration, initialisation et techniques avec pointeurs
  5. Maîtriser l'allocation de tableaux dynamiques en C++ : Guide pratique avec exemples de code
  6. Tutoriel Java Arrays : Déclaration, création et initialisation – Code d'exemple
  7. Maîtriser Verilog : Tutoriel complet pour la conception de circuits numériques
  8. Maîtriser la concaténation Verilog : Guide pratique
  9. Comprendre les Délais Inter- et Intra-Affectation en Verilog