3

我正在用 C# 编写基于循环的逻辑仿真。我想模拟组合电路和时序电路。组合电路很简单,但时序电路给我带来了麻烦。

我想检测振荡并显示适当的警告消息。有没有一种简单的方法来检查单个门可以改变多少次状态并仍然保持电路稳定?

我想到了“最小反馈弧集算法”,但这似乎是一种矫枉过正。许多桌面应用程序执行速度很快,所以我怀疑他们是否正在使用它。

我还发现了建议使用三元逻辑(0、1、未知)的论文,并将算法分为两部分 - 一个初始化电路,一个进行实际计算 - 但它说的是“如果算法 A 不终止电路”有振荡'这给了我什么,因为没有办法停止时钟周期并警告用户。

任何想法,如“Logisim”或“数字作品”等应用程序如何检测振荡?

4

1 回答 1

1

Verilator是一个逻辑模拟器,它通过将可综合的 Verilog 编译成 C 代码来工作。

它试图构建一个保证稳定的逻辑顺序,但如果它失败了,它会发出一些 UNOPT 和 UNOPTFLAT 警告,并简单地重复模拟多次,直到没有任何变化。

默认情况下,在报告收敛失败之前使用 100 轮,但这可以使用参数converge-limit进行更改。

于 2013-10-27T22:24:22.070 回答