☰
Verilog基础:$timeformat系统任务的使用
2026/10/26 1:15:20 网站建设 项目流程

相关阅读

Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm=1001.2014.3001.5482


$timeformat系统任务用于指定$write、$display、$strobe、$monitor、$fwrite、$fdisplay、$fstrobe和$fmonitor系统任务中的格式字符串中,转换说明%t如何对时间数据进行转换。在阅读本文之前,建议先学习编译指令`timescale和系统函数$time的使用,如下面两篇博客所示。Verilog基础:编译指令`timescalehttps://blog.csdn.net/weixin_45791458/article/details/134804982?sharetype=blogdetail&sharerId=134804982&sharerefer=PC&sharesource=weixin_45791458&spm=1011.2480.3001.8118

Verilog基础:$time、$stime和$realtime系统函数的使用https://blog.csdn.net/weixin_45791458/article/details/134815889?sharetype=blogdetail&sharerId=134815889&sharerefer=PC&sharesource=weixin_45791458&spm=1011.2480.3001.8118

首先给出$timeformat系统任务语法的BNF范式,有关BNF范式的内容可以在之前的文章中找到:

units_number参数代表了一个指定的单位,是一个范围从-15到0的整数,具体含义如下表所示。

数字代表单位数字代表单位
01s-810ns
-1100ms-91ns
-210ms-10100ps
-31ms-1110ps
-4100us-121ps
-510us-13100fs
-61us-1410fs
-7100ns-151fs

precision_number参数代表了小数点后的四舍五入的位数。

suffix_string参数代表了添加的后缀字符串。

minimum_field_width参数代表了输出最少占用的宽度。

从调用$timeformat系统任务的仿真时间开始,后续所有使用转换说明%t输出的时间,都会按照设置的单位、精度、后缀字符串和最小字段宽度进行转换。

默认情况下转换说明%t使用仿真时间精度作为单位(仿真时间精度是一个层次设计的所有模块中最小的时间精度),保留整数,不添加后缀,最小字段宽度为20。

首先以简单的例1进行说明,该例不涉及$time系统函数。

// 例1 `timescale 1 ns / 1 ps module top; initial $timeformat(-10, 5, "", 10); initial #1 $display("%t", 5); endmodule 输出: 50.00000

由于转换说明%t对应了常数5,而top模块的时间单位为1ns,而$timeformat系统任务指定了单位是100ps,转换后原结果需要乘10,即50并保留5位小数。

再来看一下涉及到$time系统函数的例2。

// 例2 `timescale 10 ns / 1 ns module top; initial $timeformat(-10, 2, "", 10); initial #1.55 $display("%t", $time); endmodule 输出: 200.00

正如编译指令`timescale一文中所说,$display系统任务在仿真时间为16ns的时候执行,此时$time系统函数尝试以10ns为单位返回时间值,即1.6,但$time系统函数只能返回整数值,因此四舍五入为2,top模块的时间单位为10ns,而$timeformat系统任务指定了单位是100ps,转换后原结果需要乘100,即200并保留5位小数。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询