Menu
CoddyTech

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.

Viene utilizzato 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

Risultato:

Simulation started
This runs once

Utilizzo del blocco initial per i segnali di test

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

Questo cambia a ai tempi: 0, 10 e 20.

Iniziale vs sempre

 initialalways
Viene eseguitoUna voltaContinuamente (per sempre)
Si usa perTestbench, inizializzazioneHardware (flip-flop, contatori)
Sintetizzabile?Solo per i valori iniziali (FPGA)Sì (con lista di sensibilità)

Note importanti

  • I blocchi initial servono principalmente per la simulazione. Gli strumenti di sintesi non possono trasformare in hardware ritardi come #10 o attività come $display
  • Usa initial principalmente nei testbench. In un modulo di progettazione, lo usano solo gli strumenti di sintesi FPGA, e solo per impostare il valore iniziale di un registro o di una memoria
  • Se il testbench contiene un clock a funzionamento continuo (ad es. always #5 clk = ~clk;), la simulazione continua all'infinito a meno che non venga chiamato $finish; con solo un 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, dopo 10 unità di tempo, imposta a su 1.

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 un 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