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