Menu
Coddy logo textTech

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
end

Esempio di base

initial begin
  $display("Simulation started");
  $display("This runs once");
  $finish;
end

Output:

Simulation started
This runs once

Usare il blocco initial per i segnali di test

initial begin
  a = 0;
  #10 a = 1;
  #10 a = 0;
  #10 $finish;
end

Questo modifica a agli istanti: 0, 10 e 20.

Iniziale vs sempre

 initialalways
Viene eseguitoUna voltaContinuamente (per sempre)
Usato perTestbench, inizializzazioneHardware (flip-flop, contatori)
Sintetizzabile?No (solo simulazione)Sì (con lista di sensibilità)

Note importanti

  • I blocchi initial non sono sintetizzabili. Non possono essere convertiti in hardware
  • Usa initial solo 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 blocco initial, il simulatore si arresta da solo quando non rimangono eventi, ma aggiungere $finish è comunque una buona pratica
challenge icon

Sfida

Aggiungi il blocco initial mancante che imposta a su 0, poi imposta a su 1 dopo 10 unità di tempo.

Cosa fare:

  1. Aggiungi initial begin e end
  2. Imposta a = 0
  3. Attendi #10
  4. Imposta a = 1
  5. 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
  
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