相关阅读
Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html
$time、 $stime和$realtime这三个系统函数提供了返回当前仿真时间方法。注意,这里的仿真时间的最小分辨能力是由仿真时间精度决定的,简单来说,可以理解为仿真时间精度是仿真器维护的仿真时间的最小单位(没有小数部分),而仿真时间精度由层次化设计中所有模块的时间精度中最小的决定,如下面的例子所示。仿真时间精度也是仿真能推进的最小时间。
//aaa模块和bbb模块组成的层次化设计中,仿真时间精度为1ps
//而ccc一个模块组成的设计中,仿真时间精度为1fs
`timescale 1ps/1ps
module aaa();
bbb u_bbb();
endmodule`timescale 1ns/1ns
module bbb();
********
endmodule`timescale 1fs/1fs
module ccc();
********
endmodule
1、$time
$time系统函数返回一个64个二进制位整数的时间值,这个时间值以调用该系统函数的模块的时间单位为单位,当出现小数时,会进行四舍五入,如下例所示。
`timescale 10 ns / 1 ns
module test;
initial begin#1.55 $display($time);
end
endmodule输出:
2
根据Verilog基础:编译指令`timescale一文中所说的,$display系统任务在仿真时间为16ns的时候执行,此时$time系统函数以10ns为单位返回时间值,即1.6,但$time系统函数只能返回整数值,因此四舍五入为2。
因此,在本例中,$display系统任务显示的时间并不是真正$display系统任务执行的时间,即16ns。
2、$stime
$time系统函数和$time系统函数非常像,区别是只返回一个32个二进制位整数的时间值,如果时间超过了32位,则只会返回低32位的时间值。
3、$realtime
$realtime系统函数可以返回一个实数时间值,这就代表着它能返回最精确的仿真时间,对于上面同样的例子,如果将$display($time);改为$display($realtime);则返回值是1.6,即真正$display系统任务执行的时间16ns。
有关仿真时间单位和精度的进一步讨论,可以看下文。
Verilog基础:编译指令`timescale https://blog.csdn.net/weixin_45791458/article/details/134804982?spm=1001.2014.3001.5501