Vectors
Fait partie de la section Fondamentaux du Journey Verilog de Coddy. Leçon 9 sur 90.
Un vector est un fil ou un reg de plusieurs bits. Au lieu d’un seul bit, les vectors vous permettent de travailler avec des bus de données. Il s’agit d’une collection de bits regroupés.
Remarque : Un vector n’est pas un type de données distinct. Il s’agit simplement d’une version à plusieurs bits de wire ou de reg.
wire single; // Bit unique
wire [7:0] bus; // Vecteur 8 bits (bits 7 à 0)Pour déclarer un vecteur, utilisez la syntaxe [MSB:LSB] où MSB est le bit de poids fort et LSB le bit de poids faible.
wire [3:0] a; // vecteur wire de 4 bits
reg [7:0] data; // vecteur reg de 8 bits
wire [15:0] addr; // vecteur wire de 16 bitsAccéder aux bits
Lorsque vous accédez à des bits individuels ou à des tranches d’un vector, vous utilisez des nombres décimaux pour les positions des bits (index) et des valeurs binaires (0 ou 1) pour les assignations.
Cela s’explique par le fait qu’une position de bit est un emplacement (comme une adresse), qui s’exprime naturellement sous forme de nombre décimal, tandis que la valeur stockée dans ce bit ne peut être que 0 ou 1 : un choix binaire.
Par exemple, data[0] signifie « bit numéro zéro », et = 1 signifie « le mettre à 1 ». L’affectation d’un nombre décimal comme 75 à un seul bit ne stocke pas 75 : Verilog conserve silencieusement uniquement son bit de poids faible. Écrivez donc toujours explicitement 0 ou 1.
reg [7:0] data;
data = 170;
data[0] = 1; // Mettre le LSB à 1
data[7] = 0; // Mettre le MSB à 0
data[3:1] = 3'b101; // Set bits 3,2,1 to 101 (binary remains)Ordre des bits
L’ordre des bits est important :
wire [3:0] a; // a[3] est le MSB, a[0] est le LSB
wire [0:3] b; // b[0] est le MSB, b[3] est le LSB (moins courant)La plupart des concepteurs utilisent le format [MSB:LSB] avec MSB à gauche.
Affectation de valeurs
reg [3:0] a;
a = 10;
a = 5;
a = 3; Tranches de vecteur
Vous pouvez accéder à une plage de bits :
reg [15:0] word;
word[15:8] = 255; // Assigner l'octet supérieur (8'hFF = 255)
word[7:0] = 0; // Assigner l'octet inférieur (8'h00 = 0)
word[3:1] = 3'b101; // Assign a slice Défi
Le module ci-dessous a besoin de déclarations de vecteurs.
Que faire :
- Change chaque input et output en vecteurs de 8 bits.
Essayez vous-même
module vector_example(
input a, // Changer en vecteur 8 bits [7:0]
input b, // Changer en vecteur 8 bits [7:0]
output c // Changer en vecteur 8 bits [7:0]
);
assign c = a & b;
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