我想知道,既然 ALU 需要做这么多功能,我该如何开始实现一个(我应该使用 Logisim 实现 MIPS 系统的作业,使用基本的门、触发器等)。
我感到困惑的部分是如何实现一个可以执行不同功能的 ALU,例如加/减/AND/OR/等。我是否需要更多的控制逻辑(参见下面“上一个分配”中的右上角)。
在之前的作业中,我实现了一个可以进行加/减/负运算的 ALU。现在我认为 ALU 应该能够执行以下功能
我的上一个任务
我想知道,既然 ALU 需要做这么多功能,我该如何开始实现一个(我应该使用 Logisim 实现 MIPS 系统的作业,使用基本的门、触发器等)。
我感到困惑的部分是如何实现一个可以执行不同功能的 ALU,例如加/减/AND/OR/等。我是否需要更多的控制逻辑(参见下面“上一个分配”中的右上角)。
在之前的作业中,我实现了一个可以进行加/减/负运算的 ALU。现在我认为 ALU 应该能够执行以下功能
我的上一个任务
虽然在内部计算所有答案,然后使用多路复用器在其中进行选择,但它肯定不是一个最小的设计。
考虑到您可以对问题进行位切片;您可以将其划分为两个 4 位部分,而不是具有两个 8 位输入的单个逻辑块,只要您可以链接它们以获得正确的整体结果。幸运的是,链接切片并不比单个位差,在加法的情况下,它代表进位位。所以每个 4 位切片都有一个进位位和一个进位位。(请注意,像 AND 和 NOR 这样的逻辑甚至不需要这个,但如果稍后你实现左/右移位,这个位很容易重新使用)。
极端情况下,您可以使用 8 片,每片 1 位。考虑 1 位切片很有用,因为它可以更容易地考虑一种可扩展回更大切片的方法。因此,对于 1 位切片,您只有 7 个输入:4 位功能代码、来自输入 A 的位、来自输入 B 的位和一个进位位。您也只有两个输出:函数输出和执行。所以现在你可以只用 7 个输入来编写两个输出函数,这在人类合理减少的能力范围内。您最终会得到一些不一定总是计算所有函数的门,但是切片内发生的事情并不重要,只要从外部查看它会产生正确的结果。
现在你可以走几种方式。一种方法是简单地使用这些 1 位切片中的 8 个,然后就完成了。另一种方法是制作更大的切片然后使用它们。从 1 位到 2 位,方程从 7 个输入变为 9 个,4 位将需要 13 个输入的函数。这不一定很容易,但会比计算一切然后多路复用方法提供更紧凑的结果。此外,如果您查看 74181 4 位 ALU 切片的内部结构,您将不会在其中看到多路复用器。
是的,您需要更多的控制逻辑。
您之前的分配纯粹是算术的(这是一个词吗?),因此您可以使用单个加法器并使用控制信号按摩输入以创建您想要的功能
您的新功能是逻辑的,因此您需要另一个块来执行逻辑操作。控制信号将改变这个块的功能。
然后在图表的底部,您需要一个由控制信号驱动的多路复用器(有时称为“多路复用器”)来选择要输出的答案(来自加法器的答案,它是“输入按摩”电路或来自逻辑运算符的那个)。
如果您可以为您的 ALU 控制线选择新的编码,我可能会尝试使用 MSB 作为“算术/逻辑”选择,如果有意义,其他人选择“子函数”,因为它简化了最终多路复用器。
处理逻辑运算的一种好方法是让两个操作数的位作为4 输入多路复用器的选择器输入,并为多路复用器的“数据”输入提供与所需操作相对应的四位模式(通常在一个 8 位 ALU,将有 8 个多路复用器——每个位一个——并且所有 8 个多路复用器的“数据”输入将连接在一起)。