Menu
Coddy logo textTech

Bloc initial

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 fois) et always (s’exécute continuellement). Examinons 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 (au temps 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

Ajoute le bloc initial manquant qui définit a à 0, puis, après 10 unités de temps, définit a à 1.

Que faire :

  1. Ajoute initial begin et end
  2. Définis a = 0
  3. Attends #10
  4. Définis a = 1
  5. Ajoute $finish pour terminer la 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