Arrays
Fait partie de la section Fondamentaux du Journey Verilog de Coddy. Leçon 10 sur 90.
Un array vous permet de stocker plusieurs valeurs dans une seule variable. Chaque élément de l’array est accessible par son index.
Remarque : Un array n’est pas un type de données distinct. Il s’agit d’une collection de types wire, reg, integer ou real.
Déclarer des 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 monobit
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 array size, et non la largeur en bits.
Accéder aux éléments d’un array
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 arrays sont très utiles dans les testbench pour stocker les données de test.
Tableaux multidimensionnels
Vous pouvez créer des tableaux avec plusieurs dimensions :
reg [7:0] matrix [0:3][0:3]; // tableau 4x4 de valeurs 8 bits
matrix[0][0] = 255; // 8'hFF = 255 décimal
matrix[2][1] = 85; // 8'h55 = 85 décimalarray vs Vecteur
| Vecteur | Array | |
|---|---|---|
| Ce que c'est | wire ou reg multibit | Collection de plusieurs values |
| Syntaxe | [MSB:LSB] | [size] |
| Exemple | reg [7:0] data; | reg [7:0] mem [0:255]; |
| Accès | data[3] (bit 3) | mem[3] (element 3) |
Un vecteur est une valeur composée de plusieurs bits.
Un array est plusieurs valeurs, chacune avec ses propres bits.
Notes importantes
- Les arrays ne sont pas synthétisables dans de nombreux outils lorsqu’ils sont utilisés avec de grandes tailles
- Les arrays sont principalement utilisés dans les 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.
À faire :
- Déclarez un tableau appelé
test_data- Utilisez le type de données
reg(because il stocke des valeurs dans un testbench) - Chaque élément doit avoir une largeur de 8 bits (
[7:0]) - Le tableau doit avoir 4 éléments (
[0:3])
- Utilisez le type de données
Essayez vous-même
module arrays;
// Déclarez un tableau appelé test_data
// Il doit avoir 4 éléments, chacun de 8 bits de large
// Utilisez le type de données reg (car il stocke des valeurs dans un testbench)
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 VerilogMatériel vs logicielVotre premier moduleCommentairesNiveaux d’abstraction de conception4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicEntraînez-vous par vous-même : Compilateur Verilog en ligne