Tâches d'affichage Verilog
Les tâches système d'affichage sont principalement utilisées pour afficher des messages d'information et de débogage afin de suivre le flux de simulation à partir des fichiers journaux et permettent également de déboguer plus rapidement. Il existe différents groupes de tâches d'affichage et de formats dans lesquels ils peuvent imprimer des valeurs.
Afficher/Écrire des tâches
Syntaxe
Les deux $display et $write afficher les arguments dans l'ordre dans lequel ils apparaissent dans la liste des arguments.
$display(<list_of_arguments>);
$write(<list_of_arguments>);
$write n'ajoute pas le caractère de saut de ligne à la fin de sa chaîne, tandis que $display fait et peut être vu à partir de l'exemple ci-dessous.
Exemple
module tb;
initial begin
$display ("This ends with a new line ");
$write ("This does not,");
$write ("like this. To start new line, use newline char
");
$display ("This always start on a new line !");
end
endmodule
Journal de simulation ncsim> run This ends with a new line This does not,like this. To start new line, use newline char Hi there ! ncsim: *W,RNQUIE: Simulation is complete.
Stroboscopes Verilog
$strobe imprime les valeurs finales des variables à la fin du pas de temps delta actuel et a un format similaire comme $display .
module tb;
initial begin
reg [7:0] a;
reg [7:0] b;
a = 8'h2D;
b = 8'h2D;
#10; // Wait till simulation reaches 10ns
b <= a + 1; // Assign a+1 value to b
$display ("[$display] time=%0t a=0x%0h b=0x%0h", $time, a, b);
$strobe ("[$strobe] time=%0t a=0x%0h b=0x%0h", $time, a, b);
#1;
$display ("[$display] time=%0t a=0x%0h b=0x%0h", $time, a, b);
$strobe ("[$strobe] time=%0t a=0x%0h b=0x%0h", $time, a, b);
end
endmodule
Notez que $strobe affiche la valeur finale mise à jour de la variable b au temps 10ns qui est 0x2E , et $display capte cela uniquement dans le prochain delta de simulation à 11ns.
ncsim> run [$display] time=10 a=0x2d b=0x2d [$strobe] time=10 a=0x2d b=0x2e [$display] time=11 a=0x2d b=0x2e [$strobe] time=11 a=0x2d b=0x2e ncsim: *W,RNQUIE: Simulation is complete. ncsim> exit
Moniteurs continus Verilog
$monitor aide à imprimer automatiquement les valeurs de variable ou d'expression chaque fois que la variable ou l'expression dans sa liste d'arguments change. Il obtient un effet similaire en appelant $display après chaque mise à jour de l'un de ses arguments.
module tb;
initial begin
reg [7:0] a;
reg [7:0] b;
a = 8'h2D;
b = 8'h2D;
#10; // Wait till simulation reaches 10ns
b <= a + 1; // Assign a+1 value to b
$monitor ("[$monitor] time=%0t a=0x%0h b=0x%0h", $time, a, b);
#1 b <= 8'hA4;
#5 b <= a - 8'h33;
#10 b <= 8'h1;
end
endmodule
Notez que $monitor est comme une tâche qui est générée pour s'exécuter en arrière-plan du thread principal qui surveille et affiche les changements de valeur de ses variables d'argument. Un nouveau $monitor la tâche peut être émise autant de fois que nécessaire pendant la simulation.
ncsim> run [$monitor] time=10 a=0x2d b=0x2e [$monitor] time=11 a=0x2d b=0xa4 [$monitor] time=16 a=0x2d b=0xfa [$monitor] time=26 a=0x2d b=0x1 ncsim: *W,RNQUIE: Simulation is complete.
Spécificateurs de format Verilog
Afin d'imprimer des variables à l'intérieur des fonctions d'affichage, les spécificateurs de format appropriés doivent être donnés pour chaque variable.
| Argumentation | Description |
|---|---|
| %h, %H | Affichage au format hexadécimal |
| %d, %D | Affichage au format décimal |
| %b, %B | Affichage au format binaire |
| %m, %M | Afficher le nom hiérarchique |
| %s, %S | Afficher sous forme de chaîne |
| %t, %T | Affichage au format horaire |
| %f, %F | Afficher 'réel' au format décimal |
| %e, %E | Afficher 'réel' dans un format exponentiel |
module tb;
initial begin
reg [7:0] a;
reg [39:0] str = "Hello";
time cur_time;
real float_pt;
a = 8'h0E;
float_pt = 3.142;
$display ("a = %h", a);
$display ("a = %d", a);
$display ("a = %b", a);
$display ("str = %s", str);
#200 cur_time = $time;
$display ("time = %t", cur_time);
$display ("float_pt = %f", float_pt);
$display ("float_pt = %e", float_pt);
end
endmodule
Journal de simulation ncsim> run a = 0e a = 14 a = 00001110 str = Hello time = 200 float_pt = 3.142000 float_pt = 3.142000e+00 ncsim: *W,RNQUIE: Simulation is complete.
Séquences d'échappement Verilog
Certains caractères sont considérés comme spéciaux car ils servent à d'autres fins d'affichage comme les sauts de ligne, les tabulations et les sauts de formulaire. Pour imprimer ces caractères spéciaux , chaque occurrence de ces caractères doit être échappée .
| Argumentation | Description |
|---|---|
| Caractère de saut de ligne | |
| Caractère de tabulation | |
| Le personnage | |
| " | Le caractère " |
| %% | Le caractère % |
module tb;
initial begin
$write ("Newline character
");
$display ("Tab character stop");
$display ("Escaping " %%");
/*
// Compilation errors
$display ("Without escaping "); // ERROR : Unterminated string
$display ("Without escaping ""); // ERROR : Unterminated string
*/
end
endmodule
Journal de simulation ncsim> run Newline character Tab character stop Escaping " % ncsim: *W,RNQUIE: Simulation is complete.
Verilog