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

时间:2014-02-27 13:53:04

标签: verilog

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

1 个答案:

答案 0 :(得分:5)

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

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

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

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