为什么在verilog中使用零时序(#0)不是一个好习惯?

use*_*748 0 verilog

为什么使用时序并不好.我无法找到有关如果使用该方法会出现什么问题的详细信息.

Ari*_*Ari 5

设计师经常试图使用#0来避免两个程序块之间的竞争条件.程序块中的#0强制该块停止并在所有其他块之后重新调度.当你有一个想要最后执行的多个块时,就会出现问题.谁应该获胜?

这本身就可以成为一种新的竞争条件,它的分辨率可能因运行和模拟器而异.简而言之,使用#0延迟的多个线程可能导致非确定性的执行行为.

此外,它使您的代码难以阅读,也不可合成.SystemVerilog提供了新的构造,以更可预测和可读的方式避免#0.这是一个例子(参见7.2事件触发器竞争条件).

请注意,除了SystemVerilog中#0的经典用法之外,您可能实际上需要使用#0.例如,不同的断言.