Ritardi nelle assegnazioni
Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 69 di 90.
Nelle lezioni precedenti abbiamo trattato i ritardi generali (#10 a = b;) e i ritardi delle porte (and #5 (out, a, b);). Ora trattiamo i ritardi di assegnazione, ovvero ritardi che si verificano all'interno di un blocco procedurale (come initial o always) come parte di un'istruzione di assegnazione.
Un ritardo di assegnazione attende per un tempo specificato, quindi esegue l'assegnazione. Il ritardo viene inserito dopo il simbolo # e prima dell'assegnazione.
Sintassi:
variable = #delay expression;A differenza di un ritardo generale #10 a = b; (ritardo e poi assegnazione), un ritardo di assegnazione a = #10 b; prende il valore di b in quel momento, attende 10 unità di tempo e poi lo assegna a a.
Ritardo dell'assegnazione vs ritardo generale
| Ritardo generale | Ritardo dell'assegnazione | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Sintassi | #10 a = b; | a = #10 b; | ||||||||||
| Quando viene letto il valore? | Al momento dell'assegnazione (dopo il ritardo) | Immediatamente (prima del ritardo) | ||||||||||
| Quale valore viene assegnato? | Il valore di b in quel momento | Il valore di b</code al tempo 0 (o al momento della lettura)</td></tr><tr><td><strong>Quando viene assegnato il valore?</strong></td><td>Dopo il ritardo</td><td>Dopo il ritardo</td></tr></tbody></table></figure><h3>Esempio: la differenza</h3><pre><code class="language-verilog">initial begin
b = 1;
#5 b = 0;
// Ritardo generale
#10 a1 = b; // Attende 10, poi legge b (b=0) → a1=0
// Ritardo dell'assegnazione
a2 = #10 b; // Legge b ora (b=0), attende 10, poi assegna → a2=0
endEntrambi danno lo stesso risultato qui. La differenza si nota quando Esempio di differenza chiave
Con un ritardo generale Regole importanti
Sfida Cosa fare: Aggiungi il ritardo di assegnazione mancante, in modo che Provalo tu Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi. Tutte le lezioni di Fondamenti1Introduzione 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 |