跳至内容

数字电子/数学与逻辑运算/数字加法器

来自Wikibooks,开放世界中的开放书籍

数字加法器

[编辑 | 编辑源代码]

数字加法器是一种能够对两个数字n位二进制数进行加法运算的数字设备,其中n取决于电路的实现方式。数字加法器将两个二进制数A和B相加,产生一个和S和一个进位C。

半加器

[编辑 | 编辑源代码]

半加器是一种用于对两个二进制位0和1进行加法的数字设备。半加器输出两个输入的和以及一个进位值。

0 + 0 = 和 0 进位 0
0 + 1 = 和 1 进位 0
1 + 0 = 和 1 进位 0
1 + 1 = 和 0 进位 1

真值表如下

[编辑 | 编辑源代码]
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 0
              ___________
     A ------|           |
             |   Half    |----- 
             |   Adder   |
             |           |----- 
     B ------|___________|


半加器可以用与门和异或门构成,如下所示

Half adder circuit diagram

全加器

[编辑 | 编辑源代码]

全加器是一种逻辑电路,它对三个一位二进制数执行加法运算。全加器产生两个输入的和以及进位值。它可以与其他全加器组合(见下文)或单独工作。

真值表

[编辑 | 编辑源代码]
输入 输出
0 0 0 0 0
0 1 0 0 1
1 0 0 0 1
1 1 0 1 0
0 0 1 0 1
0 1 1 1 0
1 0 1 1 0
1 1 1 1 1
Full adder circuit diagram Inputs: {A, B, CarryIn} → Outputs: {Sum, CarryOut}
Schematic symbol for a 1-bit full adder

请注意,进位输出之前的最终或门可以用异或门替换,而不会改变结果逻辑。这是因为或门和异或门之间的唯一区别发生在两个输入都为1时;对于此处显示的加法器,这永远不可能。如果希望使用常用集成电路芯片直接实现加法器,则仅使用两种类型的门比较方便。

全加器可以通过两个半加器来构造,将AB连接到一个半加器的输入,将该半加器的和连接到第二个加法器的输入,将Ci连接到另一个输入,并将两个进位输出进行或运算。等效地,S可以是ABCi的三位异或,而Co可以是ABCi的三位多数函数

多位加法器

[编辑 | 编辑源代码]

行波进位加法器

[编辑 | 编辑源代码]

可以使用多个全加器创建一个逻辑电路来对N位数进行加法运算。每个全加器输入一个Cin,它是前一个加法器的Cout。这种加法器是行波进位加法器,因为每个进位位都会“传播”到下一个全加器。请注意,第一个(并且只有第一个)全加器可以用半加器替换。

行波进位加法器的布局很简单,这使得设计时间很快;然而,行波进位加法器相对较慢,因为每个全加器必须等待来自前一个全加器的进位位被计算出来。可以通过检查全加器电路轻松计算出门延迟。每个全加器需要三个逻辑级。在一个32位的[行波进位]加法器中,有32个全加器,因此关键路径(最坏情况)延迟为 个门延迟。

先行进位加法器

[编辑 | 编辑源代码]

为了减少计算时间,工程师设计了更快的加法方法,通过使用先行进位加法器来将两个二进制数相加。它们的工作原理是为每个比特位置创建两个信号(PG),基于是否从较低有效位位置传播进位(至少一个输入为'1'),在该比特位置生成进位(两个输入都为'1'),或者在该比特位置终止进位(两个输入都为'0')。在大多数情况下,P 只是半加器的和输出,G 是相同加法的进位输出。在生成PG 之后,创建每个比特位置的进位。一些高级的先行进位架构包括曼彻斯特进位链Brent-Kung 加法器Kogge-Stone 加法器

带先行进位的4位加法器

其他一些多位加法器架构将加法器分成多个块。可以根据电路的传播延迟改变这些块的长度以优化计算时间。这些基于块的加法器包括进位旁路加法器,它将为每个块而不是每个比特确定PG 值,以及进位选择加法器,它预先生成块的两个可能的进位输入的和与进位值。

其他加法器设计包括条件和加法器进位跳过加法器进位完成加法器

先行进位单元

[编辑 | 编辑源代码]

通过组合多个先行进位加法器,可以创建更大的加法器。这可以在多个级别上使用以创建更大的加法器。例如,以下加法器是一个64位加法器,它使用四个16位CLA和两级的LCU。

一个64位加法器


参考文献

[编辑 | 编辑源代码]
  1. 维基百科上的数字加法器
华夏公益教科书