怎么设置systemverilog类的时间单位(timescale)

timeunit和timeprecision是不允许在systemverilog类中直接使用的,那么我们有什么方法可以设置systemverilog类的时间单位和精度呢?
答案就是讲systemverilog类包起来。
你可以用以下方式设置sv类中的时间精度。

1. 将类定义在program块中,并且在class定义之前,声明timeunit和timeprecision。

 `timescale 1ns/1ns
   program test;

   timeunit 1ps;
   timeprecision 1ps;

   class C;
   ...........
   $printtimescale;  // Will print timescale of 1ps/1ps
   endclass
   endprogram
 -------------------------------------------------------

  A sample example is shown as follows:

  test.sv:
  --------------------------------------------
  `timescale 1ns/10ps

  module tb_top;
    test_p test_p();

    initial begin
     $printtimescale;
    end
  endmodule

  program test_p;
   timeunit 1ps;
   timeprecision 1ps;

   class test;
   function disp;
   $printtimescale;
   $display("%t",$time);
   endfunction

  endclass

  test T;
  initial
  begin
  T = new();
  T.disp;
  end
  endprogram

  --------------------------------------------

  To run vcs -sverilog test.sv -R

  Output:
  --------------------------------------------
  TimeScale of tb_top is 1 ns / 10 ps
  TimeScale of test_p is 1 ps / 1 ps
  --------------------------------------------

 2.将类用包管理起来,即可以直接将类声明在package中,也可以声明在包外,用include“***.sv”包含进来。

`timescale 1ns/10ps

  module tb_top;
    test test();

   initial begin
     $printtimescale;
   end
  endmodule

  package PACK;
  timeunit 1ps;
  timeprecision 1ps;

  class test;
  function disp;
  $printtimescale;
  $display("%t",$time);
  endfunction

  endclass
  endpackage

  program test;
  import PACK::*;
  test T;
  initial
  begin
  T = new();
  T.disp;
  end
  endprogram
                
  -------------------------------------------
  To run vcs -sverilog package_test.sv -ntb_opts dtm

  Output:
  -----------------------------------
  TimeScale of tb_top is 1 ns / 10 ps
  TimeScale of test_p is 1 ps / 1 ps
  ------------------------------------

 

你可能感兴趣的:(system,verilog)