Display et Monitor
Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 75 sur 90.
$display et $monitor sont des tâches système utilisées pour afficher des informations de votre simulation. Elles vous aident à voir ce qui se passe à l'intérieur de votre conception.
$display
$display affiche un message une seule fois au moment où il est exécuté.
Syntaxe :
$display("message", variables);Exemple :
initial begin
$display("Simulation started");
#10;
$display("Time 10");
#10;
$display("Time 20");
endSortie :
Simulation started
Time 10
Time 20$monitor
$monitor affiche un message automatiquement dès que l'une de ses variables change.
Syntaxe :
$monitor("message", variables);Exemple :
initial begin
a = 0; b = 0;
$monitor("Time %0t: a=%b, b=%b", $time, a, b);
#10 a = 1;
#10 b = 1;
#10 a = 0;
endSortie :
Time 0: a=0, b=0
Time 10: a=1, b=0
Time 20: a=1, b=1
Time 30: a=0, b=1$display vs $monitor
| $display | $monitor | |
|---|---|---|
| Moment de l'affichage | Une seule fois lors de l'exécution | Chaque fois qu'une variable change |
| Nombre de fois | Autant de fois qu'il est appelé | En continu (jusqu'à modification) |
| Utilisation | En-têtes, messages de test | Suivi des signaux changeants |
Spécificateurs de format courants
| Spécificateur | Signification | Exemple |
|---|---|---|
%b | Binaire | $display("%b", a); |
%d | Décimal | $display("%d", count); |
%h | Hexadécimal | $display("%h", data); |
%t | Temps | $display("%t", $time); |
%0t | Temps (sans espaces) | $display("%0t", $time); |
%s | Chaîne de caractères | $display("%s", "Hello"); |
Règles importantes
| Règle | Explication |
|---|---|
$display s'affiche une seule fois | Idéal pour les en-têtes et les résultats finaux |
$monitor s'affiche lors d'un changement | Idéal pour surveiller les signaux |
Un seul $monitor actif à la fois | Le dernier remplace le précédent |
Utilisez $finish pour arrêter | Sinon, la simulation peut s'exécuter indéfiniment |
Défi
Ajoutez les instructions $display et $monitor manquantes à ce testbench.
Ce qu'il faut faire :
- Ajoutez
$displaypour afficher un en-tête : "Testing OR Gate" - Ajoutez
$monitorpour afficher le temps, x, y et z à chaque fois qu'un signal change. Format : "Time %0t: x=%b, y=%b, z=%b" - Ajoutez
$displayà la fin pour afficher "Test complete"
Aide-mémoire
$display affiche une fois lors de son exécution ; $monitor affiche automatiquement chaque fois qu'une de ses variables change.
$display("message", variables);
$monitor("message", variables);Exemple :
initial begin
$display("Simulation started");
$monitor("Time %0t: a=%b, b=%b", $time, a, b);
#10 a = 1;
#10 b = 1;
endSpécificateurs de format courants :
%b— Binaire%d— Décimal%h— Hexadécimal%t/%0t— Temps (avec/sans remplissage)%s— Chaîne de caractères
Règles clés :
- Un seul
$monitorest actif à la fois — le dernier remplace les précédents. - Utilisez
$finishpour arrêter la simulation.
Essayez vous-même
module or_gate (
input x,
input y,
output z
);
assign z = x | y;
endmodule
module testbench;
reg x, y;
wire z;
or_gate dut (
.x(x),
.y(y),
.z(z)
);
initial begin
// À FAIRE : Ajouter l'en-tête $display "Testing OR Gate"
// À FAIRE : Ajouter $monitor pour suivre le temps, x, y, z
// Format : "Time %0t: x=%b, y=%b, z=%b"
// Appliquer le stimulus
x = 0; y = 0; #10;
x = 0; y = 1; #10;
x = 1; y = 0; #10;
x = 1; y = 1; #10;
// À FAIRE : Ajouter $display "Test complete"
$finish;
end
endmoduleCette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Fondamentaux
1Introduction
Qu'est-ce que VerilogHardware vs SoftwareNiveaux d'abstraction de conceptionVotre premier moduleCommentaires4Opérateurs - Partie 1
Opérateurs arithmétiquesOpérateur moduloOpérateurs de comparaisonRécapitulatif - Mathématiques simplesOpérateurs bit à bit7Assignation et portes logiques
Assignation continueAssignation avec opérateursPrimitives de portes intégréesPortes AND OR NOTPortes XOR XNORRécapitulatif - Circuit à portes logiques10Prise de décision
Instruction IfIf - ElseRécapitulatif - Comparateur simpleInstruction CaseCasex et CasezRécapitulatif - Conception d'ALU2Types de données
Type WireType RegEntiers et RéelsVecteursTableauxParamètresRécapitulatif - Déclarer des signaux5Opérateurs - Partie 2
Opérateurs logiquesOpérateurs de réductionOpérateurs de décalageOpérateur de concaténationOpérateur conditionnelRécapitulatif - Défi sur les opérateurs11Boucles
Boucle ForBoucle WhileBoucle RépéterBoucle InfinieInstruction DisableRécapitulatif - Modèles de boucles14Les bases du Testbench
Qu'est-ce qu'un TestbenchCréation de stimuliDisplay et MonitorDumpfile et DumpvarsUtilisation des tâches systèmeRécapitulatif - Testbench complet3Système de numération
Représentation binaireNombres avec tailleNombres sans tailleNombres négatifsValeurs spéciales X et ZRécapitulatif - Formats de nombres6Modules
Structure d'un modulePorts d'entrée et de sortiePorts InoutInstanciation de moduleMappage de ports par nomMappage de ports par ordreRécapitulatif - Créer un module9Blocs procéduraux
Bloc AlwaysBloc InitialListe de sensibilitéAffectation bloquanteAffectation non bloquanteRécapitulatif - Always vs Initial12Projet Multiplexeur
Conception d'un Mux 2 vers 1Conception d'un Mux 4 vers 115Contrôleur de feux de circulation
Définition des étatsLogique de la machine à états