相关阅读Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.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?sharetypeblogdetailsharerId134804982sharereferPCsharesourceweixin_45791458spm1011.2480.3001.8118Verilog基础$time、$stime和$realtime系统函数的使用https://blog.csdn.net/weixin_45791458/article/details/134815889?sharetypeblogdetailsharerId134815889sharereferPCsharesourceweixin_45791458spm1011.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-151fsprecision_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系统函数只能返回整数值因此四舍五入为2top模块的时间单位为10ns而$timeformat系统任务指定了单位是100ps转换后原结果需要乘100即200并保留5位小数。