如何从源代码中检测模拟中使用的时间刻度精度?考虑我有一个配置参数(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 ) ;
请在逻辑上帮助我确定内部的时间刻度单位和精度。
您可以写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
必须采取同样的措施,以确保使用正确的缩放比例/精度设置其值。