Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Verilog

Maîtriser les Tâches d'Affichage Verilog : Débogage et Journalisation Efficaces

Les tâches système d'affichage sont principalement utilisées pour afficher des messages d'information et de débogage pour suivre le flux de simulation depuis les fichiers log et aident aussi à déboguer plus rapidement. Il y a différents groupes de tâches d'affichage et formats dans lesquels elles peuvent afficher les valeurs.

Tâches Display/Write

Syntaxe

À la fois $display et $write affichent les arguments dans l'ordre où ils apparaissent dans la liste d'arguments.

$display(<liste_d_arguments>);
$write(<liste_d_arguments>);

$write n'ajoute pas le caractère de nouvelle ligne \n à la fin de sa chaîne, tandis que $display le fait et cela peut être vu dans l'exemple ci-dessous.

Exemple

module tb;
  initial begin
    $display ("Ceci se termine par une nouvelle ligne ");
    $write ("Ceci ne se termine pas,");
    $write ("comme ça. Pour nouvelle ligne, utilisez le char newline ");
    $display ("Ceci commence toujours sur une nouvelle ligne !");
  end
endmodule

Journal de Simulation

ncsim> run
Ceci se termine par une nouvelle ligne
Ceci ne se termine pas,comme ça. Pour nouvelle ligne, utilisez le char newline
Ceci commence toujours sur une nouvelle ligne !
ncsim: *W,RNQUIE: Simulation is complete.

Strobes Verilog

$strobe affiche les valeurs finales des variables à la fin du pas de temps delta courant et a un format similaire à $display.

module tb;
  initial begin
    reg [7:0] a;
    reg [7:0] b;
    a = 8'h2D;
    b = 8'h2D;
    #10; // Attendre que la simulation atteigne 10ns
    b <= a + 1; // Assigner la valeur a+1 à b
    $display ("[$display] time=%0t a=0x%0h b=0x%0h", $time, a, b);
    $strobe ("[$strobe] time=%0t a=0x%0h b=0x%0h", $time, a, b);
    #1;
    $display ("[$display] time=%0t a=0x%0h b=0x%0h", $time, a, b);
    $strobe ("[$strobe] time=%0t a=0x%0h b=0x%0h", $time, a, b);
  end
endmodule

Notez que $strobe montre la valeur finale mise à jour de la variable b au temps 10ns qui est 0x2E, et $display la reprend seulement au prochain delta de simulation à 11ns.

Journal de Simulation

ncsim> run
[$display] time=10 a=0x2d b=0x2d
[$strobe] time=10 a=0x2d b=0x2e
[$display] time=11 a=0x2d b=0x2e
[$strobe] time=11 a=0x2d b=0x2e
ncsim: *W,RNQUIE: Simulation is complete.

Moniteurs Continus Verilog

$monitor aide à afficher automatiquement les valeurs de variable ou d'expression chaque fois que la variable ou l'expression dans sa liste d'arguments change. Il obtient un effet similaire à appeler $display après chaque fois que l'un de ses arguments est mis à jour.

module tb;
  initial begin
    reg [7:0] a;
    reg [7:0] b;
    a = 8'h2D;
    b = 8'h2D;
    #10; // Attendre que la simulation atteigne 10ns
    b <= a + 1; // Assigner la valeur a+1 à b
    $monitor ("[$monitor] time=%0t a=0x%0h b=0x%0h", $time, a, b);
    #1 b <= 8'hA4;
    #5 b <= a - 8'h33;
    #10 b <= 8'h1;
  end
endmodule

Notez que $monitor est comme une tâche qui est lancée pour s'exécuter en arrière-plan du thread principal qui surveille et affiche les changements de valeur de ses variables d'arguments. Une nouvelle tâche $monitor peut être émise n'importe quel nombre de fois pendant la simulation.

Journal de Simulation

ncsim> run
[$monitor] time=10 a=0x2d b=0x2e
[$monitor] time=11 a=0x2d b=0xa4
[$monitor] time=16 a=0x2d b=0xfa
[$monitor] time=26 a=0x2d b=0x1
ncsim: *W,RNQUIE: Simulation is complete.

Spécificateurs de Format Verilog

Pour afficher des variables dans les fonctions d'affichage, des spécificateurs de format appropriés doivent être donnés pour chaque variable.

Argument Description
%h, %H Afficher en format hexadécimal
%d, %D Afficher en format décimal
%b, %B Afficher en format binaire
%m, %M Afficher le nom hiérarchique
%s, %S Afficher comme une chaîne
%t, %T Afficher en format temps
%f, %F Afficher 'real' en format décimal
%e, %E Afficher 'real' en format exponentiel
module tb;
  initial begin
    reg [7:0] a;
    reg [39:0] str = "Hello";
    time cur_time;
    real float_pt;
    a = 8'h0E;
    float_pt = 3.142;
    $display ("a = %h", a);
    $display ("a = %d", a);
    $display ("a = %b", a);
    $display ("str = %s", str);
    #200 cur_time = $time;
    $display ("time = %t", cur_time);
    $display ("float_pt = %f", float_pt);
    $display ("float_pt = %e", float_pt);
  end
endmodule

Journal de Simulation

ncsim> run
a = 0e
a = 14
a = 00001110
str = Hello
time = 200
float_pt = 3.142000
float_pt = 3.142000e+00
ncsim: *W,RNQUIE: Simulation is complete.

Séquences d'Échappement Verilog

Certains caractères sont considérés comme spéciaux car ils représentent d'autres buts d'affichage comme nouvelle ligne, tabulations et sauts de page. Pour afficher ces caractères spéciaux, chaque occurrence de tels caractères doit être échappée.

Argument Description
\n Caractère nouvelle ligne
\t Caractère tabulation
\\ Le caractère \
\" Le caractère "
%% Le caractère %
module tb;
  initial begin
    $write ("Caractère nouvelle ligne \n");
    $display ("Caractère tabulation \t stop");
    $display ("Échappement \" %%");
    /* // Erreurs de compilation
    $display ("Sans échappement \n"); // ERREUR : Chaîne non terminée
    $display ("Sans échappement \""); // ERREUR : Chaîne non terminée
    */
  end
endmodule

Journal de Simulation

ncsim> run
Caractère nouvelle ligne
Caractère tabulation stop
Échappement " %
ncsim: *W,RNQUIE: Simulation is complete.

Verilog

  1. Maîtriser Verilog : Tutoriel complet pour la conception de circuits numériques
  2. Maîtriser la concaténation Verilog : Guide pratique
  3. Comprendre les affectations Verilog : Types, Syntaxe et Bonnes Pratiques
  4. Verilog Blocking vs Non-Blocking : Différences Clés Expliquées
  5. Maîtriser les Fonctions Verilog pour une Conception RTL Efficace
  6. Comprendre les Tasks Verilog : Fonctions vs Tasks, Syntaxe et Utilisation
  7. Verilog `ifdef : Compilation Conditionnelle Expliquée
  8. Maîtriser la Portée de Référence Hiérarchique Verilog : Éviter les Collisions de Noms dans les Modules et Blocs
  9. Générateur d'Horloge Verilog : Guide de Conception et d'Implémentation