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
endExemple de base
initial begin
$display("Simulation started");
$display("This runs once");
$finish;
endSortie :
Simulation started
This runs onceUtilisation du bloc initial pour les signaux de test
initial begin
a = 0;
#10 a = 1;
#10 a = 0;
#10 $finish;
endCela modifie a aux temps suivants : 0, 10 et 20.
Initial vs Always
initial | always | |
|---|---|---|
| S’exécute | Une fois | Continuellement (pour toujours) |
| Utilisation | Bancs de test, initialisation | Matériel (bascules, compteurs) |
| Synthétisable ? | Non (simulation uniquement) | Oui (avec une liste de sensibilité) |
Notes importantes
initialblocks are not synthesizable. Ils ne peuvent pas être transformés en matériel- Utilisez
initialuniquement 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 blocinitial, le simulateur s’arrête de lui-même lorsqu’il ne reste plus d’événements, mais ajouter$finishreste une bonne pratique
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 :
- Add
initial beginetend - Définir
a = 0 - Wait
#10 - Définir
a = 1 - 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
endmoduleCette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Fondamentaux
1Introduction
Qu’est-ce que VerilogMatériel vs logicielVotre premier moduleCommentairesNiveaux d’abstraction de conception4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicEntraînez-vous par vous-même : Compilateur Verilog en ligne