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