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 entiersLe 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 : 255Les 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écimalTableau vs Vecteur
| Vecteur | Tableau | |
|---|---|---|
| Ce que c'est | Fil ou registre multi-bits | Collection de plusieurs valeurs |
| Syntaxe | [MSB:LSB] | [size] |
| Exemple | reg [7:0] data; | reg [7:0] mem [0:255]; |
| Accès | data[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
Défi
Complétez le code ci-dessous pour créer un tableau qui stocke 4 valeurs de test.
Ce qu'il faut faire :
- Déclarez un tableau nommé
test_data- Utilisez le type de données
reg(car il stocke des valeurs dans un banc d'essai) - Chaque élément doit avoir une largeur de 8 bits (
[7:0]) - Le tableau doit comporter 4 éléments (
[0:3])
- Utilisez le type de données
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 entiersAccè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
endmoduleCette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Fondamentaux
1Introduction
Qu'est-ce que VerilogHardware vs SoftwareNiveaux d'abstraction de conceptionVotre premier moduleCommentaires4Opérateurs - Partie 1
Opérateurs arithmétiquesOpérateur moduloOpérateurs de comparaisonRécapitulatif - Mathématiques simplesOpérateurs bit à bit7Assignation et portes logiques
Assignation continueAssignation avec opérateursPrimitives de portes intégréesPortes AND OR NOTPortes XOR XNORRécapitulatif - Circuit à portes logiques10Prise de décision
Instruction IfIf - ElseRécapitulatif - Comparateur simpleInstruction CaseCasex et CasezRécapitulatif - Conception d'ALU2Types de données
Type WireType RegEntiers et RéelsVecteursTableauxParamètresRécapitulatif - Déclarer des signaux5Opérateurs - Partie 2
Opérateurs logiquesOpérateurs de réductionOpérateurs de décalageOpérateur de concaténationOpérateur conditionnelRécapitulatif - Défi sur les opérateurs11Boucles
Boucle ForBoucle WhileBoucle RépéterBoucle InfinieInstruction DisableRécapitulatif - Modèles de boucles3Système de numération
Représentation binaireNombres avec tailleNombres sans tailleNombres négatifsValeurs spéciales X et ZRécapitulatif - Formats de nombres6Modules
Structure d'un modulePorts d'entrée et de sortiePorts InoutInstanciation de moduleMappage de ports par nomMappage de ports par ordreRécapitulatif - Créer un module9Blocs procéduraux
Bloc AlwaysBloc InitialListe de sensibilitéAffectation bloquanteAffectation non bloquanteRécapitulatif - Always vs Initial12Projet Multiplexeur
Conception d'un Mux 2 vers 1Conception d'un Mux 4 vers 115Contrôleur de feux de circulation
Définition des étatsLogique de la machine à états