Déclarations Verilog Block
Il existe des moyens de regrouper un ensemble d'instructions qui sont syntaxiquement équivalentes à une seule instruction et sont appelées instructions de bloc . Il existe deux types d'instructions de bloc :séquentielles et parallèles.
Séquentiel
Les instructions sont enveloppées à l'aide de begin
et end
mots-clés et seront exécutés séquentiellement dans l'ordre donné, l'un après l'autre. Les valeurs de retard sont traitées par rapport au temps d'exécution de l'instruction précédente. Une fois toutes les instructions du bloc exécutées, le contrôle peut être passé ailleurs.
module design0;
bit [31:0] data;
// "initial" block starts at time 0
initial begin
// After 10 time units, data becomes 0xfe
#10 data = 8'hfe;
$display ("[Time=%0t] data=0x%0h", $time, data);
// After 20 time units, data becomes 0x11
#20 data = 8'h11;
$display ("[Time=%0t] data=0x%0h", $time, data);
end
endmodule
Dans l'exemple ci-dessus, première instruction dans le begin-end
bloc sera exécuté à 10 unités de temps, et la deuxième instruction à 30 unités de temps en raison de la nature relative. Il s'agit de 20 unités de temps après l'exécution de l'instruction précédente.
ncsim> run [Time=10] data=0xfe [Time=30] data=0x11 ncsim: *W,RNQUIE: Simulation is complete.
Parallèle
Un parallèle block peut exécuter des instructions simultanément et le contrôle de retard peut être utilisé pour fournir un ordre temporel des affectations. Les instructions sont lancées en parallèle en les enveloppant dans le fork
et join
mots-clés.
initial begin
#10 data = 8'hfe;
fork
#20 data = 8'h11;
#10 data = 8'h00;
join
end
Dans l'exemple ci-dessus, fork-join
bloc sera lancé après l'exécution de l'instruction à 10 unités de temps. Les instructions de ce bloc seront exécutées en parallèle et la première instruction qui sera lancée sera celle où les données sont affectées d'une valeur de 8'h00 puisque le délai pour cela est de 10 unités de temps après le lancement du fork-join. Après 10 unités de temps supplémentaires, la première instruction sera lancée et les données prendront la valeur 8'h11.
initial begin
#10 data = 8'hfe;
fork
#10 data = 8'h11;
begin
#20 data = 8'h00;
#30 data = 8'haa;
end
join
end
Il y a un begin-end
bloc dans l'exemple ci-dessus, et toutes les instructions du bloc début-fin seront exécutées séquentiellement, mais le bloc lui-même sera lancé en parallèle avec les autres instructions. Ainsi, les données obtiendront 8'h11 à 20 unités de temps, 8'h00 à 30 unités de temps et 8'haa à 60 unités de temps.
Nommage des blocs
Les blocs séquentiels et parallèles peuvent être nommés en ajoutant : name_of_block
après les mots clés begin
et fork
. Ce faisant, le bloc peut être référencé dans un disable
déclaration.
begin : name_seq
[statements]
end
fork : name_fork
[statements]
join
Verilog
- Comment l'automatisation de la préparation des données accélère le temps d'obtention d'informations ?
- Tutoriel Verilog
- Concaténation Verilog
- Verilog - Dans une coquille de noix
- Affectations Verilog
- Verilog bloquant et non bloquant
- Blocs de contrôle Verilog
- Fonctions Verilog
- Sémantique de planification Verilog