Menu
Coddy logo textTech

Initial Block

Fait partie de la section Fondamentaux du Journey Verilog de Coddy. Leçon 47 sur 90.

Verilog possède deux blocs procéduraux : initial (s’exécute une seule fois) et always (s’exécute continuellement). Voyons maintenant le bloc initial.

Qu’est-ce qu’un bloc Initial ?

Le bloc initial s’exécute une seule fois au début de la simulation (time 0). Lorsqu’il se termine, il ne s’exécute plus.

Il est principalement utilisé dans les bancs de test pour :

  • Définir les valeurs initial
  • Générer les signaux de test
  • Afficher les messages
  • Démarrer la simulation

Syntaxe

initial begin
  // Les instructions s'exécutent une fois, en séquence
end

Exemple de base

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

Sortie :

Simulation started
This runs once

Utilisation du bloc initial pour les signaux de test

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

Cela modifie a aux temps suivants : 0, 10 et 20.

Initial vs Always

 initialalways
S’exécuteUne foisContinuellement (pour toujours)
UtilisationBancs de test, initialisationMatériel (bascules, compteurs)
Synthétisable ?Non (simulation uniquement)Oui (avec une liste de sensibilité)

Notes importantes

  • initial blocks are not synthesizable. Ils ne peuvent pas être transformés en matériel
  • Utilisez initial uniquement dans les bancs de test
  • Si le banc de test contient une horloge à fonctionnement continu (par ex. always #5 clk = ~clk;), la simulation s’exécute indéfiniment à moins que vous n’appeliez $finish ; avec seulement un bloc initial, le simulateur s’arrête de lui-même lorsqu’il ne reste plus d’événements, mais ajouter $finish reste une bonne pratique
challenge icon

Défi

Add le initial block manquant qui définit a sur 0, puis après 10 unités de time définit a sur 1.

Que faire :

  1. Add initial begin et end
  2. Définir a = 0
  3. Wait #10
  4. Définir a = 1
  5. Add $finish pour end simulation

Essayez vous-même

module test;
  reg a;
  
  // TODO: Ajouter le bloc initial ici
  // Mettre a = 0
  // Attendre #10
  // Mettre a = 1
  // Ajouter $finish; pour terminer la simulation
  
endmodule
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Fondamentaux

Entraînez-vous par vous-même : Compilateur Verilog en ligne