Ciclo Forever
Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 61 di 90.
Il ciclo forever ripete un blocco di codice continuamente, per sempre. Non si ferma mai da solo.
Un ciclo forever viene eseguito ripetutamente senza fine. È utile per generare clock e altri segnali continui nei testbench.
Sintassi:
forever begin
// Codice che si ripete per sempre
endEsempio semplice
forever begin
$display("This prints forever");
endQuesto verrà stampato all'infinito e bloccherà la tua simulazione. Aggiungi sempre un ritardo o una condizione di arresto.
Generare un clock (uso comune)
L’uso più comune di forever è generare un clock:
initial begin
clk = 0;
forever begin
#5 clk = ~clk; // Inverti lo stato ogni 5 unità di tempo
end
endQuesto crea un orologio che funziona per l'intera simulazione.
Per sempre con Disable
Puoi interrompere un ciclo forever usando un'istruzione disable:
initial begin : clock_gen // Nome aggiunto qui
clk = 0;
forever begin
#5 clk = ~clk;
end
endinitial begin
#100;
disable clock_gen; // Ora funziona
endPer sempre vs altri cicli
| Ciclo | Si ferma? | Quando usarlo |
|---|---|---|
for | Sì (dopo un numero fisso di iterazioni) | Numero noto di ripetizioni |
while | Sì (quando la condizione è falsa) | Condizione di arresto sconosciuta |
repeat | Sì (dopo un numero fisso di iterazioni) | Numero noto di ripetizioni |
forever | No (mai) | Segnali continui (orologio) |
Regole importanti
| Regola | Spiegazione |
|---|---|
| Deve includere un ritardo | #10 o @(posedge clk) |
| Senza ritardo, la simulazione si blocca | Ciclo infinito senza avanzamento del tempo |
Usalo con disable per fermarlo | Altrimenti la simulazione non termina mai |
| Si usa al meglio nei testbench | Non è sintetizzabile |
Sfida
Cosa fare:
Aggiungi il ciclo forever mancante per generare un orologio che cambia stato ogni 10 unità di tempo.
Provalo tu
module forever_challenge;
reg clk;
initial begin
clk = 0;
// TODO: Aggiungi un ciclo forever per invertire clk ogni 10 unità di tempo
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