采用iff语句能否提升UVM驱动中代码的仿真速度?
UVM驱动代码仿真耗时对比:版本1 vs 版本2
以下两段用于UVM驱动的代码,哪一段仿真耗时更短?Gemini给出版本1性能更优的结论,但对此存疑。
版本1代码
@(vif.monitor_cb iff (vif.monitor_cb.pack && vif.monitor_cb.val));
版本2代码
@ (vif.mst_mon_cb); if (vif.mst_mon_cb.rsp_pack == 1'b1 & vif.mst_mon_cb.rsp_val == 1'b1)
耗时差异分析
- 版本1采用带条件的时钟块触发,仿真器会直接监控时钟块事件,仅当
pack和val同时为真时才触发后续逻辑。这种写法让仿真器提前过滤无效场景,不需要在每个时钟周期都执行判断逻辑,大幅减少了不必要的仿真步骤。 - 版本2是先等待时钟块事件触发,再执行条件判断。这意味着仿真器每个时钟周期都会唤醒代码执行if检查,哪怕条件不满足,也会产生额外的仿真开销。如果条件满足的频率较低,这种无效判断的累积开销会非常明显。
综上,版本1的仿真耗时确实更短,其核心是利用SystemVerilog的iff条件触发特性,避免了无效时钟周期的冗余计算。
内容的提问来源于stack exchange,提问作者מתן שלו
相关产品推荐
相关产品推荐

