gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:24:30 25 4
gpt4 key购买 nike

我正在开发一个数字逻辑模拟器,以便稍后在其中构建我自己的 CPU(因此这是一个长期项目)。一切都适用于没有环路的电路,例如全加器。然后是像 SR 锁存器这样的电路,其中一个门的输入连接到另一个门的输出。所以我在一个循环中,因为两个门都需要另一个门的输出来计算自己的输出。
解决这个问题的最佳方法是什么?我以某种方式实现它,即(当检测到循环时)它将返回它的最后一个输出。或者,当此运行是第一次运行时(因此没有先前的输出),我将返回零(低)。所以我只是假设所有的输出一开始都是低/零。到目前为止它有效,但我确信这不是解决问题的好方法。

有任何想法吗?

最佳答案

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

根据模拟的具体内容,我建议您的组件除了“高”和“低”之外还有多个输出状态。甚至添加“不确定”状态也很有帮助,当组件的输入以可能影响其输出的方式发生变化时,输出将在最短传播时间后变为“不确定”,并在最长传播时间后假定为合法值输入变为有效后的传播时间。请注意,随着信号通过更多层次的逻辑,它们“不确定”的时间会增加。有意义地模拟任何事物的唯一方法是拥有一个假定稳定的时钟,并确保时钟周期足够长,以便事物可以在它们之间完全稳定。

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

关于loops - 如何处理数字逻辑模拟器中的循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14299603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com