Menu
Coddy logo textTech

Vecteurs

Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 9 sur 90.

Un vector est un wire ou reg multi-bit. Au lieu d'un single bit, les vectors vous permettent de travailler avec des buses de data. C'est une collection de bits regroupés ensemble.

Remarque : Un vector n'est pas un type de data distinct. C'est simplement une version multi-bit de wire ou reg.

wire single;        // Bit unique
wire [7:0] bus;     // Vecteur de 8 bits (bits 7 descendant à 0)

Pour déclarer un vector, vous utilisez la syntaxe [MSB:LSB]MSB est le 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 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 de bits (index) et des valeurs binary (0 ou 1) pour les affectations.

C'est parce qu'une position de bit est un emplacement (comme une adresse), qui s'exprime naturellement sous la forme d'un 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 à l'état haut". Assigner un décimal comme 75 à un bit unique ne stocke pas 75 — Verilog ne conserve silencieusement que son bit le plus bas — donc écrivez toujours 0 ou 1 explicitement.

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 a son importance :

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.

Assignation de valeurs

reg [3:0] a;

a = 10;       
a = 5;         
a = 3;        

Vector Slices

Vous pouvez accéder à une plage de bits :

reg [15:0] word;

word[15:8] = 255;        // Affecter l'octet supérieur (8'hFF = 255)
word[7:0]  = 0;          // Affecter 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 vector. 

Ce qu'il faut faire : 

  1. Modifier chaque input et output pour qu'ils soient des vector 8-bit.

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