原码乘法、原码乘法原理详细
1 .人工算法和机器算法的异构
在指示计算机中,将两个源代码表示的数字相乘的运算规则是将:个乘积的已编码比特用两个符号比特进行异或运算,并且乘积的数值部分乘以两个正数。
用定点小数表示n位的被乘数和乘数(定点整数也一样) ) ) ) )。
被乘数[x]元=xf .xn-1…x1x0
乘数[y]原=yf .yn-1…y1y0
乘积
[z]原=(xfYF ) (0.xn-1…x1x0)0.yn-1…y1y0 ) (2.26 ) ) ) ) ) 652 )
式中,xf是被乘数符号,yf是乘数符号。
乘积符号的运算法则是,该号的乘法为正,异号的乘法为负。 被乘数、乘数和符号的组合只有4种情况(xfyf=00、01、10、11 ),所以乘积的符号可以通过异或(按位相加)得到。
数值部分的运算方法与通常的十进制小数乘法类似,但对于使用二进制表示的数,乘法规则更简单。
假设x=0.1101,y=0.1011。 先用习惯的方法求乘积吧。 其过程如下:
的运算过程类似于十进制的乘法。从乘数y的最低有效位开始,如果该位为“1”,则写被乘数x。 如果这里是“0”,则写为全0。 然后,乘数y的最高是乘法,规则相同,但由于该位乘数的权重与最低位乘数的权重不同,所以被乘数x向左移动1位。 这样,直到乘数的位数结束,最后将它们全部相加,成为最后的乘积z。
用定点整数表示被乘数和乘数可以得到相同的结果。
人们习惯的算法不能完全适用于机器。 其原因之一是,机器通常只有n位的长度,如果将两个n位相乘,乘积可能为2n位。 其理由之二是,只有将两个操作数相加的加法器不能承受将各n位积相加一次的运算。 在早期计算机中,为了简化硬件结构,通过多次执行串行的1位乘法方式、即“加法-移位”操作来实现。 这种方法不需要很多设备。 但串行方式还是太晚了,大规模集成电路问世以来,出现了各种形式的流水式阵列乘法器,它们属于并行乘法器。
图2.4 mn位无符号阵列乘法器的逻辑图
2 .无符号阵列乘法器
有两个无符号的二进制整数。
A=am-1…a1a0
B=bn-1…b1b0
这些数值分别是a和b,即
二进制乘法将被乘数a和乘数b相乘,生成m n位的乘积p。
P=pm n-1…p1p0
乘积p的数值是
实现这个乘法过程所需的操作与人们的习惯非常相似:
上述步骤显示了在m位n位无符号整数数组乘法中“加法-移位”操作的被加矩阵。 各部分积项(位积) aibj称为被加数。
该mn个被加数{aibj|0im-1和0jn-1}
可以在mn个与门中并行发生。 很明显,设计高速并行乘法器的基本问题是缩短被加数矩阵的各列中包含的第一相加时间。
为了该乘法器实现n位n位,需要n(n-1 )个全加法器和n-2个与门。 该乘法器的总乘法时间可以估算如下。
假设Ta是“与门”的传输延迟时间,Tf是全加法器(FA )的进位传输延迟时间,并且FA的进位链功能通过2级逻辑积实现,则:
Ta=Tf=2T
如从演示中看到的,最坏的延迟路径是沿着矩阵P4的垂直线和最下面的行。 因此,n位n位无符号阵列乘法器的总乘法时间如下。
TM=ta(n-1 ) 6t ) n-1 ) TF
=2t (n-1 )=2t (n-1 ) ) 2t=(8n-6 ) T (2.27 ) )。
[例16]已知两个无符号的二进制整数A=11011,B=10101,求各部分乘积项aibj的值和p9p8……p0的值。
[解:]
a4b0=1a3b0=1a2b0=0a1b0=1a0b0=1a0b0=1
a4 B1=0a 3b1=0a2b1=0a1b1=0a0b1=0a0b1=0
a4b2=1 a3b2=1 a2b2=0 a1b2=1 a0b2=0
a4 B3=0a3b3=0a2b3=0a1b3=0a0b3=0a0b3=0
a4 B4=1a3b4=1a2b4=0a1b4=1a0b4=1a0b4=1
p=p9 P8 p7p6p5p 4p3P2P1P0=1000110111 (56710 ) )。
3 .有符号阵列乘法器
(1)针对2求出贴片电路
首先,我们来看看算术运算部件设计中常用的互补电路。 在具有使能控制的二进制对双求补器电路图中,其逻辑式如下。
C-1=0,Ci=ai Ci-1
ai *=aiECI-1,0In
插值2时,必须使用逐位扫描技术执行必要的插值操作。 设A=an…a1a
0是给定的(n+1)为带符号的数,要求确定它的补码形式。进行求补的方法就是从数的最右端a0开始,,由右向左,直到找出第一个“1”,例如ai=1, 0≤i≤n。这样,ai以左的每一个输入位都求反,即1变0,0变1。最右端的起始链式输入C-1必须永远置成“0”。当控制信号线E为“1”时,启动对2求补的操作。当控制信号线E为“0”时,输出将和输入相等。显然,我们可以利用符号位来作为控制信号。例如,在一个4位的对2求补器中,,如果输入数为1010,那么输出数应是0110,其中从右算起的第2位,就是所遇到的第一个“1”的位置。用这种对2求补器来转换一个(n+1)为带符号的数,所需的总时间延迟为
tTC=n·2T+5T=(2n+5)T (2.28)
其中每个扫描级需2T延迟,而5T则是由于“与”门和“异或”门引起的。
(2) 带符号的阵列乘法器
(n+1)×(n+1)位带求补器的阵列乘法器逻辑方框图
通常,把包括这些求补级的乘法器又称为符号求补的阵列乘法器。在这种逻辑结构中,共使用三个求补器。其中两个算前求补器的作用是:将两个操作数A和B在被不带符号的乘法阵列(核心部件)相乘以前,先变成正整数。而算后求补器的作用则是:当两个输入操作数的符号不一致时,把运算结果变成带符号的数。
设A=anan-1…a1a0和B=bnbn-1…b1b0均为用定点表示的(n+1)位带符号整数。在必要的求补操作以后,A和B的码值输送给n×n位不带符号的阵列乘法器,并由此产生2n位真值乘积:
A·B=P=p2n-1…p1p0
p2n=an⊕bn
其中P2n为符号位。
上面所示的带求补级的阵列乘法器既适用于原码乘法,也适用于间接的补码乘法。不过在原码乘法中,算前求补和算后求补都不需要,因为输入数据都是立即可用的。而间接的补码阵列乘法所需要增加的硬件较多。为了完成所必需的乘法操作,时间大约比原码阵列乘法增加1倍。
[例17] 设x=+15,y=-13,用带求补器的原码阵列乘法器求出乘积x·y=?
[解:]
设最高位为符号位,则输入数据为
[x]原=01111 [y]原=11101
符号位单独考虑,算前求补级后 |x|=1111,|y|=1101
算后经求补级输出并加上乘积符号位1,则原码乘积值为111000011。
换算成二进制数真值是
x·y=( -11000011)2=(-195)10
十进制数验证:x×y = 15× (-13) = -195相等。
[例18] 设x=+15,y=-13,用带求补器的补码阵列乘法器求出乘积x·y=?
[解:]
设最高位为符号位,则输入数据用补码表示为
[x]补=01111 [y]补=10011
符号位单独运算,x0⊕y0=0+1=1
尾数部分算前求补器输出为: |x|=1111,|y|=1101
算后求补器输出为00111101,加符号位1,得
[x·y]补=100111101
补码二进制数真值是
x·y=-1×28+1×25+1×24+1×23+1×22+1×20=(-195)10
十进制数验证: x×y=(+15)×(-13)=-195相等。