Systemverilog: $realtime 显示不同的时间刻度精度

1 verilog system-verilog

我试图为以下时间刻度设置打印 $realtime:

`timescale 1ns/10ps 
initial begin        
    #10;
    $display(" %0t",$realtime);
    $display($realtime);
end
Run Code Online (Sandbox Code Playgroud)

得到打印的结果是:

1000
10
Run Code Online (Sandbox Code Playgroud)

我只是好奇在实时打印中使用格式说明符有什么不同?如果我错了,请纠正我。我相信由于时间精度,它正在打印 1000 (10 *10ps = 1000 ns)。但差异的原因是什么?

Mat*_*lor 5

$timeformat系统任务用于设置输出的格式时%t,使用格式说明。它应该只被调用一次(如果它被调用多次,最后一次调用将覆盖之前的调用)。它有 4 个参数:它们是:

$timeformat(<units>, <precision>, <suffix>, minimum field width>);

units               : log base 10 of the unit (eg -9 is ns)
precision           : the number of decimal places
suffix              : a string (eg "ns")
minimum field width : the minimum field width
Run Code Online (Sandbox Code Playgroud)

$display(" %0t",$realtime);正在按照$timeformat系统任务设置的时间格式打印时间。由于您尚未调用$timeformat系统任务,因此使用默认值。他们是:

units               : the simulation precision (10ps in your case)
precision           : 0
suffix              : null string
minimum field width : 20
Run Code Online (Sandbox Code Playgroud)

$display($realtime);将从$realtime系统函数返回的值显示为十进制整数 -10在您的情况下。