Vecteurs
Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 9 sur 90.
Un vecteur est un wire ou un reg multi-bits. Au lieu d'un seul bit, les vecteurs vous permettent de travailler avec des bus de données. C'est une collection de bits regroupés.
Note : Un vecteur n'est pas un type de données distinct. C'est simplement une version multi-bits de wire ou reg.
wire single; // Bit unique
wire [7:0] bus; // Vecteur 8 bits (bits 7 à 0)Pour déclarer un vecteur, vous utilisez la syntaxe [MSB:LSB] où MSB est le bit le plus significatif et LSB est le moins significatif.
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ès aux bits
Lorsque vous accédez à des bits individuels ou à des tranches d'un vecteur, vous utilisez des nombres décimaux pour les positions des bits (index) et des valeurs binaires (0 ou 1) pour les affectations.
C'est parce qu'une position de bit est un emplacement (comme une adresse), qui est naturellement exprimé sous forme de nombre décimal, alors 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 à l'état haut ». Vous ne pouvez pas assigner un nombre décimal comme 75 à un seul bit car un bit n'a pas de place pour des valeurs autres que 0 ou 1.
reg [7:0] data;
data = 170;
data[0] = 1; // Définir le LSB à 1
data[7] = 0; // Définir le MSB à 0
data[3:1] = 3'b101; // Définir les bits 3,2,1 à 101 (le binaire reste inchangé)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 le MSB à gauche.
Affectation de valeurs
reg [3:0] a;
a = 10;
a = 5;
a = 3; Tranches de vecteurs
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; // Assigner une tranche Défi
Le module ci-dessous nécessite des déclarations de vecteurs.
Ce qu'il faut faire :
- Modifiez chaque entrée et sortie pour qu'elles soient des vecteurs de 8 bits.
Aide-mémoire
Un vecteur est un wire ou un reg multi-bits, déclaré en utilisant la syntaxe [MSB:LSB] :
wire [7:0] bus; // 8-bit wire vector
reg [15:0] addr; // 16-bit reg vectorAccès aux bits individuels et aux tranches (slices) :
reg [7:0] data;
data[0] = 1; // Set LSB to 1
data[7] = 0; // Set MSB to 0
data[3:1] = 3'b101; // Set bits 3,2,1 using binaryOrdre des bits : [MSB:LSB] est la convention standard (par exemple, [7:0] signifie que le bit 7 est le MSB et le bit 0 est le LSB).
Essayez vous-même
module vector_example(
input a, // Passer en vecteur 8 bits [7:0]
input b, // Passer en vecteur 8 bits [7:0]
output c // Passer 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 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