assembly - Logisim ALU 红线 - 不了解原因以及如何修复

标签 assembly alu

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

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

虽然此 ALU 尚未完成,但我想询问一些关于为什么会发生这种情况的意见?输入的长度为 8 位。我已经将其分解为一个简单的 AND 门,采用 8 位输入,但我仍然收到红线。无论选择OpcodeALUresult(底部中间)都会产生错误。

我错过了什么? enter image description here

我知道有一种更简单的方法可以解决这个问题。但在测试完成之前,我试图将 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/

相关文章:

x86 - 为什么 AVX512-IFMA 仅支持 52 位整数?

cpu - RISCV:如何计算分支指令?

compiler-errors - 在VHDL中生成关键字

c++ - 优化 Stack-Walking 性能

c - 为什么不捕获 ebp 之上的堆栈写入以避免溢出漏洞?

assembly - 一条 x86 指令从 L1 缓存读取或写入的最大数据量是多少?

cpu - 如何在硬件层面上实现转变?

vhdl - VHDL shift_left 操作出错

assembly - 我们可以说x86 CPU具有数据类型吗?

c - 汇编语言是如何工作的?