Verilog bloc initial
Un ensemble d'instructions Verilog est généralement exécuté séquentiellement dans une simulation. Ces instructions sont placées dans une procédurale bloquer. Il existe principalement deux types de procédure blocs dans Verilog - initial et toujours
Syntaxe
initial
[single statement]
initial begin
[multiple statements]
end
A quoi sert le bloc initial ?
Un initial
Le bloc n'est pas synthétisable et ne peut donc pas être converti en un schéma matériel avec des éléments numériques. Par conséquent, les blocs initiaux ne servent pas à grand-chose que d'être utilisés dans des simulations. Ces blocs sont principalement utilisés pour initialiser des variables et piloter des ports de conception avec des valeurs spécifiques.
Quand un bloc initial commence-t-il et se termine-t-il ?
Un initial
bloc est démarré au début d'une simulation au temps 0 unité. Ce bloc ne sera exécuté qu'une seule fois pendant toute la simulation. Exécution d'un initial
bloc se termine une fois que toutes les instructions du bloc sont exécutées.
L'image ci-dessus a un module
appelé behavior qui a deux signaux internes appelés a et b. Le initial
le bloc n'a qu'une seule instruction et il n'est donc pas nécessaire de placer l'instruction dans begin
et end
. Cette instruction attribue la valeur 2'b10 à a lorsque le bloc initial est démarré au temps 0 unités.
Que se passe-t-il s'il y a un élément de retard ?
Le code ci-dessous a une instruction supplémentaire qui attribue une valeur au signal b. Cependant, cela ne se produit qu'après 10 unités de temps à partir de l'exécution de l'instruction précédente. Cela signifie que a est d'abord affecté avec la valeur donnée, puis après 10 unités de temps, b est affecté à 0.
Combien de blocs initiaux sont autorisés dans un module ?
Il n'y a pas de limite au nombre de initial
blocs pouvant être définis à l'intérieur d'un module.
Le code ci-dessous a trois initial
blocs qui sont tous démarrés en même temps et exécutés en parallèle. Cependant, en fonction des déclarations et des délais dans chaque bloc initial, le temps nécessaire pour terminer le bloc peut varier.
Dans cet exemple, le premier bloc a un retard de 20 unités, tandis que le second a un retard total de 50 unités (10 + 40) et le dernier bloc a un retard de 60 unités. Par conséquent, la simulation prend 60 unités de temps pour se terminer car il y a au moins un bloc initial en cours d'exécution jusqu'à 60 unités de temps.
$finish
est une tâche système Verilog qui indique au simulateur de terminer la simulation en cours.
Si le dernier bloc avait un retard de 30 unités de temps comme indiqué ci-dessous, la simulation se serait terminée à 30 unités de temps, tuant ainsi tous les autres initial
blocs actifs à ce moment-là.
initial begin
#30 $finish;
end
Consultez l'exemple flash ci-dessous pour voir comment un initial
bloc est exécuté dans une simulation.
Cliquez ici pour un diaporama avec exemple de simulation !
Verilog