Verilog基础:$time、$stime和$realtime系统函数的使用

相关阅读

Verilog基础icon-default.png?t=N7T8https://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 icon-default.png?t=N7T8https://blog.csdn.net/weixin_45791458/article/details/134804982?spm=1001.2014.3001.5501

        

你可能感兴趣的:(#,系统函数与系统任务,Verilog基础,fpga开发,数字IC,Verilog,硬件工程)