数字电子/数学与逻辑运算/数字加法器
数字加法器是一种能够对两个数字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 ------|___________|
半加器可以用与门和异或门构成,如下所示
全加器是一种逻辑电路,它对三个一位二进制数执行加法运算。全加器产生两个输入的和以及进位值。它可以与其他全加器组合(见下文)或单独工作。
输入 输出 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
请注意,进位输出之前的最终或门可以用异或门替换,而不会改变结果逻辑。这是因为或门和异或门之间的唯一区别发生在两个输入都为1时;对于此处显示的加法器,这永远不可能。如果希望使用常用集成电路芯片直接实现加法器,则仅使用两种类型的门比较方便。
全加器可以通过两个半加器来构造,将A和B连接到一个半加器的输入,将该半加器的和连接到第二个加法器的输入,将Ci连接到另一个输入,并将两个进位输出进行或运算。等效地,S可以是A、B和Ci的三位异或,而Co可以是A、B和Ci的三位多数函数。
可以使用多个全加器创建一个逻辑电路来对N位数进行加法运算。每个全加器输入一个Cin,它是前一个加法器的Cout。这种加法器是行波进位加法器,因为每个进位位都会“传播”到下一个全加器。请注意,第一个(并且只有第一个)全加器可以用半加器替换。
行波进位加法器的布局很简单,这使得设计时间很快;然而,行波进位加法器相对较慢,因为每个全加器必须等待来自前一个全加器的进位位被计算出来。可以通过检查全加器电路轻松计算出门延迟。每个全加器需要三个逻辑级。在一个32位的[行波进位]加法器中,有32个全加器,因此关键路径(最坏情况)延迟为 个门延迟。
为了减少计算时间,工程师设计了更快的加法方法,通过使用先行进位加法器来将两个二进制数相加。它们的工作原理是为每个比特位置创建两个信号(P 和 G),基于是否从较低有效位位置传播进位(至少一个输入为'1'),在该比特位置生成进位(两个输入都为'1'),或者在该比特位置终止进位(两个输入都为'0')。在大多数情况下,P 只是半加器的和输出,G 是相同加法的进位输出。在生成P 和 G 之后,创建每个比特位置的进位。一些高级的先行进位架构包括曼彻斯特进位链、Brent-Kung 加法器和Kogge-Stone 加法器。
其他一些多位加法器架构将加法器分成多个块。可以根据电路的传播延迟改变这些块的长度以优化计算时间。这些基于块的加法器包括进位旁路加法器,它将为每个块而不是每个比特确定P 和 G 值,以及进位选择加法器,它预先生成块的两个可能的进位输入的和与进位值。
其他加法器设计包括条件和加法器、进位跳过加法器和进位完成加法器。
通过组合多个先行进位加法器,可以创建更大的加法器。这可以在多个级别上使用以创建更大的加法器。例如,以下加法器是一个64位加法器,它使用四个16位CLA和两级的LCU。