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

相关阅读

Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html


        $time、 $stime$realtime这三个系统函数提供了返回当前仿真时间方法,在学习它们之前,可以先学习编译指令`timescale的使用,它用来指定时间单位和时间精度编译指令`timescale

        仿真的时间精度也是仿真器能维护和推进的最小时间,换句话说如果用仿真的时间精度作为仿真时间的单位则不会有小数。

1、$time

         $time系统函数返回一个64位(bit)整数的时间值,这个时间值以调用该系统函数的模块的时间单位返回仿真时间,当出现小数时,会进行四舍五入,如例1所示。

// 例1
`timescale 10 ns / 1 ns
module test;
initial begin
    #1.55 $display($time);
end
endmodule

输出:
2

        根据编译指令`timescale,该模块(该例中也是仿真)的时间精度为1ns,$display系统任务在仿真时间为16ns的时候执行,此时$time系统函数尝试以10ns为单位返回时间值,即1.6,但$time系统函数只能返回整数值,因此四舍五入为2,代表2*10ns。因此在本例中,$display系统任务显示的时间值并不是$display系统任务真正执行的仿真时间。

        此时用转换说明%t显示,则会将原结果转换为该模块(该例中也是仿真)的时间精度1ns(以仿真的时间精度为单位是系统函数$timeformat的默认行为),如例2所示。

// 例2
`timescale 10 ns / 1 ns
module test;
initial begin
    #1.55 $display("%t", $time);
end
endmodule

输出:
20

2、$stime

        $time系统函数和$time系统函数非常像,区别是只返回一个32个二进制位整数的时间值,如果时间值超过了32位,则只会返回低32位的时间值。

3、$realtime

        $realtime系统函数可以返回一个实数时间值,这个时间值以调用该系统函数的模块的时间单位返回仿真时间但出现小数时无需四舍五入,这就代表着它能返回最精确的仿真时间。对于上面同样的例子,如果将例1的$display($time);改为$display($realtime);则返回值是1.6,即1.6*10ns,也就是真正$display系统任务执行的时间16ns。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

日晨难再

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值