Menu
Coddy logo textTech

Bloc Initial

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

Le Verilog possède deux blocs procéduraux : initial (s'exécute une seule fois) et always (s'exécute en continu). Abordons 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

Syntaxe

initial begin
  // Les instructions s'exécutent une seule 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 instants : 0, 10 et 20.

Initial vs Always

 initialalways
ExécutionUne seule foisEn continu (indéfiniment)
Utilisation pourBancs de test, initialisationMatériel (bascules, compteurs)
Synthétisable ?Non (simulation uniquement)Oui (avec liste de sensibilité)

Notes importantes

  • Les blocs initial ne sont pas synthétisables — ils ne peuvent pas être transformés en matériel
  • Utilisez initial uniquement dans les testbenches
  • Sans $finish, la simulation s'exécutera indéfiniment (aucune horloge pour l'arrêter)
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

Aide-mémoire

Le bloc initial s'exécute une seule fois au temps de simulation 0. Utilisé uniquement dans les bancs d'essai (non synthétisable).

initial begin
  a = 0;       // défini au temps 0
  #10 a = 1;   // défini au temps 10
  #10 a = 0;   // défini au temps 20
  $finish;     // fin de la simulation
end

Sans $finish, la simulation s'exécute indéfiniment.

initialalways
ExécutionsUne seule foisEn continu
Utilisation pourBancs d'essaiMatériel
Synthétisable ?NonOui

Essayez vous-même

module test;
  reg a;
  
  // À FAIRE : Ajouter un bloc initial ici
  // Définir a = 0
  // Attendre #10
  // Définir 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