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 $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 \`timescale directives 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

  1. Verilog beheersen: Complete tutorial voor digitale schakelingontwerp
  2. Verilog concatenatie beheersen: Een praktische gids
  3. Verilog-toewijzingen begrijpen: types, syntax en best practices
  4. Verilog Blocking vs. Non-Blocking: belangrijkste verschillen uitgelegd
  5. Verilog-functies beheersen voor efficiënt RTL-ontwerp
  6. Verilog Tasks begrijpen: Functions vs Tasks, Syntax en Gebruik
  7. Praktisch Verilog Gate-Level Ontwerp: AND, OR, NOT Gates & 2x1 Multiplexer
  8. Verilog Clock Generator: Ontwerp & Implementatie Gids
  9. Verilog Math Functions beheersen voor efficiënt Hardware-ontwerp
  10. Verilog Timescales begrijpen en printen in elke Scope
  11. Verilog File I/O onder de knie: Openen, Lezen, Schrijven en Sluiten