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

Tâches d'affichage Verilog

Les tâches système d'affichage sont principalement utilisées pour afficher des messages d'information et de débogage afin de suivre le flux de simulation à partir des fichiers journaux et permettent également de déboguer plus rapidement. Il existe différents groupes de tâches d'affichage et de formats dans lesquels ils peuvent imprimer des valeurs.

Afficher/Écrire des tâches

Syntaxe

Les deux $display et $write afficher les arguments dans l'ordre dans lequel ils apparaissent dans la liste des arguments.

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

  

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

Exemple

  
  
module tb;
  initial begin
    $display ("This ends with a new line ");
    $write ("This does not,");
    $write ("like this. To start new line, use newline char 
");
    $display ("This always start on a new line !");
  end
endmodule

  
Journal de simulation
ncsim> run
This ends with a new line 
This does not,like this. To start new line, use newline char 
Hi there !
ncsim: *W,RNQUIE: Simulation is complete.

Stroboscopes Verilog

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

  
  
module tb;
  initial begin
    reg [7:0] a;
    reg [7:0] b;
    
    a = 8'h2D;
    b = 8'h2D;
    
    #10;                  // Wait till simulation reaches 10ns
    b <= a + 1;           // Assign a+1 value to 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 affiche la valeur finale mise à jour de la variable b au temps 10ns qui est 0x2E , et $display capte cela uniquement dans le 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.
ncsim> exit

Moniteurs continus Verilog

$monitor aide à imprimer 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 en appelant $display après chaque mise à jour de l'un de ses arguments.

  
  
module tb;
  initial begin
    reg [7:0] a;
    reg [7:0] b;
    
    a = 8'h2D;
    b = 8'h2D;
        
    #10;                  // Wait till simulation reaches 10ns
    b <= a + 1;           // Assign a+1 value to 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 générée pour s'exécuter en arrière-plan du thread principal qui surveille et affiche les changements de valeur de ses variables d'argument. Un nouveau $monitor la tâche peut être émise autant de fois que nécessaire 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

Afin d'imprimer des variables à l'intérieur des fonctions d'affichage, les spécificateurs de format appropriés doivent être donnés pour chaque variable.

Argumentation Description
%h, %H Affichage au format hexadécimal
%d, %D Affichage au format décimal
%b, %B Affichage au format binaire
%m, %M Afficher le nom hiérarchique
%s, %S Afficher sous forme de chaîne
%t, %T Affichage au format horaire
%f, %F Afficher 'réel' au format décimal
%e, %E Afficher 'réel' dans un 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 servent à d'autres fins d'affichage comme les sauts de ligne, les tabulations et les sauts de formulaire. Pour imprimer ces caractères spéciaux , chaque occurrence de ces caractères doit être échappée .

Argumentation Description
Caractère de saut de ligne
Caractère de tabulation
Le personnage
" Le caractère "
%% Le caractère %
  
  
module tb;
  initial begin
    $write ("Newline character 
");
    $display ("Tab character 	stop");
    $display ("Escaping  " %%");
    
/*    
    // Compilation errors
    $display ("Without escaping ");       // ERROR : Unterminated string
    $display ("Without escaping "");       // ERROR : Unterminated string
*/
  end
endmodule

  
Journal de simulation
ncsim> run
Newline character 
 
Tab character	stop
Escaping  " %
ncsim: *W,RNQUIE: Simulation is complete.


Verilog

  1. Tutoriel Verilog
  2. Concaténation Verilog
  3. Affectations Verilog
  4. Verilog bloquant et non bloquant
  5. Fonctions Verilog
  6. Tâche Verilog
  7. Compilation conditionnelle Verilog `ifdef
  8. Portée de référence hiérarchique Verilog
  9. Générateur d'horloge Verilog