Menu
Coddy logo textTech

Vettori

Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 9 di 90.

Un vettore è un wire o un reg multi-bit. Invece di un singolo bit, i vettori ti permettono di lavorare con bus di dati. È una raccolta di bit raggruppati.

Nota: Un vettore non è un tipo di dato distinto. È semplicemente una versione a più bit di wire o reg.

wire single;        // Singolo bit
wire [7:0] bus;     // Vettore a 8 bit (dal bit 7 al bit 0)

Per dichiarare un vettore, si usa la sintassi [MSB:LSB], dove MSB è il bit più significativo e LSB è il bit meno significativo.

wire [3:0] a;       // vettore wire a 4 bit
reg [7:0] data;     // vettore reg a 8 bit
wire [15:0] addr;   // vettore wire a 16 bit

Accesso ai bit

Quando accedi ai singoli bit o alle sezioni di un vettore, usi numeri decimali per le posizioni dei bit (indici) e valori binari (0 o 1) per le assegnazioni.

Questo perché una posizione di bit è una collocazione (come un indirizzo), che si esprime naturalmente con un numero decimale, mentre il valore memorizzato in quel bit può essere solo 0 o 1: una scelta binaria.

Ad esempio, data[0] significa «bit numero zero» e = 1 significa «impostalo su alto». Assegnare un numero decimale come 75 a un singolo bit non memorizza 75: Verilog mantiene silenziosamente solo il bit meno significativo, quindi scrivi sempre 0 o 1 esplicitamente.

reg [7:0] data;

data = 170;  
data[0] = 1;             // Imposta LSB a 1
data[7] = 0;             // Imposta MSB a 0
data[3:1] = 3'b101;      // Set bits 3,2,1 to 101 (binary remains)

Ordine dei bit

L'ordine dei bit è importante:

wire [3:0] a;     // a[3] è il bit più significativo (MSB), a[0] è il bit meno significativo (LSB)
wire [0:3] b;     // b[0] è il bit più significativo (MSB), b[3] è il bit meno significativo (LSB) (meno comune)

La maggior parte dei progettisti usa il formato [MSB:LSB] con MSB a sinistra.

Assegnazione dei valori

reg [3:0] a;

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

Porzioni di vettore

Puoi accedere a un intervallo di bit:

reg [15:0] word;

word[15:8] = 255;        // Assegna il byte superiore (8'hFF = 255)
word[7:0]  = 0;          // Assegna il byte inferiore (8'h00 = 0)
word[3:1]  = 3'b101;     // Assign a slice 
challenge icon

Sfida

Il modulo qui sotto richiede dichiarazioni di vettori. 

Cosa fare: 

  1. Modifica ogni input e output in vettori a 8 bit.

Provalo tu

module vector_example(
  input a,          // Modifica in un vettore a 8 bit [7:0]
  input b,          // Modifica in un vettore a 8 bit [7:0]
  output c          // Modifica in un vettore a 8 bit [7:0]
);
  
  assign c = a & b;
  
endmodule
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Fondamenti

Esercitati da solo: Compilatore Verilog online