Logisim ALU红线 - 不了解原因以及如何解决

时间:2017-04-19 02:07:30

标签: assembly alu

我正在开发一个项目,我需要为MIPS的特定指令子集创建自己的CPU。我承认我认为在这个项目之前我理解了单循环数据路径。请原谅我的困惑。

我的问题在于我的ALU。 ALU Opcode是4位数,SubOp是单位值。当我尝试测试我的ALU时,我输出的所有行都是红色的。我不确定为什么。如果我删除了NOR Gate的输出,则所有其他行都会变黑。然后,当我将Opcode(图像的左下角)从AND门(0x00)更改为另一个值时,输出线再次变为红色。

虽然这个ALU还没有完成,但我想问一些关于为什么会这样做的输入?输入长度为8位。我已经把它分解成一个简单的AND门,取8位输入,我仍然收到红线。无论选择OpcodeALUresult(底部中间)都会产生错误。

我错过了什么? enter image description here

我知道有一种更简单的方法可以解决这个问题。但是我试图将ALU的“操作码”分解成更易于理解的内容,直到测试完成。一旦我理解了这个红线问题,我打算继续这样做。

1 个答案:

答案 0 :(得分:2)

我不确定,但我认为使用多路分解器不会起作用:

通常输出"未选择"多路分解器的通道具有恒定值(例如0或2 ^ N-1)而不是高Z.

即使它是高Z:如果某个门(例如AND门)的输入为高Z,则输出不一定是高Z。这取决于使用的工具。

假设您想要添加并添加数字4和3.假设解复用器的未选通道输出0。

在这种情况下,将发生以下情况:

两个解复用器中的一个将输出传递给加法器,减法器将返回4和0,另一个将返回3和0。

加法器将计算:4 + 3 = 7,而减法器将计算0-0 = 0。

两个(!!!)值现在将被输入" ALUresult"线!!!

您通常做的是进行所有计算(将寄存器传递给所有操作)。所以你总是拥有所有结果(OR,AND,sum,差异,产品,商,......)。

然后使用多路复用器(不是多路分解器)来选择您感兴趣的结果。