我正在开发一个项目,需要为 MIPS 的特定指令子集创建自己的 CPU。我承认在这个项目之前我认为我理解单周期数据路径。所以请原谅我的困惑。
我的问题出在我的 ALU 上。 ALU Opcode
是一个 4 位数字,SubOp
是一个单位值。当我尝试测试我的 ALU 时,所有输出线都是红色的。我不确定到底为什么。如果我删除 NOR 门的输出,所有其他线都会变黑。然后,当我将 Opcode
(图像左下角)从 AND
门 (0x00) 更改为另一个值时,输出线再次变为红色。
虽然此 ALU 尚未完成,但我想询问一些关于为什么会发生这种情况的意见?输入的长度为 8 位。我已经将其分解为一个简单的 AND
门,采用 8 位输入,但我仍然收到红线。无论选择Opcode
,ALUresult
(底部中间)都会产生错误。
我知道有一种更简单的方法可以解决这个问题。但在测试完成之前,我试图将 ALU“操作码”分解为更容易理解的内容。一旦我了解了这个红线问题,我就计划着手解决这个问题。
最佳答案
我不确定,但我认为使用解复用器不起作用:
通常,解复用器的“未选择” channel 的输出具有恒定值(例如 0 或 2^N-1)并且不是高阻抗。
即使它是高阻态:如果某个门(例如与门)的输入是高阻态,则输出不一定是高阻态。这取决于所使用的工具。
假设您想要进行加法,将数字 4 和 3 相加。假设解复用器的未选定 channel 输出 0。
在这种情况下,将会发生以下情况:
将输出传递给加法器和减法器的两个解复用器之一将返回 4 和 0,另一个将返回 3 和 0。
加法器计算:4+3=7,减法器计算0-0=0。
两个(!!!)值现在都将被馈送到“ALUresult”线!!!
您通常所做的是进行所有计算(将寄存器传递给所有操作)。因此,您始终可以获得所有结果(OR、AND、总和、差值、乘积、商...)。
然后,您使用多路复用器(而不是多路分解器)来选择您感兴趣的结果。
关于assembly - Logisim ALU 红线 - 不了解原因以及如何修复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43485091/