Menu
Coddy logo textTech

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]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 bits

Accé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 
challenge icon

Défi

Le module ci-dessous a besoin de déclarations de vecteurs. 

Que faire :

  1. 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;
  
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

Entraînez-vous par vous-même : Compilateur Verilog en ligne