文章目录
概述
在做仿真的时候,常常需要获取仿真时间以便了解被测模块的测试情况。Verilog语法提供了3个系统任务----$time、$stime、$realtime,这3个系统任务都可以在仿真时(无法综合)获取当前仿真时刻的时间值,但其使用也有一点小小的区别。
$time
调用系统任务$time,将会获得一个64位的integer型变量,其表示调用该系统任务时的仿真时间。需要注意的是,其值会自动缩放到`timescale任务所定义的时间单位。下面举个例子:
`timescale 10 ns / 1 ns
module tb_time_test;
reg set;
parameter p = 1.55;
initial begin
$monitor($time,,"set=",set);
#p set = 0;
#p set = 1;
end
endmodule
仿真结果如下:
- 在上面的例子中,将仿真时间单位定义成了10ns,而时间精度则定义为1ns。
- 第1行,set未赋值,所以输出 set = x,此时时间为0
- 第2行,set赋值为0,所以输出 set = 0,此时时间为1.55*10=15.5ns,由于精度为1ns,所以四舍五入到16ns,同时由于时间单位为10ns,所以不能表示16ns,而是表示四舍五入后的2(单位10ns)
- 第3行,set赋值为1,所以输出 set = 1,此时时间为16+1.55*10=31.5ns,由于精度为1ns,所以四舍五入到32ns,同时由于时间单位为10ns,所以不能表示32ns,而是表示四舍五入后的3(单位10ns)
接下来我们把上述代码的仿真时间单位改为1ns,时间精度保留为1ns,这样看起来会好理解一些。
`timescale 1 ns / 1 ns
module tb_time_test;
reg set;
parameter p = 1.55;
initial begin
$monitor($time,,"set=",set);
#p set = 0;
#p set = 1;
end
endmodule
仿真结果如下:
- 在上面的例子中,将仿真时间单位定义成了1ns,而时间精度则定义为1ns。
- 第1行,set未赋值,所以输出 set = x,此时时间为0
- 第2行,set赋值为0,所以输出 set = 0,此时时间为1.55*1=1.55ns,由于精度为1ns,所以四舍五入到2ns,时间单位为1ns,所以直接显示2(单位1ns)
- 第3行,set赋值为1,所以输出 set = 1,此时时间为2+1.55*1=3.55ns,由于精度为1ns,所以四舍五入到4ns,时间单位为1ns,所以直接显示4(单位1ns)
$stime
调用系统任务$stime,将会获得一个32位的无符号integer型变量,其表示调用该系统任务时的仿真时间。需要注意的是,其值同样会自动缩放到`timescale任务所定义的时间单位。
这个系统任务的用法基本上和 $time是一样的,只不过由于其只有32位,所以表示的时间范围会比较小,使用的时候注意别溢出了。
$realtime
调用系统任务$realtime,将会获得一个real型变量,其表示调用该系统任务时的仿真时间。需要注意的是,其值会自动缩放到`timescale任务所定义的时间单位。
由于其返回值为实数real型,所以其可以表示小数时间。同样以上面的代码为例:
`timescale 10 ns / 1 ns
module tb_time_test;
reg set;
parameter p = 1.55;
initial begin
$monitor($realtime,,"set=",set);
#p set = 0;
#p set = 1;
end
endmodule
仿真结果如下:
- 在上面的例子中,将仿真时间单位定义成了10ns,而时间精度则定义为1ns。
- 第1行,set未赋值,所以输出 set = x,此时时间为0
- 第2行,set赋值为0,所以输出 set = 0,此时时间为1.55*10=15.5ns,由于精度为1ns,所以四舍五入到16ns,同时由于时间单位为10ns,所以不能表示16ns,而是表示1.6(可以表示小数了,单位10ns)
- 第3行,set赋值为1,所以输出 set = 1,此时时间为16+1.55*10=31.5ns,由于精度为1ns,所以四舍五入到32ns,同时由于时间单位为10ns,所以不能表示32ns,而是表示3.2(可以表示小数了,单位10ns)
总结与参考
- $time、$stime、$realtime这三个系统任务都可以获取当前仿真时间,区别在于返回的时间值的类型不同,一般的应用使用$time即可
- 在仿真时获取仿真时间可以观察、监测被测模块的测试情况,有利于提高测试效率
参考资料1:IEEE Standard for Verilog® Hardware Description Language(IEEE Std 1364™-2005)
- 📣博客主页:wuzhikai.blog.csdn.net
- 📣本文由 孤独的单刀 原创,首发于CSDN平台🐵
- 📣您有任何问题,都可以在评论区和我交流📞!
- 📣创作不易,您的支持是我持续更新的最大动力!如果本文对您有帮助,还请多多点赞👍、评论💬和收藏⭐!