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 ritardo | Scopo |
|---|---|
| Ritardi delle porte logiche | Ritardo attraverso le porte logiche |
| Ritardi di assegnazione | Ritardo durante l'assegnazione dei valori |
| Direttiva Timescale | Imposta 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 = bIl 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
endTempistiche:
- 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 tempoQuesto crea un segnale di clock continuo (supponendo che clk sia stato inizializzato a 0 in un blocco initial. Altrimenti ~x rimane x).
Regole importanti
| Regola | Spiegazione |
|---|---|
simbolo # | Indica un ritardo |
Numero dopo # | Quante unità di tempo attendere |
| I ritardi sono cumulativi | #10 poi #20 attende in totale 30 |
| Non sintetizzabile | I ritardi servono solo per la simulazione |
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
Questa 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 ALU13Tempi e ritardi
Cosa sono i ritardiRitardi nei gateRitardi nelle assegnazioniDirettiva timescaleGenerazione del clockRiepilogo - Controllo dei tempi5Operatori 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