Menu
Coddy logo textTech

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

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

Défi

Le module ci-dessous nécessite des déclarations de vecteurs. 

Ce qu'il faut faire : 

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

Accè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 binary

Ordre 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;
  
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