在Verilog HDL中有两类型的时间系统函数,$time和$realtime。用这两个系统用函数可以的大当前的仿真时间。
$time可以返回一个64位的整数来表示当前仿真时刻值,该时刻是以模块的仿真时间尺度位基准的。
$realtime返回的时间数字是一个实型数。该数也是以时间尺度为基准的。

`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=3

在这个例子中,模块test想在时间为16ns是设置寄存器set的值为0,在32ns时设置寄存器的set为1。但是由$time疾苦的set变化时刻却和预想的不一样,这是由下面两个原因引起的。

  1. $time显示时刻受时间尺度的影响。这里时间尺度为10ns,故16ns和32ns是对应输出的数字为1.6和3.2。
  2. $time总是输出整数,所以在将经过尺度比例变换的数字输出时,要先进行取整,1.6和3.2分别取整为1和3.2。
  3. 如果将上述例子中的$time替换成$realtime,那么输出的数字将变为1.6和3.2。