首页 文章

如何处理数字逻辑模拟器中的循环?

提问于
浏览
6

我'm developing a digital logic simulator to build my own CPU in it later (so it'是一个长期项目) . 一切都适用于没有环路的电路,例如fulladder . 然后是像SR锁存器那样的电路,其中门的一个输入连接到另一个门的输出 . 所以我处于循环中,因为两个门都需要另一个门的输出,以计算自己的输出 .
解决这个问题的最佳方法是什么?我以某种方式实现它,(当检测到循环时)它将返回它's last output. Or, when this run is the first one (so there was no previous output) I will return zero (low). So I just assume that all the outputs were low/zero in the beginning. It works so far, but I'确定这不是解决问题的好方法 .

有任何想法吗?

1 回答

  • 4

    在许多情况下,简单地将每个门建模为具有单位传播延迟是一种很好的方法 . 一个稍微复杂的替代方案是让大多数组件的“模拟步骤”程序检查模拟时间是否已经提前“完整步骤”,并且如果是这样则仅更新其输出;一些组件可以省略检查,但是在其他组件有机会更新后请求在模拟步骤中再次运行它们 . 这将允许一些组件假装它们没有嵌套太深而没有传播延迟(模拟应该限制它在决定组件不会去之前尝试运行每个组件的评估状态例程的次数 . 达到稳定状态) .

    根据正在模拟的内容,我建议除了“高”和“低”之外,还要为组件提供多种输出状态 . 即使添加“不确定”状态也是有帮助的,当组件的输入以可能影响其输出的方式改变时,输出将在最小传播时间之后变为“不确定”,并且在最大值之后呈现合法值 . 输入变为有效之后的传播时间 . 请注意,当信号通过更多级别的逻辑时,它们“不确定”的时间量将增加 . 模拟任何有意义的东西的唯一方法是假定时钟是稳定的,并确保时钟周期足够长,以便事物可以在它们之间完全稳定 .

    以这种方式模拟事物具有以下优点:虽然模拟将在许多电路上“失败”(产生“不确定”值),这将在现实中起作用,但是这样的模拟产生确定性结果的事实将表明构建的实际电路同样的方式也会这样做 . 不幸的是,对于依赖于边沿触发锁存器的电路,最常见的模拟结果将是“不确定的”,即使对于实际工作的可能性为100%的电路也是如此 . 为了解决这个问题,人们常常想要“jinx”几个门,以免延长“不确定”间隔 . 这样做会产生“欺骗”,并且可能会使电路在仿真中起作用,但实际上却失败了 . 尽管如此,如果仔细地应用这些作弊,它们可能使模拟比其他情况更有用 .

相关问题