我在C#中编写基于循环的逻辑模拟。我想模拟组合和顺序电路。组合电路很简单,但顺序电路给我带来了麻烦。
我想检测振荡并显示相应的警告信息。有一种简单的方法可以检查单个门可以改变其状态的次数并使电路保持稳定吗?
我想过'最小反馈弧集算法',但它似乎是一种矫枉过正。许多桌面应用程序执行速度很快,所以我怀疑它们是否正在使用它。
我还发现纸张建议使用三元逻辑(0,1,未知),并将分裂算法分为两部分 - 一部分初始化电路,另一部分进行实际计算 - 但它说的是“如果算法A没有终止电路有振荡',因为没有办法停止时钟周期并警告用户,所以没有给我任何信息。
像“Logisim”或“数字作品”等应用程序如何检测振荡的任何想法?
答案 0 :(得分:1)
Verilator是一个逻辑模拟器,它通过将可合成的Verilog编译成C代码来工作。
它尝试构建一个保证稳定的逻辑顺序,但如果它失败则会发出一些UNOPT和UNOPTFLAT警告,并简单地重复模拟多次,直到没有任何变化。
默认情况下,在报告收敛失败之前会使用100轮,但可以使用参数converge-limit进行更改。