我的大部分系统-Verilog代码使用参数来定义不同的等待时间,例如:
int unsigned HALF_SPI_CLOCK = ((SYSTEM_CLK_PERIOD/2)*DIVISION_FACTOR); //DEFINES THE TIME现在,因为我在我的文件中定义了一个时间尺度,所以我可以直接使用这些参数来引入等待周期:
`timescale 1ns/1ns
initial begin
#HALF_SPI_CLOCK;
end现在,我希望所有地方都有指定时间的延迟。这意味着即使我更改了时间刻度,模拟仍然会遵守所有的计时。我想保留参数,但是无论我在哪里有一个wait语句,我都需要指定时间。就像这样
#(HALF_SPI_CLOCK) ns; 但Modelsim不接受这一点。在System-Verilog中,有没有办法将参数或无符号整型转换为类型为time的变量?有没有办法指定时间单位?我环顾四周,但找不到任何解决方法。我想要控制时间并使其独立于timescale is because I intend to change the时间刻度的原因是为了使我的模拟速度更快。其他建议或想法非常受欢迎*
发布于 2014-07-21 20:29:04
在SystemVerilog中可以将时间作为参数传递,如下所示:
module my_module #(time MY_TIME = 100ns);
initial begin
#MY_TIME;
$display("[%t] End waiting", $time);
end
endmodule或者使用乘法来获得正确的时间单位,例如:
module my_module2 #(longint MY_TIME = 100);
initial begin
# (MY_TIME * 1us);
$display("[%t] End waiting 2", $time);
end
endmodule请参阅EDA Playground上的runnable示例:http://www.edaplayground.com/x/m2
发布于 2014-07-21 20:27:15
这将模拟并执行您想要的操作。虽然不是最优雅的,但它是有效的。
task wait_ns(int num);
repeat (num) #1ns;
endtask
...
wait_ns(HALF_SPI_CLOCK);这可能会对模拟速度产生负面影响,具体取决于时间刻度、时钟事件和延迟单位之间的关系。
https://stackoverflow.com/questions/24863774
复制相似问题