Menu
Coddy logo textTech

Tableaux

Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 10 sur 90.

Un tableau vous permet de stocker plusieurs valeurs dans une seule variable. Chaque élément du tableau est accessible par son index.

Remarque : Un tableau n'est pas un type de données distinct. Il s'agit d'une collection de types wire, reg, integer ou real.

Déclaration de tableaux

Syntaxe : <data_type> <name> [<size>];

reg [7:0] memory [0:255];   // 256 octets de mémoire (chacun de 8 bits)
reg data [0:7];              // 8 registres d'un seul bit
wire [3:0] bus [0:3];       // 4 bus, chacun de 4 bits de large
integer counters [0:9];      // 10 entiers

Le nombre entre crochets [ ] est la taille du tableau, et non la largeur de bits.

Accès aux éléments d'un tableau

reg [7:0] memory [0:3];

memory[0] = 165;        // Décimal 165
memory[1] = 90;         // Décimal 90
memory[2] = memory[0] + memory[1];

$display("%d", memory[2]);  // Affiche : 255

Les tableaux sont très utiles dans les bancs d'essai pour stocker des données de test.

Tableaux multidimensionnels

Vous pouvez créer des tableaux à plusieurs dimensions :

reg [7:0] matrix [0:3][0:3];   // Tableau 4x4 de valeurs de 8 bits

matrix[0][0] = 255;            // 8'hFF = 255 décimal
matrix[2][1] = 85;             // 8'h55 = 85 décimal

Tableau vs Vecteur

 VecteurTableau
Ce que c'estFil ou registre multi-bitsCollection de plusieurs valeurs
Syntaxe[MSB:LSB][size]
Exemplereg [7:0] data;reg [7:0] mem [0:255];
Accèsdata[3] (bit 3)mem[3] (élément 3)

Un vecteur est une valeur avec plusieurs bits.
Un tableau est plusieurs valeurs, chacune avec ses propres bits.

Notes importantes

  • Les tableaux ne sont pas synthétisables dans de nombreux outils lorsqu'ils sont utilisés avec de grandes tailles
  • Les tableaux sont principalement utilisés dans les bancs de test (testbenches)
  • Pour la mémoire matérielle, utilisez des primitives de mémoire spéciales
challenge icon

Défi

Complétez le code ci-dessous pour créer un tableau qui stocke 4 valeurs de test.

Ce qu'il faut faire : 

  1. Déclarez un tableau nommé test_data
    1. Utilisez le type de données reg (car il stocke des valeurs dans un banc d'essai)
    2. Chaque élément doit avoir une largeur de 8 bits ([7:0])
    3. Le tableau doit comporter 4 éléments ([0:3])

Aide-mémoire

Les tableaux stockent plusieurs valeurs dans une seule variable, accessibles par index. Un tableau est une collection de types wire, reg, integer ou real.

Syntaxe de déclaration : <data_type> <name> [<size>];

reg [7:0] memory [0:255];  // 256 éléments, chacun d'une largeur de 8 bits
wire [3:0] bus [0:3];      // 4 éléments, chacun d'une largeur de 4 bits
integer counters [0:9];    // 10 entiers

Accès aux éléments :

memory[0] = 165;
memory[2] = memory[0] + memory[1];
$display("%d", memory[2]);

Tableaux multidimensionnels :

reg [7:0] matrix [0:3][0:3];  // Tableau 4x4 de valeurs de 8 bits
matrix[0][0] = 255;

Tableau vs Vecteur :

  • Vecteur — une seule valeur avec plusieurs bits : reg [7:0] data;data[3] accède au bit 3
  • Tableau — plusieurs valeurs, chacune avec ses propres bits : reg [7:0] mem [0:255];mem[3] accède à l'élément 3

Les tableaux sont principalement utilisés dans les testbenches ; pour la mémoire matérielle, utilisez des primitives de mémoire spéciales.

Essayez vous-même

module arrays;
  
  // Déclarer un tableau nommé test_data
  // Il doit comporter 4 éléments, chacun d'une largeur de 8 bits
  // Utiliser le type de données reg (car il stocke des valeurs dans un banc d'essai)

  
  integer i;
  
  initial begin
    test_data[0] = 170;   
    test_data[1] = 240;    
    test_data[2] = 204;    
    test_data[3] = 15;   
    
    for (i = 0; i < 4; i = i + 1) begin
      $display("test_data[%0d] = %b", i, test_data[i]);
    end
    $finish;
  end
  
endmodule
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Fondamentaux