补码乘法因符号位参与运算,可以完成补码数的“直接”乘法,而不需要求补级。这种直接的方法排除了较慢的对2求补操作,因而大大加速了乘法过程。
首先说明与直接的补码乘法相联系数学特征。对于计算补码数的数值来说,一种较好的表示方法是使补码的位置数由一个带负权的符号和带正权的系数。今考虑一个定点补码整数[N] 补 =a n a n-1 …a 1 a 0 ,这里a n 是符号位。根据[N] 补 的符号,补码数[N] 补 和真值N的关系可以表示成:
如果我们把负权因数-2
n
强加到符号位a
n
上,那么就可以把上述方程组中的两个位置表达式合并成下面的统一形式:
[例19] 已知: [N
1
]
补
= (01101)
2
,[N
2
]
补
=(10011)
2
,求[N
1
]
补
,[N
2
]
补
具有的数值。
[解:]
[N
1
]
补
=(01101)
2
具有的数值为:
N
1
=-0×2
4
+1×2
3
+1×2
2
+0×2
1
+1×2
0
=(+13)
10
[N
2
]
补
=(10011)
2
具有的数值为:
N
2
=-1×2
4
+0×2
3
+0×2
2
+1×2
1
+1×2
0
=(-13)
10
2.一般化的全加器形式
常规的一位全加器可假定它的3个输入和2个输出都是正权。这种加法器通过把正权或负权加到输入/输出端,可以归纳出四类加法单元。如右表,0类全加器没有负权输入;1类全加器有1个负权输入和2个正权输入;依次类推。
对0类、3类全加器而言有:
S = XYZ + XYZ + XYZ + XYZ
C
=
XY
+
YZ
+
ZX
对1类、2类全加器,则有
S = XYZ + XYZ + XYZ + XYZ
C = XY + XZ + YZ
表2.3 四类一般化全加器的名称和逻辑符号
注意,0类和3类全加器是用同一对逻辑方程来表征的,它和普通的一位全加器(0类)是一致的。这是因为3类全加器可以简单地把0类全加器的所有输入输出值全部反向来得到,反之亦然。1类和2类全加器之间也能建立类似的关系。由于逻辑表达式具有两级与一或形式,可以用“与或非”门来实现,延迟时间为2T。
3.直接补码阵列乘法器
利用混合型的全加器就可以构成直接补码数阵列乘法器。设被乘数A和乘数B是两个5位的二进制补码数,即
A=(a
4
)a
3
a
2
a
1
a
0
B=(b
4
)a
3
a
2
a
1
a
0
它们具有带负权的符号位a
4
和b
4
,并用括号标注。如果我们用括号来标注负的被加项,例如(a
i
b
j
),那么A和B相乘过程中所包含的操作步骤如下面矩阵所示:
5位乘5位的直接补码阵列乘法器逻辑原理。
其中使用不同的逻辑符号来代表0类、1类、2类、3类全加器。2类和1类全加器具有同样的结构,但是使用不同的逻辑符号可使乘法阵列的线路图容易理解。
在n位乘n位的一般情况下,该乘法器需要(n-2)
2
个0类全加器,(n-2)个1类全加器,(2n-3)个2类全加器,1个3类全加器,总共是n(n-1)个全加器。 故所需的总乘法时间是:
t
p
=Ta+2(n-1)Tf=2T+(2n-2)2T=(4n-2)T (2.31)
[例20] 设[A]
补
=(01101)
2
,[B]
补
=(11011)
2
,求[A×B]
补
=?
[解:]
验证:
-1×27+0×26+1×25+1×24+1×23+1×22+1×21+1×20
=-128+(32+16+8+4+2+1)
=-65
(13)×(-5)=-65
PS:这里解释的不大明白,个人觉得是因为补码符号位的计算本来要进一个(1),但是因为补码的进位要舍弃的关系(舍弃那位是本来借的更高位),所以不需要进,最后看一下,由于最高位是符号位,最后需要补上