【发布时间】:2023-03-27 04:53:02
【问题描述】:
我正在用 C# 编写基于循环的逻辑仿真。我想模拟组合电路和时序电路。组合电路很简单,但顺序电路给我带来了麻烦。
我想检测振荡并显示适当的警告消息。有没有一种简单的方法可以检查单个门可以改变多少次状态并仍然保持电路稳定?
我想到了“最小反馈弧集算法”,但它似乎有点矫枉过正。许多桌面应用程序执行速度很快,所以我怀疑他们是否在使用它。
我还发现了建议使用三元逻辑(0、1、未知)的论文,并将算法分为两部分 - 一个初始化电路,一个进行实际计算 - 但它说的是“如果算法 A 不终止电路有振荡'这对我没有任何帮助,因为没有办法停止时钟周期并警告用户。
您知道“Logisim”或“数字作品”等应用程序如何检测振荡吗?
【问题讨论】:
-
我能想到一个简单的算法:计算整个网络的所有逻辑层两次。如果(至少)其中一个值发生了变化,那么你就有了振荡。
-
简单 RS 触发器中的门可以改变其状态两次并保持电路稳定(第三次评估可以判断是否存在振荡) - 如果以正确的顺序计算。正确的顺序是指人类使用手动解决电路的顺序。如果我使用简单的 DFS 算法,同一个门可以多次更改其状态。 tinyurl.com/py4z7ol我不是很确定,但我怀疑如果门在更多的反馈周期内,它需要计算三、四、五次——如果有人能证实这一点,我将非常感激。
-
对,我没想到。是的,第三轮会有所帮助。至于正确的顺序:不就是从输入开始那么简单吗?
-
很遗憾,没有。如果门 A 连接到门 C,门 B 连接到门 C,则顺序为:A 然后 B,然后 C。不能直接到 C,否则您必须稍后重新计算。
-
在我的阅读中,“输入”是整个电路的输入;只有门的输入连接的结。
标签: algorithm simulation boolean-logic circuit