提示:本文仅供个人学习,未经授权严禁转载。
1. “%x”、“%d”和“%t”显示的仿真时间差别
在verilog中,当我们用display打印仿真时间时,可以使用%d或者%t等等(如下所示)。在这里记录一下它们之间的一些差别。
`timescale 1ns/1ps // 仿真时间单位 / 仿真时间精度
initial begin
#3.5; // delay 3.5ns
$display("time1 @%d;", $time);
$display("time2 @%t;", $time);
end
modelsim仿真结果如下所示:
“%d”: 显示的数值单位为timescale指定的仿真时间单位,会进行四舍五入(其他的如%x等与%d类似,只是%x以十六进制显示,而%d以十进制显示);
“%t”: 默认情况下,显示的数值单位为timescale指定的仿真时间精度,同样会进行四舍五入(以1ns为单位进行四舍五入,但是以1ps为单位进行显示);
上述为“%d”和“%t”在默认情况下的区别;此外,“%t”支持通过系统函数$timeformat指定显示的时间格式;
2. 举个例子:
`timescale 1ns/1ps
initial begin
$timeformat(-9, 3, " ns", 10); //$timeformat(unit, prec, "unit", minwidth);
#3.5; // delay 3.5ns
$display("time1 @%d;", $time);
$display("time2 @%t;", $time);
end
modelsim仿真结果如下所示:
timeformat系统函数的参数解释如下:
unit:指定“%t”显示数值的时间单位;如“-9”表示10^-9秒,即1ns;
prec:指定“%t”显示数值的小数位数;
“unit”:在%t显示的数字的后面附加显示的字符串;
minwidth:指定%t显示内容所占用的最少字符位数;即上面仿真结果中,“@”符号和“;”符号之间的字符个数;(若“%t”实际内容长度大于minwidth指定的长度,display时会自动往后扩展显示)
3. 再继续举几个例子
3.1 例子1
`timescale 1ns/1ps
initial begin
$timeformat(-6, 3, " us", 8);
#5550; // delay 5.5 us
$display("time1 @%d;", $time);
$display("time2 @%t;", $time);
end
modelsim仿真结果:
3.2 例子2
`timescale 1ns/1ps
initial begin
$timeformat(-6, 3, " us", 6);
#5550; // delay 5.5 us
$display("time1 @%x;", $time);
$display("time2 @%0x;", $time);
$display("time3 @%d;", $time);
$display("time4 @%0d;", $time);
$display("time5 @%t;", $time);
end
modelsim仿真结果: