数字电子学/数字加法器
数字加法器是一种能够添加两个数字 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 1 0 1 0 1 0 1 1 0 1
___________ A ------| | | Half |----- | | Adder | | |----- B ------|___________|
半加器可以使用 AND 门和 XOR 门来构建,如下所示
全加器是一种逻辑电路,它对三个一位二进制数执行加法运算。全加器产生三个输入的和以及进位值。它可以与其他全加器组合(见下文)或独立工作。
真值表
A | B | Cin | Cout | S |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 | 1 |
0 | 1 | 0 | 0 | 1 |
0 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 0 | 1 |
1 | 0 | 1 | 1 | 0 |
1 | 1 | 0 | 1 | 0 |
1 | 1 | 1 | 1 | 1 |
注意,进位输出前的最终 OR 门可以用 XOR 门替换,而不会改变结果逻辑。这是因为 OR 门和 XOR 门之间的唯一区别仅在两个输入都为 1 时才会出现;对于这里所示的加法器,这是不可能的。如果希望直接使用常见的 IC 芯片实现加法器,使用两种类型的门很方便。
全加器可以使用两个半加器来构建,将A 和B 连接到一个半加器的输入,将该半加器的和连接到第二个加法器的输入,将Ci 连接到另一个输入,并将两个进位输出进行 OR 运算。等效地,S 可以是A、B 和Ci 的三位 XOR,Co 可以是A、B 和Ci 的三位 多数函数。
可以使用多个全加器创建一个逻辑电路来添加N 位数。每个全加器输入一个Cin,它是前一个加法器的Cout。这种加法器被称为行波进位加法器,因为每个进位位都“行波”到下一个全加器。注意,第一个(也是唯一的第一个)全加器可以用半加器代替。
行波进位加法器的布局很简单,这允许快速设计时间;然而,行波进位加法器比较慢,因为每个全加器必须等待来自前一个全加器的进位位被计算出来。门延迟可以通过检查全加器电路很容易地计算出来。每个全加器需要三个逻辑级。在 32 位 [行波进位] 加法器中,有 32 个全加器,因此关键路径(最坏情况)延迟为 门延迟。
为了减少计算时间,工程师们设计了更快的二进制数加法方法,使用**超前进位加法器**。超前进位加法器通过为每个比特位创建两个信号(*P* 和 *G*)来工作,这两个信号基于以下情况:进位是否从低位传播过来(至少一个输入为 '1'),该位是否产生进位(两个输入都为 '1'),或者该位是否抑制进位(两个输入都为 '0')。在大多数情况下,*P* 只是半加器的求和输出,而 *G* 是同一个加器的进位输出。在生成 *P* 和 *G* 之后,就可以创建每个比特位的进位。一些先进的超前进位架构包括**曼彻斯特进位链**、**布伦特-孔加法器**和**科格-斯通加法器**。
其他一些多比特加法器架构将加法器分解成多个块。可以根据电路的传播延迟来改变这些块的长度,以优化计算时间。这些基于块的加法器包括**进位旁路加法器**,它将为每个块而不是每个比特确定 *P* 和 *G* 值,以及**进位选择加法器**,它预先生成每个块的两个可能的进位输入的和与进位值。
其他加法器设计包括**条件求和加法器**、**进位跳跃加法器**和**进位完全加法器**。
超前进位单元
[edit | edit source]通过组合多个超前进位加法器,可以创建更大的加法器。这可以在多个级别上使用,以创建更大的加法器。例如,以下加法器是一个 32 位加法器,它使用四个 8 位 CLA 和两级 LCU。