跳转到内容

电子学/加法器

来自维基教科书,开放世界中的开放书籍

当将一个数字 A 与另一个数字 B 相加时,运算将产生一个和 S 和一个进位 C。加法器的操作如下所示。

数字加法器

[编辑 | 编辑源代码]

半加器

[编辑 | 编辑源代码]

如果有两个二进制数 A 和 B,则将这两个数字相加的操作可以表示如下

A + B = S C
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

从上面可以看出,在逻辑门方面,异或门会产生两个输入的和,与门会产生进位。

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

Half adder circuit diagram


              ___________
     A ------|           |
             |   Half    |----- 
             |   Adder   |
             |           |----- 
     B ------|___________|

全加器

[编辑 | 编辑源代码]

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

输入 输出
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 个全加器,因此关键路径(最坏情况)延迟为 门延迟。

超前进位加法器

[编辑 | 编辑源代码]

为了减少计算时间,工程师设计了使用**进位超前加法器**(carry lookahead adder)来更快地添加两个二进制数的方法。它们通过根据每个比特位置是否传播进位(至少一个输入为“1”)、在该比特位置生成进位(两个输入都为“1”)或在该比特位置杀死进位(两个输入都为“0”)来为每个比特位置创建两个信号(*P* 和 *G*)。在大多数情况下,*P* 只是半加器的求和输出,而 *G* 是同一个加器的进位输出。在生成 *P* 和 *G* 之后,会创建每个比特位置的进位。一些先进的进位超前架构包括**曼彻斯特进位链**(Manchester carry chain)、**布伦特-孔加法器**(Brent-Kung adder)和**科格-斯通加法器**(Kogge-Stone adder)。

带有进位超前的4位加法器

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

其他加法器设计包括**条件求和加法器**(conditional sum adder)、**进位跳跃加法器**(carry skip adder)和**进位完成加法器**(carry complete adder)。

进位超前单元

[编辑 | 编辑源代码]

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

一个 64 位加法器
  1. 维基百科上的数字加法器
华夏公益教科书