我正在开发一个项目,我需要为MIPS的特定指令子集创建自己的CPU。我承认我认为在这个项目之前我理解了单循环数据路径。请原谅我的困惑。
我的问题在于我的ALU。 ALU Opcode
是4位数,SubOp
是单位值。当我尝试测试我的ALU时,我输出的所有行都是红色的。我不确定为什么。如果我删除了NOR
Gate的输出,则所有其他行都会变黑。然后,当我将Opcode
(图像的左下角)从AND
门(0x00)更改为另一个值时,输出线再次变为红色。
虽然这个ALU还没有完成,但我想问一些关于为什么会这样做的输入?输入长度为8位。我已经把它分解成一个简单的AND
门,取8位输入,我仍然收到红线。无论选择Opcode
,ALUresult
(底部中间)都会产生错误。
我知道有一种更简单的方法可以解决这个问题。但是我试图将ALU的“操作码”分解成更易于理解的内容,直到测试完成。一旦我理解了这个红线问题,我打算继续这样做。
答案 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,差异,产品,商,......)。
然后使用多路复用器(不是多路分解器)来选择您感兴趣的结果。