多位串行加法器
将n个全加器的进位链串联即可得到n位串行加法器,也称为行波进位加法器(行波可以理解为进位信息需要从后往前一个接一个的传递)。
可以看到图中低位进位输出是连接到高位进位输入的。
考虑溢出判断的方式不同,可以将串行加法器分为如下两类:
- 单符号位补码加法器
- 双符号位补码加法器
单符号位补码加法器
上图是单符号位补码加法器的逻辑实现,对于有符号数的加减法运算,溢出的检测信号是overflow,可以直接利用最高位数的进位和符号位的进位异或得到。
对于无符号数的加法运算,溢出的检测信号是 C n {C_{n}} Cn具体情况如下:
对于无符号数的减法运算,溢出的检测信号还是 C n C_{n} Cn具体情况如下:
针对这两种情况,可以得出无符号数溢出的规律是加法变小,减法变大,其对应的检测公式如下:
U
O
F
=
S
u
b
⨁
C
n
UOF=Sub\bigoplus{C_{n}}
UOF=Sub⨁Cn
其中,Sub在加法时为0,减法时为1。
双符号位补码加法器
图中显示的双符号位补码加法器的溢出检测也分为有符号位数溢出检测和无符号位数溢出检测,其中有符号位数运算(加减)溢出检测的依据是第一个overflow,公式如下:
O
v
e
r
f
l
o
w
=
S
n
−
1
⨁
S
n
−
2
Overflow=S_{n-1}\bigoplus{S_{n-2}}
Overflow=Sn−1⨁Sn−2
无符号位数运算(加减)溢出检测的依据是第二个overflow,其对应的公式是前文的:
U
O
F
=
S
u
b
⨁
C
n
UOF=Sub\bigoplus{C_{n}}
UOF=Sub⨁Cn
当两个无符号数相加时(正数加正数):
C
n
−
1
=
0
C_{n-1}=0
Cn−1=0相当于Sub=0;
当两个无符号数相减时(正数加负数):
C
n
−
1
=
1
{C_{n-1}}=1
Cn−1=1相当于Sub=1。