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 seule fois) et always (s'exécute en continu). Découvrons 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 (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 initiales
  • Générer des signaux de test
  • Afficher des messages
  • Démarrer la simulation

Saxe

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

Ceci modifie a aux moments : 0, 10 et 20.

Initial vs Always

 initialalways
RunsOnceEn continu (infiniment)
Utilisé pourTestbenches, initialisationMatériel (bascules, compteurs)
Synthétisable ?Non (simulation uniquement)Oui (avec liste de sensibilité)

Remarques importantes

  • Les blocs initial ne sont pas synthétisables — ils ne peuvent pas être convertis en matériel
  • Utilisez initial uniquement dans les bancs de test (testbenches)
  • Si le banc de test contient une horloge autonomique (par ex. always #5 clk = ~clk;), la simulation s'exécute indéfiniment sauf si vous appelez $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

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

Ce qu'il faut faire :

  1. Ajoutez initial begin et end
  2. Définissez a = 0
  3. Attendez #10
  4. Définissez a = 1
  5. Ajoutez $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