System verilog 是否有systemverilog方法来检查时间粒度?

System verilog 是否有systemverilog方法来检查时间粒度?,system-verilog,System Verilog,我很难使用systemverilog数据类型time 假设有两个来自第三方的包 package p1; import p2:*; class d; time c; function print(); $display("t1 is %t, t2 is %t\n", c.t1, c.t2); c = t2 - t1; $display("c is %t\n", c); endfunction endpackage : p1

我很难使用systemverilog数据类型time

假设有两个来自第三方的包

package p1;
  import p2:*;
  class d;
    time c;
    function print();
      $display("t1 is %t, t2 is %t\n", c.t1, c.t2);
      c = t2 - t1;
      $display("c is %t\n", c);
    endfunction  
endpackage : p1

package p2;
  class c;
    time t1;
    time t2;
  endclass : c
endpackage : p2

如果t2为100ns,t1为10ns,c打印出900000。有人能告诉我上面的代码可能发生了什么吗?有没有办法检查两个包中的时间粒度?

首先,时间数据类型没有什么特别之处,它只是一个64位无符号整数。重要的是使用$time为t1和t2分配任务的时间刻度/单位

不幸的是,除非您建立一个双方同意的时间单位,否则无法从另一个设计单位知道时间刻度是多少。你可以通过将所有时间除以共同单位来实现

realtime t1;

t1 = $realtime/1ns;
最好使用$realtime获取任何分数时间步长