Blocco initial
Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 47 di 90.
Verilog ha due blocchi procedurali: initial (viene eseguito una volta) e always (viene eseguito continuamente). Ora vediamo il blocco initial.
Che cos'è un blocco Initial?
Il blocco initial viene eseguito una sola volta all'inizio della simulazione (tempo 0). Quando termina, non viene eseguito di nuovo.
Si usa principalmente nei banchi di prova per:
- Impostare i valori iniziali
- Generare segnali di test
- Visualizzare messaggi
- Avviare la simulazione
Sintassi
initial begin
// Le istruzioni vengono eseguite una sola volta, in sequenza
endEsempio di base
initial begin
$display("Simulation started");
$display("This runs once");
$finish;
endOutput:
Simulation started
This runs onceUsare il blocco initial per i segnali di test
initial begin
a = 0;
#10 a = 1;
#10 a = 0;
#10 $finish;
endQuesto modifica a agli istanti: 0, 10 e 20.
Iniziale vs sempre
initial | always | |
|---|---|---|
| Viene eseguito | Una volta | Continuamente (per sempre) |
| Usato per | Testbench, inizializzazione | Hardware (flip-flop, contatori) |
| Sintetizzabile? | No (solo simulazione) | Sì (con lista di sensibilità) |
Note importanti
- I blocchi
initialnon sono sintetizzabili. Non possono essere convertiti in hardware - Usa
initialsolo nei testbench - Se il testbench contiene un clock a esecuzione continua (ad es.
always #5 clk = ~clk;), la simulazione continua all'infinito a meno che tu non chiami$finish; con un solo bloccoinitial, il simulatore si arresta da solo quando non rimangono eventi, ma aggiungere$finishè comunque una buona pratica
Sfida
Aggiungi il blocco initial mancante che imposta a su 0, poi imposta a su 1 dopo 10 unità di tempo.
Cosa fare:
- Aggiungi
initial begineend - Imposta
a = 0 - Attendi
#10 - Imposta
a = 1 - Aggiungi $finish per terminare la simulazione
Provalo tu
module test;
reg a;
// TODO: Aggiungi qui il blocco initial
// Imposta a = 0
// Attendi #10
// Imposta a = 1
// Aggiungi $finish; per terminare la simulazione
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