Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Verilog

Verilog-weergavetaken

Weergavesysteemtaken worden voornamelijk gebruikt om informatieve en foutopsporingsberichten weer te geven om de stroom van simulatie uit logbestanden te volgen en helpt ook om sneller fouten op te sporen. Er zijn verschillende groepen weergavetaken en formaten waarin ze waarden kunnen afdrukken.

Taken weergeven/schrijven

Syntaxis

Beide $display en $write geef argumenten weer in de volgorde waarin ze in de lijst met argumenten staan.

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

  

$write voegt het teken van de nieuwe regel niet toe aan het einde van zijn string, terwijl $display doet en kan worden gezien in het onderstaande voorbeeld.

Voorbeeld

  
  
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

  
Simulatielogboek
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.

Verilog-flitsers

$strobe drukt de uiteindelijke waarden van variabelen af ​​aan het einde van de huidige delta-tijdstap en heeft een vergelijkbare indeling als $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

  

Merk op dat $strobe toont de laatste bijgewerkte waarde van de variabele b op tijd 10ns wat 0x2E . is , en $display pikt dat pas op in de volgende simulatie-delta op 11ns.

Simulatielogboek
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

Verilog continue monitoren

$monitor helpt bij het automatisch afdrukken van variabele- of uitdrukkingswaarden wanneer de variabele of uitdrukking in de argumentenlijst verandert. Het bereikt een soortgelijk effect van het aanroepen van $display na elke keer dat een van de argumenten wordt bijgewerkt.

  
  
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

  

Merk op dat $monitor is als een taak die wordt voortgebracht om te worden uitgevoerd op de achtergrond van de hoofdthread die waardeveranderingen van zijn argumentvariabelen bewaakt en weergeeft. Een nieuwe $monitor taak kan een willekeurig aantal keren worden gegeven tijdens de simulatie.

Simulatielogboek
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.

Verilog-indelingsspecificaties

Om variabelen binnen weergavefuncties af te drukken, geschikte formaatspecificaties moeten voor elke variabele worden opgegeven.

Argument Beschrijving
%h, %H Weergeven in hexadecimaal formaat
%d, %D Weergeven in decimaal formaat
%b, %B Weergeven in binair formaat
%m, %M Hierarchische naam weergeven
%s, %S Weergeven als een tekenreeks
%t, %T Weergave in tijdformaat
%f, %F Geef 'echt' weer in decimaal formaat
%e, %E Geef 'echt' weer in exponentieel formaat
  
  
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

  
Simulatielogboek
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.

Verilog Escape-reeksen

Sommige tekens worden als speciaal beschouwd omdat ze voor andere weergavedoeleinden staan, zoals nieuwe regels, tabbladen en formulierfeeds. Om deze speciale tekens af te drukken:, moet elk voorkomen van dergelijke tekens worden escaped .

Argument Beschrijving
Nieuwregelteken
Tabteken
Het personage
" Het " teken
%% Het %-teken
  
  
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

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


Verilog

  1. Verilog-zelfstudie
  2. Verilog-aaneenschakeling
  3. Verilog-opdrachten
  4. Verilog blokkeren en niet-blokkeren
  5. Verilog-functies
  6. Verilog-taak
  7. Verilog `ifdef voorwaardelijke compilatie'
  8. Verilog hiërarchisch referentiebereik
  9. Verilog-klokgenerator
  10. Verilog-weergavetaken
  11. Verilog wiskundige functies