Array
Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 10 di 90.
Un array ti consente di memorizzare più valori in una variabile. È possibile accedere a ciascun elemento dell'array tramite il suo indice.
Nota: Un array non è un tipo di dato separato. È una raccolta di tipi wire, reg, integer o real.
Dichiarare gli array
Sintassi: <data_type> <name> [<size>];
reg [7:0] memory [0:255]; // 256 byte di memoria (8 bit ciascuno)
reg data [0:7]; // 8 registri a bit singolo
wire [3:0] bus [0:3]; // 4 bus, ciascuno largo 4 bit
integer counters [0:9]; // 10 numeri interiIl numero tra parentesi quadre [ ] è la dimensione dell'array, non la larghezza in bit.
Accesso agli elementi di un array
reg [7:0] memory [0:3];
memory[0] = 165; // Decimale 165
memory[1] = 90; // Decimale 90
memory[2] = memory[0] + memory[1];
$display("%d", memory[2]); // Stampa: 255Gli array sono molto utili nei banchi di prova per memorizzare i dati di test.
Array multidimensionali
Puoi creare array con più dimensioni:
reg [7:0] matrix [0:3][0:3]; // Array 4x4 di valori a 8 bit
matrix[0][0] = 255; // 8'hFF = 255 in decimale
matrix[2][1] = 85; // 8'h55 = 85 in decimaleVettore vs array
| Vettore | Array | |
|---|---|---|
| Cos'è | Filo o registro multibit | Raccolta di più valori |
| Sintassi | [MSB:LSB] | [size] |
| Esempio | reg [7:0] data; | reg [7:0] mem [0:255]; |
| Accesso | data[3] (bit 3) | mem[3] (elemento 3) |
Un vettore è un valore con più bit.
Un array è composto da più valori, ciascuno con i propri bit.
Note importanti
- Gli array non sono sintetizzabili in molti strumenti quando vengono usati con dimensioni grandi
- Gli array vengono usati soprattutto nei testbench
- Per la memoria hardware, usa primitive di memoria speciali
Sfida
Completa il codice qui sotto per creare un array che memorizzi 4 valori di test.
Cosa fare:
- Dichiara un array chiamato
test_data- Usa il tipo di dato
reg(perché memorizza valori in un testbench) - Ogni elemento deve essere largo 8 bit (
[7:0]) - L'array deve avere 4 elementi (
[0:3])
- Usa il tipo di dato
Provalo tu
module arrays;
// Declara un arreglo llamado test_data
// Debe tener 4 elementos, cada uno de 8 bits de ancho
// Usa el tipo de datos reg (porque almacena valores en un testbench)
integer i;
initial begin
test_data[0] = 170;
test_data[1] = 240;
test_data[2] = 204;
test_data[3] = 15;
for (i = 0; i < 4; i = i + 1) begin
$display("test_data[%0d] = %b", i, test_data[i]);
end
$finish;
end
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