Ciclo For
Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 58 di 90.
I cicli in Verilog ti permettono di eseguire un blocco di codice più volte. Sono particolarmente utili nei testbench per generare pattern di test ripetitivi, inizializzare la memoria e scorrere gli array. A differenza delle descrizioni hardware che vengono eseguite in parallelo, i cicli vengono eseguiti in sequenza, il che li rende ideali per la simulazione e i test.
Il ciclo più comunemente usato è il ciclo <strong>for</strong>for, che si ripete un numero specifico di volte. Un ciclo for esegue ripetutamente un blocco di codice, con una variabile di ciclo che cambia a ogni iterazione. Controlli esattamente quante volte viene eseguito.
Sintassi:
for (initialization; condition; increment) begin
// Codice da ripetere
end| Parte | Cosa fa | Esempio |
|---|---|---|
initialization | Imposta il valore iniziale | i = 0 |
condition | Quando fermarsi | i < 10 |
increment | Cambia a ogni ciclo | i = i + 1 |
Esempio semplice
integer i;
for (i = 0; i < 5; i = i + 1) begin
$display("i = %d", i);
endOutput:
i = 0
i = 1
i = 2
i = 3
i = 4Il ciclo viene eseguito 5 volte (i = 0, 1, 2, 3, 4).
Ciclo for nei banchi di prova
I cicli for sono comunemente usati per testare tutte le combinazioni di input:
integer test_value;
for (test_value = 0; test_value < 16; test_value = test_value + 1) begin
$display("test_value = %d", test_value);
endQuesto testa tutti i 16 valori possibili di un segnale a 4 bit.
Ciclo for con array
reg [7:0] memory [0:9];
integer i;
initial begin
for (i = 0; i < 10; i = i + 1) begin
memory[i] = i * 8;
end
endInizializza 10 posizioni di memoria.
Regole importanti
| Regola | Spiegazione |
|---|---|
La variabile del ciclo deve essere integer o reg | Non può essere wire |
Usa begin/end per più istruzioni | Necessario per più di una riga |
| Evita i cicli infiniti | Assicurati che la condizione diventi falsa prima o poi |
| Si usano soprattutto nei banchi di prova | La maggior parte dei cicli non è sintetizzabile |
Sfida
Cosa fare:
Aggiungi il ciclo for mancante per stampare i numeri da 0 a 3.
Provalo tu
module for_challenge;
integer i;
initial begin
$display("Printing 0 to 3:");
// TODO: Aggiungi un ciclo for
// Inizializza i = 0
// Ripeti il ciclo finché i < 4
// Incrementa i = i + 1
// All'interno, stampa con: $display("i = %d", i);
$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