Verilog $timeformat beheersen: Precisie en Weergave-controle
De Verilog \`timescale directive specificeert tijdseenheid en precisie voor simulaties.
De Verilog $timeformat systeemfunctie specificeert de %t formaat-specifier rapportagestijl in display-statements zoals $display en $strobe.
Syntax
$timeformat(<unit_number>, <precisie>, <suffix_string>, <minimum_veldbreedte>);
- unit_number is de kleinste tijdprecisie uit alle
\`timescaledirectives in de broncode - precisie vertegenwoordigt het aantal fractionele cijfers voor de huidige timescale
- suffix_string is een optie om de schaal naast de echte tijdwaarden weer te geven
| Unit number | Tijdseenheid |
|---|---|
| -3 | 1ms |
| -6 | 1us |
| -9 | 1ns |
| -12 | 1ps |
| -15 | 1fs |
Voorbeeld #1: 1ns/1ps
Hier is een voorbeeld van hoe $timeformat het formaat van de tijdseenheid-weergave beïnvloedt.
\`timescale 1ns/1ps
module tb;
bit a;
initial begin
// Wacht even - let op dat omdat precisie 1/1000 is van
// de hoofschaal (1ns), deze vertraging afgekapt wordt op de
// 3e positie
#10.512351;
// Toon huidige tijd met standaard timeformat parameters
$display("[T=%0t] a=%0b", $realtime, a);
// Wijzig timeformat parameters en toon opnieuw
$timeformat(-9, 2, " ns");
$display("[T=%0t] a=%0b", $realtime, a);
// Verwijder spatie in suffix, en breid fractionele cijfers uit naar 5
$timeformat(-9, 5, "ns");
$display("[T=%0t] a=%0b", $realtime, a);
// Hier is suffix fout, het mag niet "ns" zijn omdat we
// weergave in "ps" instellen (-12)
$timeformat(-12, 3, " ns");
$display("[T=%0t] a=%0b", $realtime, a);
// Corrigeer suffix naar ps
$timeformat(-12, 2, " ps");
$display("[T=%0t] a=%0b", $realtime, a);
end
endmodule
Simulatie-log
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.
Voorbeeld #2: 1ns/100ps
Hier is hetzelfde voorbeeld met een andere timescale.
\`timescale 1ns/100ps
Simulatie-log
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.
Voorbeeld #3: 100ns/1ns
\`timescale 100ns/1ns
#1 vertegenwoordigt 100ns en dus #10 levert 1000ns op
Simulatie-log
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 beheersen: Complete tutorial voor digitale schakelingontwerp
- Verilog concatenatie beheersen: Een praktische gids
- Verilog-toewijzingen begrijpen: types, syntax en best practices
- Verilog Blocking vs. Non-Blocking: belangrijkste verschillen uitgelegd
- Verilog-functies beheersen voor efficiënt RTL-ontwerp
- Verilog Tasks begrijpen: Functions vs Tasks, Syntax en Gebruik
- Praktisch Verilog Gate-Level Ontwerp: AND, OR, NOT Gates & 2x1 Multiplexer
- Verilog Clock Generator: Ontwerp & Implementatie Gids
- Verilog Math Functions beheersen voor efficiënt Hardware-ontwerp
- Verilog Timescales begrijpen en printen in elke Scope
- Verilog File I/O onder de knie: Openen, Lezen, Schrijven en Sluiten