新手在使用while和forever语句时,容易在其循环结构中检查硬件信号或等待变量值。但应格外小心,如果循环结构中没有延时处理语句(#,wait,@),那么仿真极易在该循环结构中“卡死”(hang up)。这是因为从仿真的角度而言,如果你等待的信号或变量会在后续时刻发生,那么缺少阻塞等待处理的循环将会在当前仿真时刻占用仿真资源保持active状态。在这时,仿真无法继续前进到下一个仿真时刻,从而出现“奇怪的仿真时刻静止”现象。
关键词:
while,forever,blocking wait,hang up
避坑指南:
在使用while和forever循环语句检查硬件信号或等待变量时,一定要使用阻塞等待处理。如果对变量变化时刻捕捉不严格,那么可以加大循环延时间隔,节省仿真资源。
参考代码: sv_while_forever_deadloop.sv
仿真结果:
阅读手记: