ALU如何实现各种功能(例如,加,减等)?


9

我想知道ALU需要完成许多功能,如何开始实现一个功能(一项家庭作业,我应该使用Logisim,使用基本Gates,触发器等来实现MIPS系统)。

我感到困惑的部分是如何实现一个ALU,该ALU可以执行不同的功能,例如加/减/与/或/等。我是否需要更多的控制逻辑(请参见下面的“上一个分配”中的右上角)。

在上一个作业中,我实现了可以执行加/减/求和的ALU。现在我认为ALU应该能够执行以下功能

我的前期任务

Answers:


7

在内部计算所有答案,然后使用多路复用器进行选择时,它当然不是最小的设计。

考虑可以对问题进行位分割;只要您可以链接它们以获得正确的总体结果,就可以将其划分为两个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 Slice的内部结构,则看不到其中的多路复用器。


我的答案更多地是针对“容易起步”的问题,但感谢您指出了一种更理想的(在硬件方面)的可能性。
马丁·汤普森

5

是的,您需要更多的控制逻辑。

您先前的分配纯粹是算术运算(这是一个单词吗?),因此您可以使用单个加法器并使用控制信号对输入进行按摩,以创建所需的功能

您的新函数是逻辑的,因此您需要另一个块来执行逻辑操作。控制信号将改变该块的功能。

然后,在图的底部,您将需要一个由控制信号驱动的多路复用器(有时称为“多路复用器”),以选择要输出的答案(加法器及其“输入按摩”电路)或逻辑运算符中的一个)。

如果您可以为ALU控制线选择新的编码,则我可能会倾向于将MSB用作“算术/逻辑”选择,而其他人则选择“子功能”(如果有此意义),因为它简化了对ALU控制行的解码。最后的多路复用器。


是的,算术是一个词:)
Majenko

1
在我看来,算术就是您想要的词。请注意,该词在第三个音节上带有重音。第二个音节带有重音符号,这是一个不同的词,指的是像在小学时学习的那样执行基本的数字操作的机制。
奥林·拉斯洛普

1

处理逻辑运算的一种不错的方法是让两个操作数的位用作4输入多路复用器的选择器输入,并向多路复用器的“数据”输入提供对应于所需操作的四位模式(通常在如果是8位ALU,则将有8个多路复用器(每个位一个),并且将所有8个多路复用器的“数据”输入连接在一起)。


使用多路复用器作为非常小的ROM,这是使用实际ROM的另一种方法。
JustJeff 2011年

Nx1位ROM是一个多路复用器,其“数据”输入是硬接线的。在我描述的场景中,多路复用器的“数据”输入将是操作员选择的。实际上,人们可能会使用小型ROM从3位或4位操作码中选择16种可能的逻辑操作中的一些,再加上一些其他操作(如果需要,可以将操作码直接传递给逻辑单元,但在操作码不会生成有用的逻辑操作的情况下,请使用其他多路复用器选择其他操作)。
supercat
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.