Dumpfile et Dumpvars
Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 76 sur 90.
Les formes d'onde sont la représentation visuelle des changements de signaux au fil du temps. Une forme d'onde affiche comment les signaux (comme clk, a, b, out) changent pendant la simulation. L'axe horizontal montre le temps, et l'axe vertical montre les valeurs des signaux (0, 1, X, Z).
$dumpfile et $dumpvars sont des tâches système utilisées pour créer un fichier de forme d'onde (fichier VCD) que vous pouvez visualiser dans un visionneur de formes d'onde comme GTKWave. VCD signifie Value Change Dump. C'est un fichier qui enregistre tous les changements de signaux pendant la simulation. Vous pouvez ouvrir ce fichier dans un visionneur de formes d'onde pour voir les signaux visuellement.
$dumpfile
$dumpfile spécifie le nom du fichier de forme d'onde à créer.
Syntaxe :
$dumpfile("filename.vcd");Exemple :
$dumpfile("my_waveform.vcd");Cela crée un fichier nommé my_waveform.vcd.
$dumpvars
$dumpvars spécifie quels signaux enregistrer dans le fichier de forme d'onde.
Syntaxe :
$dumpvars(level, module_name);| Paramètre | Signification |
|---|---|
level | Nombre de niveaux de hiérarchie à vider (0 = tous les niveaux) |
module_name | De quel module vider les signaux |
Note : La hiérarchie signifie des modules à l'intérieur d'autres modules. L'utilisation de 0 extrait tous les signaux du module supérieur et de chaque module qu'il contient, tandis que 1 n'extrait que les signaux du module supérieur.
Utilisation courante
initial begin
$dumpfile("dump.vcd");
$dumpvars(0, testbench);
end$dumpfile("dump.vcd")→ crée un fichier nommédump.vcd$dumpvars(0, testbench)→ enregistre tous les signaux du moduletestbenchet de tous les sous-modules
Exemple avec Banc d'Essai (Testbench)
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
$dumpfile("dump.vcd");
$dumpvars(0, testbench);
$display("Creating waveform file...");
x = 0; y = 0; #10;
x = 0; y = 1; #10;
x = 1; y = 0; #10;
x = 1; y = 1; #10;
$finish;
end
endmoduleExemples de niveaux Dumpvars
| Niveau | Contenu de l'extraction |
|---|---|
0 | Tous les signaux du module et de tous les sous-modules |
1 | Uniquement les signaux du module spécifié (pas les sous-modules) |
Défi
Ajoutez les instructions $dumpfile et $dumpvars manquantes pour créer un fichier de forme d'onde.
Ce qu'il faut faire :
- Ajoutez
$dumpfilepour créer un fichier nomméwaveform.vcd - Ajoutez
$dumpvarspour enregistrer tous les signaux du moduletestbench
Aide-mémoire
Utilisez $dumpfile et $dumpvars à l'intérieur d'un bloc initial pour générer un fichier de forme d'onde VCD (Value Change Dump) afin de le visualiser dans des outils comme GTKWave :
initial begin
$dumpfile("dump.vcd"); // crée le fichier VCD
$dumpvars(0, testbench); // enregistre tous les signaux dans le banc de test et les sous-modules
endNiveaux de $dumpvars(level, module_name) :
0— tous les signaux du module et de tous les sous-modules1— uniquement les signaux du module spécifié (pas de sous-modules)
Essayez vous-même
module and_gate (
input a,
input b,
output c
);
assign c = a & b;
endmodule
module testbench;
reg a, b;
wire c;
and_gate dut (
.a(a),
.b(b),
.c(c)
);
initial begin
// TODO: Ajouter $dumpfile pour créer "waveform.vcd"
// TODO: Ajouter $dumpvars pour vider tous les signaux dans le banc de test
// Astuce: $dumpvars(0, testbench);
if ($test$plusargs("vcd")) begin
$display("VCD file created successfully");
end
$display("Simulation running...");
a = 0; b = 0; #10;
a = 0; b = 1; #10;
a = 1; b = 0; #10;
a = 1; b = 1; #10;
$display("Simulation complete. Open waveform.vcd");
$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