在系统Verilog中检测时间刻度

问题描述 投票:0回答:1

如何从源代码中检测模拟中使用的时间刻度精度?考虑我有一个配置参数(cfg_delay_i),该参数由用户以时间单位给出的一些延迟值作为fs。如果用户给出1000,我的代码必须等待1000fs或1ps才能进一步执行。

#(cfg_delay_i * 1fs );//will wait only if timescale is 1ps/1fs
do_something(); 

如果时间标度精度为1fs,则不会有任何问题,但是如果精度高于该精度,它将不会等待,它将作为0 delay起作用。所以我想写一个代码来确定用户使用的时间尺度并给出相应的延迟。我期望的伪代码如下所示,

if(timeprecision == 1fs )#(cfg_delay_i * 1fs ) ; 
else if(timeprecision == 1ps )#(cfg_delay_i/1000 * 1ps ) ;

请在逻辑上帮助我确定内部的时间刻度单位和精度。

system-verilog modelsim uvm system-verilog-dpi
1个回答
0
投票

您可以写if (int'(1fs)==1) // the time precision is 1fs,依此类推。但是没有必要这样做。

#(cfg_delay_i/1000.0 * 1ps)

无论精度为1ps或更小,上述方法均有效。请注意,使用实数文字1000.0可以使除法保持实数。 1ps已经是一个实数,因此整个表达式的结果将是实数。您也可以这样做

#(cfg_delay_i/1.e6 * 1ns)

如果该代码所在点的时间精度大于1fs,则结果将四舍五入到最接近的精度单位。例如,如果cfg_delay为500并且当前精度为1ps,则将四舍五入为#1ps

请注意,用户设置cfg_delay必须采取同样的措施,以确保使用正确的缩放比例/精度设置其值。

© www.soinside.com 2019 - 2024. All rights reserved.