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 montre comment les signaux (comme clk, a, b, out) changent pendant la simulation. L’axe horizontal représente le temps, et l’axe vertical représente 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 formes d’onde (fichier VCD) que tu peux consulter dans un visualiseur de formes d’onde comme GTKWave. VCD signifie vidage des changements de valeur. C’est un fichier qui enregistre tous les changements de signaux pendant la simulation. Tu peux ouvrir ce fichier dans un visualiseur de formes d’onde pour voir les signaux visuellement.
$dumpfile
$dumpfile spécifie le nom du fichier de formes d'onde à créer.
Syntaxe :
$dumpfile("filename.vcd");Exemple :
$dumpfile("my_waveform.vcd");Cela crée un fichier appelé my_waveform.vcd.
$dumpvars
$dumpvars spécifie quels signaux enregistrer dans le fichier de chronogramme.
Syntaxe :
$dumpvars(level, module_name);| Paramètre | Signification |
|---|---|
level | Nombre de niveaux hiérarchiques à enregistrer (0 = tous les niveaux) |
module_name | Module dont les signaux doivent être enregistrés |
Remarque : la hiérarchie désigne les modules contenus dans d’autres modules. Utiliser 0 enregistre tous les signaux du module de premier niveau et de chaque module qu’il contient, tandis que 1 enregistre uniquement les signaux du module de premier niveau.
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 ses sous-modules
Exemple avec un banc de test
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 de dumpvars
| Niveau | Éléments enregistrés |
|---|---|
0 | Tous les signaux du module et de tous ses sous-modules |
1 | Uniquement les signaux du module spécifié (pas ceux des sous-modules) |
Défi
Ajoute les instructions $dumpfile et $dumpvars manquantes pour créer un fichier de chronogrammes.
À faire :
- Ajoute
$dumpfilepour créer un fichier nomméwaveform.vcd - Ajoute
$dumpvarspour enregistrer tous les signaux du moduletestbench
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: Ajoutez $dumpfile pour créer "waveform.vcd"
// TODO: Ajoutez $dumpvars pour enregistrer tous les signaux dans testbench
// 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 VerilogMatériel vs logicielVotre premier moduleCommentairesNiveaux d’abstraction de conception4Opérateurs - Partie 1
Opérateurs arithmétiquesOpérateur moduloOpérateurs de comparaisonRécapitulatif - Mathématiques simplesOpérateurs bit à bit7Affectations et portes
Affectation continueAffectation avec opérateursPrimitives de portes intégréesPortes AND, OR et NOTPortes XOR et XNORRécapitulatif - Circuit de portes logiques10Prise de décision
Instruction IfIf - ElseRécapitulatif - Comparateur simpleInstruction CaseCasex et CasezRécapitulatif - Conception d'une 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 RepeatBoucle ForeverInstruction DisableRécapitulatif - Modèles de boucles14Bases du banc de test
Qu'est-ce qu'un banc de testCréer des stimuliAffichage et surveillanceDumpfile et DumpvarsUtiliser les tâches systèmeRécapitulatif - Banc de test complet3Système de numération
Représentation binaireNombres dimensionnésNombres non dimensionnésNombres négatifsValeurs spéciales X et ZRécapitulatif - Formats des nombres6Modules
Structure d’un modulePorts d’entrée et de sortiePorts InoutInstantiation d’un moduleAssociation des ports par nomAssociation des ports par ordreRécapitulatif - Construire un module9Blocs procéduraux
Bloc alwaysBloc initialListe de sensibilitéAffectation bloquanteAffectation non bloquanteRécapitulatif - always vs initial12Projet de multiplexeur
Conception d’un multiplexeur 2 vers 1Conception d’un multiplexeur 4 vers 115Contrôleur de feux de circulation
Définition des étatsLogique de la machine à étatsEntraînez-vous par vous-même : Compilateur Verilog en ligne