Assembly Logisim ALU红线-不了解原因和修复方法

Assembly Logisim ALU红线-不了解原因和修复方法,assembly,alu,Assembly,Alu,我正在进行一个项目,需要为MIPS的特定指令子集创建自己的CPU。我承认在这个项目之前我一直认为我理解单周期数据路径。请原谅我的困惑 我的问题是我的ALU。ALUOpcode是一个4位数字,SubOp是一个单位值。当我尝试测试我的ALU时,我的所有输出行都是红色的。我不知道为什么。如果我删除或门的输出,所有其他行都变黑。然后,当我将我的操作码(图像左下角)从和门(0x00)更改为另一个值时,输出行再次变为红色 虽然这个ALU还没有完成,但我想问一下为什么会发生这种情况?输入为8位长。我已经把它分

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

我的问题是我的ALU。ALU
Opcode
是一个4位数字,
SubOp
是一个单位值。当我尝试测试我的ALU时,我的所有输出行都是红色的。我不知道为什么。如果我删除
门的输出,所有其他行都变黑。然后,当我将我的
操作码(图像左下角)从
门(0x00)更改为另一个值时,输出行再次变为红色

虽然这个ALU还没有完成,但我想问一下为什么会发生这种情况?输入为8位长。我已经把它分解成一个简单的
门,接受8位输入,我仍然收到红线。无论选择
操作码
结果
(中下)都会产生错误

我错过了什么


我知道有一个更简单的方法来说明这一点。但我正试图将ALU“操作码”分解成一些在测试完成之前更容易理解的东西。这是我计划在了解红线问题后解决的问题。

我不确定,但我认为使用解复用器不起作用:

通常,解复用器的“未选择”信道的输出具有恒定值(例如0或2^N-1)而不是高Z

即使是high-Z:如果某个门(如And门)的输入是high-Z,输出也不一定是high-Z。这取决于使用的工具

假设你想做加法,把数字4和3相加。假设解复用器的非选定通道输出0

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

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

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

这两个(!!!)值现在都将馈送到“ALUresult”导线

您通常要做的是进行所有计算(将寄存器传递给所有操作)。所以你总是有所有的结果(或,和,和,差,积,商,…)


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

ahhhhh!!!回答得很好。现在完全有道理了。非常感谢。我不知道Demux发出了两个这样的信号。它可以解释为什么当其中一根导线被切断时,它会将所有其他导线清除为黑色。然后,当我使用我的
操作码
输入选择另一组函数时,它们再次变为红色!