Verilog $timeformat meistern: Präzision und Anzeigesteuerung
Die Verilog-`timescale-Direktive spezifiziert Zeiteinheit und Präzision für Simulationen.
Die Verilog-Systemfunktion $timeformat spezifiziert den %t-Format-Spezifizierer-Berichtsstil in Display-Anweisungen wie $display und $strobe.
Syntax
$timeformat(<unit_number>, <precision>, <suffix_string>, <minimum field width>);
- unit_number ist die kleinste Zeitpräzision aller in Quellcode verwendeten
`timescale-Direktiven - precision stellt die Anzahl der Nachkommastellen für den aktuellen Timescale dar
- suffix_string ist eine Option, um die Skala neben den Echtzeitwerten anzuzeigen
| Unit Number | Zeiteinheit |
|---|---|
| -3 | 1ms |
| -6 | 1us |
| -9 | 1ns |
| -12 | 1ps |
| -15 | 1fs |
Beispiel #1: 1ns/1ps
Hier ist ein Beispiel, wie $timeformat das Format der Zeit-Einheiten-Anzeige beeinflusst.
`timescale 1ns/1ps
module tb;
bit a;
initial begin
// Ein wenig warten - beachten Sie, dass die Präzision 1/1000 der
// Hauptskala (1ns) ist, wird dieser Delay an der 3. Stelle
// durch die 3-stellige Timescale-Präzision abgeschnitten
#10.512351;
// Aktuelle Zeit mit Standard-timeformat-Parametern anzeigen
$display("[T=%0t] a=%0b", $realtime, a);
// Timeformat-Parameter ändern und erneut anzeigen
$timeformat(-9, 2, " ns");
$display("[T=%0t] a=%0b", $realtime, a);
// Leerzeichen im Suffix entfernen und Nachkommastellen auf 5 erweitern
$timeformat(-9, 5, "ns");
$display("[T=%0t] a=%0b", $realtime, a);
// Hier ist das Suffix falsch, es sollte nicht "ns" sein, weil wir
// die Anzeige in "ps" (-12) einstellen
$timeformat(-12, 3, " ns");
$display("[T=%0t] a=%0b", $realtime, a);
// Suffix auf ps korrigieren
$timeformat(-12, 2, " ps");
$display("[T=%0t] a=%0b", $realtime, a);
end
endmodule
Simulationslog:
xcelium> run [T=10512] a=0 [T=10.51 ns] a=0 [T=10.51200ns] a=0 [T=10512.000 ns] a=0 [T=10512.00 ps] a=0 xmsim: *W,RNQUIE: Simulation is complete.
Beispiel #2: 1ns/100ps
Hier ist dasselbe Beispiel wie oben mit einem anderen Timescale.
`timescale 1ns/100ps
Simulationslog:
xcelium> run [T=105] a=0 [T=10.50 ns] a=0 [T=10.50000ns] a=0 [T=10500.000 ns] a=0 [T=10500.00 ps] a=0 xmsim: *W,RNQUIE: Simulation is complete.
Beispiel #3: 100ns/1ns
`timescale 100ns/1ns
#1 repräsentiert 100ns und daher ergibt #10 1000ns.
Simulationslog:
xcelium> run [T=1051] a=0 [T=1051.00 ns] a=0 [T=1051.00000ns] a=0 [T=1051000.000 ns] a=0 [T=1051000.00 ps] a=0 xmsim: *W,RNQUIE: Simulation is complete.
Verilog
- Verilog meistern: Komplettes Tutorial für digitales Schaltungsdesign
- Verilog Concatenation meistern: Praktischer Leitfaden
- Verilog Assignments verstehen: Typen, Syntax und Best Practices
- Verilog Blocking vs. Non-Blocking: Wichtige Unterschiede erklärt
- Verilog Functions meistern für effizientes RTL-Design
- Verilog Tasks verstehen: Functions vs. Tasks, Syntax und Verwendung
- Praktisches Verilog Gate-Level Design: AND, OR, NOT Gatter & 2x1 Multiplexer
- Verilog Clock Generator: Design & Implementierungsleitfaden
- Verilog Math Functions meistern für effizientes Hardware-Design
- Verilog Timescales an jedem Scope verstehen und ausgeben