Menu
CoddyTech

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 all'infinito
end

Esempio semplice

forever begin
  $display("This prints forever");
end

Questo verrà stampato all'infinito e farà arrestare la simulazione. Aggiungi sempre un ritardo o una condizione di arresto.

Generazione di 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
end

Questo 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
end
initial begin
  #100;
  disable clock_gen;   // Ora funziona
end

Forever e gli altri cicli

CicloSi ferma?Quando usarlo
forSì (dopo un numero fisso di iterazioni)Numero noto di ripetizioni
whileSì (quando la condizione è falsa)Condizione di arresto sconosciuta
repeatSì (dopo un numero fisso di iterazioni)Numero noto di ripetizioni
foreverNo (mai)Segnali continui (orologio)

Regole importanti

RegolaSpiegazione
Deve includere un ritardo#10 oppure @(posedge clk)
Senza ritardo, la simulazione si bloccaCiclo infinito senza avanzamento del tempo
Interrompi il ciclo con disable oppure termina la simulazione con $finishAltrimenti la simulazione non termina mai
Da usare preferibilmente nei banchi di provaNon sintetizzabile
challenge icon

Sfida

Cosa fare:

Aggiungi il ciclo forever mancante per generare un clock 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
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