如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
2.3定点乘法运算运算的过程与十进制乘法相似:从乘数y的最低位开始,若这一位为“1”,则将被乘数x写下;若这一位为“0”,则写下全0。然后在对乘数y的最高为进行乘法运算,其规则同上,不过这一位乘数的权与最低位乘数的权不一样,因此被乘数x要左移一位。以此类推,直到乘数个位乘完为止,最后将它们统统加起来,变得到最后乘积z。如果被乘数和乘数用定点整数表示,我们也会得到同样的结果。x•y=x•(0.1011)=0.1•x+0.00•x+0.001•x+0.0001•x=0.1{x+0.1[0+0.1(x+0.1•x)]}=2-1{x+2-1[0+2-1(x+2-1•x)]}根据此式,按照式中括号所表达的层次.从内向外逐次进行移位累加.每算完一层括号2-1(部分积),就得到一个新的部分积,最后的一个部分积即为乘积.一般而言,设被乘数x,乘数y都是小于1的n位定点正数:x=0.x1x2…xny=0.y1y2…yn其乘积为x•y=x(0.y1y2…yn)=x(y12-1+y22-2+…+yn2-n)=2-1(y1x+2-1(y2x+2-1(…+2-1(yn-1x+2-1(ynx+0))…)))令Zi表示第i次部分积,则上式可写成如下递推公式:z0=0z1=2-1(ynx+z0)z2=2-1(yn-1x+z1):zi=2-1(yn-i+1x+zi-1)(2.28):zn=x•y=2-1(y1x+zn-1)显然,欲求x·y,则需设置一个保存部分积的累加器.乘法开始时,令部分积的初值z0=0,然后求ynx加上z0,右移1位得第1个部分积z1.又将yn-1加上zl,再右移1位得第2个部分积z2.依此类推,直到求得ylx加上zn-1并右移1位得最后部分积zn,即得乘积x·y一zn。显然,两个n位数相乘,需重复进行n次“加”及“有移”操作,·才能得到最后乘积.这就是实现原码一位乘法的规则.[例1]x=0.1101,y=0.1011,求x·y.实现原码一位乘法的硬件逻辑原理示于图2.5.这里需要三个寄存器,其中R0存放部分积z(乘法开始前R0应清“0”,因为z0=0),R2存放被乘数x,Rl存放乘数y.由于乘法开始时先从乘数的最低位yn开始,以后则使用yn-1,yn-2,…,yl,因此乘数寄存器R1应当是具有右移功能的移位寄存器.假定加法器不具备右移功能,那么由于部分积需要右移,R0也应当是具有右移功能的移位寄存器.除了三个寄存器R0,R1,R2外,还需一个加法器和一个计数器,前者完成部分积与位积的累加,后者对移位的次数进行计数,以便判断乘法运算是否结束.乘法开始时“启动”信号使控制触发器Cx置“1”,于是开启时序脉冲T.当乘数寄存器R1最末位为”1”时,部分积Z和被乘数x在加法器中相加,其结果输出至R0的输入端.一旦打入控制脉冲T到来,控制信号LDR0使部分积右移1位,与此同时,乘数寄存器Ri也在控制信号LDR1作用下右移一位,且计数器i计数1次.当计数器i=n时,计数器i的溢出信号使控制触发器Cn置“0”,关闭时序脉冲T,乘法宣告结束.如果将R0和R1连接起来,乘法结束时乘积的高n位部分在R0,低n位部分在R1,R1中原来的乘数y由于右移而全部移出丢失.所得乘积为2n+1位(其中包括1位符号位).乘法操作的总时间为tm=n(ta+tr)(2.29)其中ta为加法器执行一次加法操作的时间,tr为执行一次移位操作的时间,n为尾数位数.如果加法操作和移位操作同时进行,则tr项可省去.