Contrôle de simulation : $finish, $stop
| Tâche système | Format d'appel | Description de la tâche |
|---|---|---|
| Quitter la simulation | $finish( type ) ; | Termine la simulation. Le paramètre type sélectionne s'il faut imprimer des informations en quittant la simulation. type=0 : Quitter directement sans imprimer type=1 : Imprimer le temps de simulation et les informations de ligne de l'emplacement de l'instruction type=2 : Affiche le temps de simulation, l'emplacement, la mémoire et l'utilisation du temps CPU |
| Mettre la simulation en pause | $stop( type ) ; | Met la simulation en pause. Le format d'utilisation est le même que celui de $finish. |
Tant $finish que $stop ont pour fonction d'arrêter la simulation, mais ils restent différents.
$finish termine la simulation en cours. $stop met la simulation en cours en pause. Après la mise en pause de la simulation, elle peut être poursuivie via l'outil de simulation Verilog ou la ligne de commande, mais après la fin de la simulation, elle ne peut en aucun cas être poursuivie. $stop est similaire à la fonction de débogage par points d'arrêt du langage C.
La simulation suivante illustre les informations imprimées correspondant au paramètre type.
Exemple
forever begin
#100;
if ($time >= 10000) $finish(0) ;
//if ($time >= 10000) $finish(1) ;
//if ($time >= 10000) $finish(2) ;
end
end
$finish(0), aucune information n'est imprimée lorsque la simulation se termine.
$finish(1), lorsque la simulation se termine, il imprime le temps de simulation et les informations de ligne où se trouve $finish, comme indiqué ci-dessous.
La précision temporelle du module test est ns, mais la précision temporelle du simulateur est ps, donc les informations de temps imprimées diffèrent d'un facteur 1000.

$finish(2), lorsque la simulation se termine, il n'affiche pas seulement le temps de simulation et les informations de ligne, mais affiche aussi le temps d'utilisation du PC et l'utilisation de la mémoire, comme montré ci-dessous.

Format temporel : $printtimescale, $timeformat
| Tâche système | Format d'appel et description | |
|---|---|---|
| Afficher le temps Unité et précision | $printtimescale( hierarchy ) ; | |
| Cette tâche système affiche les informations d'échelle de temps dans le format suivant : Échelle de temps de ( hierarchy ) est 1 ( unité ) / 1 ( précision ) hierarchy est le niveau d'accès du module, peut être omis. Dans ce cas, il affiche les informations d'échelle de temps du module courant. | ||
| Définir le temps Unité et précision | $timeformat(unit_num, precision_num, suffix_string, min_field_width) | |
| unit_num, définit l'unité de temps, sa valeur par défaut est `timescale precision_num, définit le nombre de chiffres décimaux significatifs dans l'unité de temps, sa valeur par défaut est 0 suffix_string, définit les informations de suffixe temporel, telles que "ns", vide par défaut min_field_width, définit le nombre de caractères numériques occupés par les informations de temps, 20 par défaut |
Lorsque les tâches d'affichage (telles que $display, $monitor, etc.) et les tâches d'écriture de fichier (telles que $display, etc.) utilisent le format "%t" pour la sortie des données, $timeformat peut spécifier le format de sortie des informations d'unité de temps.
Dans $timeformat, unit_num utilise un nombre signé pour spécifier l'unité de temps. La relation correspondante est présentée dans le tableau suivant :
| unit_num | Unité de temps | unit_num | Unité de temps |
|---|---|---|---|
| 0 | 1 s | -8 | 10 ns |
| -1 | 100 ms | -9 | 1 ns |
| -2 | 10 ms | -10 | 100 ps |
| -3 | 1 ms | -11 | 10 ps |
| -4 | 100 us | -12 | 1 ps |
| -5 | 10 us | -13 | 100 fs |
| -6 | 1 us | -14 | 10 fs |
| -7 | 100 ns | -15 | 1 fs |
Utilisez le code suivant pour effectuer une simulation simple des 2 tâches système de l'échelle de temps.
Exemple
initial begin
# 10 ;
//précision en ps, 5 chiffres significatifs dans la partie décimale, suffixe d'unité affiché comme "my-ps", occupant 15 positions de caractères
$timeformat(-12, 5, " my-ps", 15) ;
end
initial begin
# 5 ;
$printtimescale() ;
$display("Temps avant la reconfiguration : %t", $time);
# 10 ;
$printtimescale() ;
$display("Temps après la reconfiguration : %t", $time);
end
Le journal de simulation est affiché ci-dessous.
D'après la figure, il est possible de comparer le format d'affichage du temps avant et après le réglage de $timeformat.
De plus, au cours de ce processus, l'échelle de temps reste inchangée ; $timeformat ne modifie que le format d'affichage du temps.

Temps de simulation : $time, $stime, $realtime
| Appel de tâche système | Description |
|---|---|
| $time | Renvoie une valeur de temps entière de 64 bits |
| $stime | Renvoie une valeur temporelle entière sur 32 bits |
| $realtime | Renvoie une valeur temporelle réelle, qui peut être un nombre à virgule flottante |
Le code de simulation est le suivant :
Exemple
#10;
$display("$time sortie1: %t", $time);
$display("$stime sortie1: %t", $stime);
$display("$realtime sortie1: %t", $realtime);
#3.2;
$display("$time sortie2: %t", $time);
$display("$stime sortie2: %t", $stime);
$display("$realtime sortie2: %t", $realtime);
#5.6;
$display("$time sortie2: %t", $time);
$display("$stime sortie2: %t", $stime);
$display("$realtime sortie2: %t", $realtime);
end
Le journal de simulation est affiché ci-dessous.
Comme le temps de simulation est court, il n'y a pas de différence entre $time et $stime.
Cependant, $realtime lit précisément le temps de simulation selon la précision temporelle actuelle, tandis que $time et $stime arrondissent le temps actuel selon la précision temporelle.

Passage d'arguments en ligne de commande : $test$plusargs, $value$plusargs
Verilog fournit également les tâches interactives $test$plusargs et $value$plusargs. Pendant la simulation, des paramètres peuvent être passés via des arguments de ligne de commande, ce qui offre une grande commodité pour le débogage de simulation.
| Tâche système | Format d’appel | Description de la tâche |
|---|---|---|
| Passage d'arguments de type chaîne | $test$plusargs( str ) ; | Pendant la simulation, si la donnée de chaîne passée via la ligne de commande correspond à str, la valeur de retour est 1, sinon elle est 0. |
| Passage d'arguments numériques | $value$plusargs( str, var ) ; | Pendant la simulation, si la donnée de chaîne passée via la ligne de commande correspond à str, la valeur de retour est 1, sinon elle est 0. Le type de la variable var passée au module doit être spécifié à l'intérieur de str. Reportez-vous à la tâche d'affichage $display pour le format. |
Lors de l'utilisation de $test$plusargs( str ), ajoutez simplement "+str " à la ligne de commande de simulation.
Lors de l'utilisation de $value$plusargs( str, var ), le type de la valeur lors du passage du paramètre doit être spécifié à l'intérieur de str. Lors du passage de paramètres sur la ligne de commande, la valeur n'a pas besoin de spécification de base ; conservez simplement la valeur dans la base correspondante. Le format des paramètres de ligne de commande doit suivre le format déclaré par str dans $value$plusargs.
La simulation suivante illustre cela :
Exemple
if ($test$plusargs("DISPLAY_CTRL")) begin
$display("Afficher les informations de simulation!!!");
end
end
reg [1:0] display_sel ;
initial begin
if ($value$plusargs("INFO_SEL=%b", display_sel)) begin
$display("Le transfert de paramètre réussit!!!");
end
else begin
display_sel = 2'b0 ;
end
end
initial begin
#1 ;
if (display_sel == 2'b01)
$display("Vous avez sélectionné Exemple!!!");
else if (display_sel == 2'b10)
$display("Vous avez sélectionné Verilog!!!");
else if (display_sel == 2'b11)
$display("Vous m'avez sélectionné!!!");
else
$display("Que voulez-vous vraiment???");
end
Ajouter à la ligne de commande de simulation: +DISPLAY_CTRL +INFO_SEL=01
Le journal de simulation est le suivant. On peut en déduire que le paramètre de chaîne et le paramètre binaire sont tous deux transmis correctement.

Téléchargement du code source pour ce chapitre
Téléchargement