Utilisation des tâches système
Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 77 sur 90.
Les tâches système sont des commandes intégrées en Verilog qui commencent par un signe dollar ($). Elles effectuent des fonctions utiles telles que l'affichage de messages, l'arrêt de la simulation et la création de fichiers de formes d'onde.
Nous avons déjà abordé $display, $monitor, $dumpfile et $dumpvars dans les leçons précédentes. Dans cette leçon, nous examinerons d'autres tâches système utiles dans les bancs d'essai.
Tâches système supplémentaires
| Tâche système | Objectif |
|---|---|
$time | Retourne le temps de simulation actuel |
$finish | Termine la simulation |
$stop | Met la simulation en pause |
$random | Génère un nombre aléatoire |
$time
Retourne le temps de simulation actuel. Utile pour suivre le moment où les événements se produisent.
$display("Current time is %0t", $time);$finish
Termine la simulation. Utilisez-le toujours à la fin de votre banc de test (testbench).
$finish;$stop
Met en pause la simulation. Peut être reprise avec une commande du simulateur. Utile pour le débogage.
$stop;$random
Génère un nombre aléatoire. Utile pour créer des stimulus de test aléatoires.
reg [7:0] rand_value;
rand_value = $random;Exemple utilisant plusieurs tâches système
module system_tasks_demo;
reg [7:0] data;
integer i;
initial begin
$display("Simulation started at time %0t", $time);
for (i = 0; i < 5; i = i + 1) begin
data = $random;
$display("Random value %d: %b", i, data);
end
$stop;
#10 $display("Resumed at time %0t", $time);
$display("Simulation finished at time %0t", $time);
$finish;
end
endmoduleDéfi
Ajoutez les tâches système manquantes à ce banc d'essai (testbench).
Ce qu'il faut faire :
- Ajoutez
$displaypour afficher l'heure actuelle au début - Ajoutez
$displaypour afficher l'heure actuelle à la fin - Ajoutez
$finishpour terminer la simulation
Aide-mémoire
Les tâches système en Verilog commencent par $ et effectuent des utilitaires de simulation :
| Tâche système | Objectif |
|---|---|
$time | Retourne le temps de simulation actuel |
$finish | Termine la simulation |
$stop | Met la simulation en pause |
$random | Génère un nombre aléatoire |
$display("Time: %0t", $time); // affiche le temps actuel
$finish; // termine la simulation
$stop; // met la simulation en pause
reg [7:0] rand_value;
rand_value = $random; // assigne un nombre aléatoireEssayez 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 $display avec l'heure actuelle au début
// Format: "Start time: %0t"
$monitor("Time %0t: a=%b, b=%b, c=%b", $time, a, b, c);
a = 0; b = 0; #10;
a = 0; b = 1; #10;
a = 1; b = 0; #10;
a = 1; b = 1; #10;
// TODO: Ajouter $display avec l'heure actuelle à la fin
// Format: "End time: %0t"
// TODO: Ajouter $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