在 System-verilog 中将 unsigned int 转换为 Time

The*_*heo 1 system-verilog

我的 System-Verilog 代码很大一部分使用参数来定义不同的等待时间,例如:

int unsigned    HALF_SPI_CLOCK = ((SYSTEM_CLK_PERIOD/2)*DIVISION_FACTOR); //DEFINES THE TIME
Run Code Online (Sandbox Code Playgroud)

现在,由于我在文件中定义了时间刻度,我可以直接使用这些参数来引入等待周期:

`timescale 1ns/1ns
initial begin
    #HALF_SPI_CLOCK; 
end
Run Code Online (Sandbox Code Playgroud)

现在我希望各地都有指定时间的延误。意味着即使我更改时间尺度,模拟仍然会尊重所有计时。我想保留参数,但只要有等待语句,我就需要指定时间。就像是

#(HALF_SPI_CLOCK) ns; 
Run Code Online (Sandbox Code Playgroud)

但这不被 Modelsim 接受。有没有办法在 System-Verilog 中将参数或 Unsigned int 转换为时间类型的变量?有没有办法指定时间单位?我环顾四周但找不到任何解决方法。我想控制时间并使其独立于timescale is because I intend to change the时间尺度的原因是为了让我的模拟更快。非常欢迎其他建议或想法*

Vic*_*sky 5

可以在 SystemVerilog 中将时间作为参数传递,例如:

module my_module #(time MY_TIME = 100ns);

  initial begin
    #MY_TIME;
    $display("[%t] End waiting", $time);
  end

endmodule
Run Code Online (Sandbox Code Playgroud)

或者使用乘法来获得正确的时间单位,例如:

module my_module2 #(longint MY_TIME = 100);

  initial begin
    # (MY_TIME * 1us);
    $display("[%t] End waiting 2", $time);
  end

endmodule
Run Code Online (Sandbox Code Playgroud)

请参阅 EDA Playground 上的可运​​行示例:http ://www.edaplayground.com/x/m2