我编写了一个计算逻辑电路真值表的小程序。在我选择的表示中(出于无知,我没有受过这方面的教育),我使用Circuit类和Connector类来表示"电路"(包括基本的门,如NOT, OR…)和布线。
Factory类用于"焊接引脚和电线",语句如下
factory.addCircuit("OR0", CircuitFactory.OR);
factory.addConnector("N0OUT", "NOT0", 0, "AND1", 1);
电路完成时
factory.createTruthTable();
计算电路的真值表。输入OR NOT和and的真值表,代码链接了XOR, 1/2加法器,加法器和4位加法器的创建,在每一步重用前一步的真值表。
对于一个下午的工作来说,这一切都很好,很好,但它显然会在循环中中断(例如,人字拖)。有人知道用环路表示逻辑电路的方便方法吗?理想的情况是,它可以用一个表来表示,也许是一个包含先前状态、新状态和延迟的表。
给我指出描述这种表现的文献也很好。我在网上搜了一个小时,只搜到一篇博士论文,有点超出我的理解力。
非常感谢!
任何循环必须包含至少一个具有"state"的节点,其中触发器(或寄存器)是基本构建块。一种有效的方法是将所有有状态节点拆分为两个节点;一个作为数据源,另一个作为数据接收器。所以现在没有循环了*
模拟,在每个时钟周期中,**以前馈方式将数据值从源传播到接收器。然后更新有状态源(从它们对应的接收器),为下一个周期做好准备。
*如果此时仍有环路,则电路图无效。
**我假设你想模拟同步逻辑,即你有一个时钟,并且状态只在时钟边缘更新。如果您想模拟异步逻辑,那么事情就变得棘手了,因为您需要开始建模传播延迟等等。