Menu
Coddy logo textTech

Cosa sono i ritardi

Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 67 di 90.

In Verilog, i ritardi controllano quando viene eseguita un’istruzione o quando cambia un segnale. Si usano per modellare il comportamento temporale dell’hardware reale.

Perché sono necessari i ritardi

L'hardware reale richiede tempo perché i segnali viaggino attraverso fili e porte logiche. I ritardi ti consentono di simulare questo comportamento temporale.

  • Nella simulazione, senza ritardi, tutto accade al tempo 0
  • I ritardi ti permettono di distribuire gli eventi nel tempo
  • Aiutano a testare progetti sensibili alla temporizzazione, come clock e macchine a stati

Tipi di ritardo

Tipo di ritardoScopo
Ritardi delle porte logicheRitardo attraverso le porte logiche
Ritardi di assegnazioneRitardo durante l'assegnazione dei valori
Direttiva TimescaleImposta le unità di tempo per la simulazione

Sintassi di base

Un ritardo si scrive con un # seguito da un numero:

#10 clk = ~clk;   // Attendi 10 unità di tempo, poi inverti lo stato del clock
#5 a = b;         // Attendi 5 unità di tempo, poi assegna a = b

Il numero dopo # è il numero di unità di tempo da attendere.

Esempio semplice

initial begin
  a = 0;
  #10 a = 1;   // Dopo 10 unità di tempo, a diventa 1
  #5 a = 0;    // Dopo altre 5 unità di tempo, a diventa 0
end

Tempistiche:

  • Tempo 0: a = 0
  • Tempo 10: a = 1
  • Tempo 15: a = 0

Ritardi nei blocchi Always

always #5 clk = ~clk;   // Commuta il clock ogni 5 unità di tempo

Questo crea un segnale di clock continuo (supponendo che clk sia stato inizializzato a 0 in un blocco initial. Altrimenti ~x rimane x).

Regole importanti

RegolaSpiegazione
simbolo #Indica un ritardo
Numero dopo #Quante unità di tempo attendere
I ritardi sono cumulativi#10 poi #20 attende in totale 30
Non sintetizzabileI ritardi servono solo per la simulazione
challenge icon

Sfida

Cosa fare:

Aggiungi i ritardi mancanti per fare in modo che questo codice stampi messaggi ai tempi 0, 10, 25 e 40.

Provalo tu

module delay_challenge;
  
  initial begin
    $display("Time %0t: Start", $time);
    // TODO: Aggiungi un ritardo per arrivare al tempo 10
    $display("Time %0t: After first delay", $time);
    // TODO: Aggiungi un ritardo per arrivare al tempo 25
    $display("Time %0t: After second delay", $time);
    // TODO: Aggiungi un ritardo per arrivare al tempo 40
    $display("Time %0t: End", $time);
    $finish;
  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