|
在Verilog HDL中有两种类型的时间系统函数:$time和$realtime。用这两个时间系统函数可以得到
当前的仿真时刻。
• 系统函数$time
$time可以返回一个64比特的整数来表示的当前仿真时刻值。该时刻是以模块的仿真时间尺度为基准
的。下面举例说明。
[例1]:`timescale 10ns/1ns
module test;
reg set;
parameter p=1.6;
initial
begin
$monitor($time,,"set=",set);
#p set=0;
#p set=1;
end
endmodule
输出结果为:
0 set=x
2 set=0
3 set=1
在这个例子中,模块test想在时刻为16ns时设置寄存器set为0,在时刻为32ns时设置寄存器set为1。
但是由$time记录的set变化时刻却和预想的不一样。这是由下面两个原因引起的:
1) $time显示时刻受时间尺度比例的影响。在上面的例子中,时间尺度是10ns,因为$time
输出的时刻总是时间尺度的倍数,这样将16ns和32ns输出为1.6和3.2。
2) 因为$time总是输出整数,所以在将经过尺度比例变换的数字输出时,要先进行取整。
在上面的例子中,1.6和3.2经取整后为2和3输出。注意:时间的精确度并不影响数字的
取整。
• $realtime系统函数
$realtime和$time的作用是一样的,只是$realtime返回的时间数字是一个实型数,该数字也是以时
间尺度为基准的。下面举例说明:
[例2]: `timescale10ns/1ns
module test;
reg set;
parameter p=1.55;
initial
begin
$monitor($realtime,,"set=",set);
#p set=0;
#p set=1;
end
endmodule
输出结果为:
0 set=x
1.6 set=0
3.2 set=1
从上面的例子可以看出,$realtime将仿真时刻经过尺度变换以后即输出,不需进行取整操作。所以
$realtime返回的时刻是实型数。 |
|