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 bitAccesso 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 Sfida
Il modulo qui sotto richiede dichiarazioni di vettori.
Cosa fare:
- 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;
endmoduleQuesta lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fondamenti
1Introduzione
Cos'è VerilogHardware e software a confrontoIl tuo primo moduloCommentiLivelli di astrazione della progettazione4Operatori - Parte 1
Operatori aritmeticiOperatore moduloOperatori di confrontoRiepilogo - Matematica sempliceOperatori bitwise7Assegnazioni e porte
Assegnazione continuaAssegnazioni con operatoriPrimitive di porte integratePorte AND, OR e NOTPorte XOR e XNORRiepilogo: circuito con porte logiche10Decisioni
Istruzione ifIf-ElseRiepilogo - Comparatore sempliceIstruzione caseCasex e casezRiepilogo - Progettazione di una ALU5Operatori Parte 2
Operatori logiciOperatori di riduzioneOperatori di scorrimentoOperatore di concatenazioneOperatore condizionaleRiepilogo - Sfida sugli operatori3Sistema numerico
Rappresentazione binariaNumeri con dimensione specificataNumeri senza dimensione specificataNumeri negativiValori speciali X e ZRiepilogo - Formati numerici6Moduli
Struttura di un moduloPorte di input e outputPorte InoutIstanziazione di un moduloMappatura delle porte per nomeMappatura delle porte per ordineRiepilogo - Costruire un modulo9Blocchi procedurali
Blocco alwaysBlocco initialLista di sensibilitàAssegnazione bloccanteAssegnazione non bloccanteRiepilogo: always vs initial12Progetto Multiplexer
Progettazione di un mux da 2 a 1Progettazione di un mux da 4 a 1Esercitati da solo: Compilatore Verilog online