在许多情况下,简单地将每个门建模为具有单位传播延迟是一种很好的方法。一个稍微复杂的替代方案是让大多数组件的“模拟步骤”例程检查模拟时间是否提前了“整步”,如果是,则仅更新其输出;一些组件可以省略该检查,而是要求在其他组件有机会更新后在模拟步骤中再次运行它们。这将允许某些组件假装具有零传播延迟,前提是它们没有嵌套太深(模拟应该限制在它决定组件不会之前尝试运行每个组件的评估状态例程的次数)达到稳定状态)。
根据具体模拟的内容,我建议您的组件除了“高”和“低”之外还有多个输出状态。即使添加“不确定”状态也会有所帮助,当组件的输入以可能影响其输出的方式发生变化时,输出将在最小传播时间后变为“不确定”,并在最大传播时间后呈现合法值在输入变为有效之后的传播时间。请注意,随着信号通过更多级别的逻辑,它们“不确定”的时间将会增加。有意义地模拟任何事物的唯一方法是拥有一个假定为稳定的时钟,并确保时钟周期足够长,以使事物在它们之间完全稳定。
以这种方式模拟事物的优点是,虽然模拟会在许多实际可行的电路上“失败”(产生“不确定”值),但这种模拟产生确定性结果的事实表明,构建的真实电路同样的方式也会这样做。不幸的是,对于依赖边沿触发锁存器的电路,最常见的仿真结果将是“不确定的”,即使对于实际工作机会为 100% 的电路也是如此。为了缓解这个问题,人们经常想要“诅咒”几个门,以免拉长“不确定”区间。这样做是一种“作弊”,并且会产生电路可能在模拟中工作但在现实中失败的可能性。尽管如此,如果小心地应用这些作弊,