计组第五课

不带符号的阵列乘法器
回到第四课讲的绝对值乘法:
第一步:取X、Y的绝对值,X>0时,|X|=X补;X<0时,|X|=X补 求补
第二步:求|XY|
第三步:求[X
Y]补,若Xn⊕Yn=0,则[XY]=|XY|;若Xn⊕Yn=1,则[XY]=|XY|求补。

其中,第二步求|X*Y|中,上一节课提到的方法是“部分积+移位”,而这节课讲到的是阵列乘,先讲讲不带符号的阵列乘法器。
计组第五课_第1张图片
如图所示,这就是两个4位二进制数进行相乘运算的方式,该图所示的是简略的,位积的每一位XiYj都可以用与门实现,而每一位的相加均可以使用一个全加器实现。如下图所示:
计组第五课_第2张图片
要注意观察该图的最高位的三列,其分别在最后多加了一个全加器,因为要接着上一位的全加器的进位。那么为什么要把每个全加器的进位给其左下方的全加器呢,答案很简单,就是为了提高运算的效率,假设此时进行的是X3 X2 X1 X0与Y0进行相与运算,相乘运算利用与门同时进行,如果每个低位的全加器运算后的进位都给与其在同一水平线的全加器,那么每个高位的全加器都要在相与运算完成之后等待低位的进位上来,位数一多,自然就会影响相乘运算的效率了,因此全加器的进位给到其左下角的高位全加器,那么和其在同一水平线的全加器,输入端低位的进位自然就是0,然后X与Y1进行相乘运算完,来自低位的进位在之前的相乘运算中已经得出了,逐次做这件事情,即可完成运算。而图中的会有相同水平线上的进位(p5接受了来自p4的进位),是迫不得已的,然而并不影响我们的效率,比如运算p5时,有两个之前的全加器产生进位给到全加器,根据全加器的运算规则,可以把p4给的进位当做加数(全加器的输入端:加数、被加数、来自低位的进位),仍然是上一次相乘运算就得到的,因此并不影响效率。

那么就给个5位×5位的不带符号的阵列乘法图吧:
计组第五课_第3张图片
害,画的有点丑,无所谓啦~~

这种乘法器要实现n位×n位时,需要n(n-1)个全加器和n^2个与门。

带符号的阵列乘法器
计组第五课_第4张图片
这个电路实现的就是直接求补的操作,即已知X补求(-X)补,一种快速计算方法就是包括符号位在内所有数取反,然后对其绝对值加1。老师曾经给出过快速求补的方法:从右往左找到第一个1,包括这个1的右边所有的数保持不变,1左边的所有数都取反。上面的电路可以实现这个操作:
E是控制信号线,当E=0时,输入和输出都是相等的,因为任何二进制数和0异或都为原数;当E=1时,刚好可以实现求补运算,观察三个黄色的或门,当某一位为1时,往前(左)传下去都是1,那么其前面的部分就全部取反了,而出现这一情况之前的右边数字就是满足条件的。
计组第五课_第5张图片
这就是补码阵列乘法器(间接法)
重点:
1、算前求补器的实质:根据补码求绝对值
2、算后求补器的实质:根据绝对值求补码

这就是能阐述绝对值乘法的方式了。

例题: 设x=-15,y=-13,用带求补器的补码阵列乘法器求出x*y,并用十进制速乘法进行验证。

解:
设最高位为符号位,输入数据用补码表示:
x补=10001,y补=10011
符号位xn⊕yn=1⊕1=0(结果符号位正数)
尾数部分利用算前求补器输出为:
|x|=1111,|y|=1101
算后求补器输出为11000011(计算省略),最后补码乘积值为:
[xy]补=0 11000011
补码的二进制数真值为x
y=2^7+2^6+2^1+2^0=+195
十进制数乘法验证x*y=+195,验证成功。

难点:直接补码并行乘法
补码乘法因符号位参与运算,可以完成补码数的“直接乘法”,而不需要求补级。这种直接的方法排除了较慢的对2求补操作,因而大大加速了乘法过程。
1、一般化的全加器形式:
全加器有3个输入和2个输出,有四类加法单元:0类全加器没有负权输入,1类有1个负权输入,依次类推。
(0类和3类是用同一对逻辑方程来表征的,它和普通的一位全加器(0类)是一致的。)
计组第五课_第6张图片
如何实现直接补码并行乘法呢?

先转换这个式子

从补码求真值(X表示X真值):

设X补=XnXn-1Xn-2…X0
则求其模就等于1 00…0B(n+1个0)=2^(n+1)D
①若Xn=0则X=X补=XnXn-1Xn-2…X0
②若Xn=1,则

X=X补-模(X补=模+X)
∴X=XnXn-1…X0-2^(n+1)
∵Xn的权值为2^n
∴X=Xn-1Xn-2…X0+Xn*2^n-2^(n+1)
又∵Xn=1
∴X=Xn-1Xn-2…X0-2^n

综合①②两种情况,可以得到
X=Xn-1Xn-2…X0-Xn*2^n
所以X=
计组第五课_第7张图片
举栗子:
-2的补码是1110,其10进制真值表示为14(16为模)
利用上面的公式,则可以把-2拆解成6-8,式子成功转换了。

那么现在就来实现一下直接补码的并行乘法

设A补=AnAn-1…A0,B补=BnBn-1…B0。
先分别把A、B转换成上面的格式,即:
计组第五课_第8张图片
所以A*B的值为:
计组第五课_第9张图片
那么A补×B补,就是把上图中的两个负号改成正号就好了,式子就不写了,展开就晓得了。

这就是4位×4位的直接补码并行乘法器:
计组第五课_第10张图片

你可能感兴趣的:(计算机组成原理,学习)