计算机组成原理第二章第8讲定点乘法运算.ppt
定点乘法运算,2.3 定点乘法运算,2.3.1 定点原码乘法2.3.2 定点补码乘法,2.3.1 定点原码乘法,原码乘法在定点计算机中,两个原码数相乘的运算规则:乘积的符号位由两数的符号位按异或运算得到,而乘积的数值部分则是两个正数相乘之积。,设n位被乘数和乘数用定点整数表示(定点小数也同样适用):被乘数 原f n110乘数 原f n110则乘积 原(ff)(n110)(n110)式中,f为被乘数符号,f为乘数符号。关键问题:怎样解决两个无符号整数的乘法运算,2.3.1 定点原码乘法,1、定点原码乘法原理,尾数乘法举例如下:设1101,1011 1 1 0 1()1 0 1 1()1101 1101 0000 1101 10001111(),1、定点原码乘法原理,n位乘n位积可能为2n位.乘积的最后是所有位积之和,有n个数相加,而加法器只有两个输入端所以需要改造方法一:硬件实现方法(串行的“移位和加法”),硬件结构简单,速度太慢(时间延迟太长,不采用).方法二:不带符号位的阵列乘法器,1、定点原码乘法原理,A=a4a3a2a1a0 阵列分析:B=b4b3b2b1b0 a4b0 a3b0 a2b0 a1b0 a0b0 a4b1 a3b1 a2b1 a1b1 a0b1 a4b2 a3b2 a2b2 a1b2 a0b2 a4b3 a3b3 a2b3 a1b3 a0b3a4b4 a3b4 a2b4 a1b4 a0b4,用公式描述乘法过程:设有两个无符号二进制整数:Aam1a1a0Bbn1b1b0它们的真值分别为a和b,即m1n1 a ai2ib bj2ji0j0 在二进制乘法中,被乘数A与乘数B相乘,产生mn位乘积P:Ppmn1p1p0乘积P 的数值为:,1、定点原码乘法原理,实现这个乘法过程所需要的操作:其中的aibj实际为ai与bj的逻辑与,不带符号位的阵列乘法器,解决问题的核心:怎样将乘法阵列中的每个逻辑与累加 用构思精巧、绘图细密、像个刺绣作品的阵列乘法器实现,乘法阵列器工作构思图:,a4b0 a3b0 a2b0 a1b0 a0b0 a4b1 a3b1 a2b1 a1b1 a0b1 a4b2 a3b2 a2b2 a1b2 a0b2 a4b3 a3b3 a2b3 a1b3 a0b3a4b4 a3b4 a2b4 a1b4 a0b4,FA,FA,FA,FA,FA,FA,FA,FA,FA,FA,FA,FA,FA,FA,FA,FA,FA结构,FA,被加数或和,进位,加数,和,进位,不带符号位的阵列乘法器,先勘误:教材图2.5最下边一行FA右侧的水平箭头应删掉(除了0输入)即,改为和上页ppt图一致。,阵列乘法器分析:,m位被乘数,n位乘数的阵列乘法器可由(m1)n个全加器构成。为提高并行处理能力和速度,减少进位延迟时间,每行相加产生的进位移到下一行前一位的全加器处理。虚线部分是一个行波进位加法器,将最后一次进位加入分别累加。最难的就是耗时分析:,阵列乘法器分析:,耗时分析(5位乘以5位原码):对于FA得到S耗时6T,得到C耗时5T向下运算耗时6T 4最后一行行波进位耗时 2T 4+3T3T指的是每个FA运算中第一个异或门的共同耗时,过程中不需要溢出判断不要忘了:乘法阵列是由与门组生成所以tm=T+(n-1)6T+(n-1)2T+3T,FA逻辑电路和框图,1位补码运算的加法减法器,1位补码运算的加法减法器FA,不带符号位的阵列乘法器,阵列乘法器耗时计算的特别说明:1.该耗时公式为时间估算,有一定程度的细节忽略成分2.即使不做溢出判断,加法器最后一个结果出来还得再多加一个T3.如果将加法器第一个全加器输入端连接更合理(低位进位和0连接Ai、Bi端)又可省出一个T的时间4.具体细节自行推敲讨论,a4b0 a3b0 a2b0 a1b0 a0b0 a4b1 a3b1 a2b1 a1b1 a0b1 a4b2 a3b2 a2b2 a1b2 a0b2 a4b3 a3b3 a2b3 a1b3 a0b3a4b4 a3b4 a2b4 a1b4 a0b4,FA,FA,FA,FA,FA,FA,FA,FA,FA,FA,FA,FA,FA,FA,FA,FA,思考:向FA左侧产生进位可以吗?,每个FA影响它左边和下边的FA计算,并行程度降低,例19 参见图2.5,已知不带符号的二进制整数A=11011,B=10101,求每一部分乘积项aibj的值与p9p8p0的值。解:1 1 0 1 1 A(2710)1 0 1 0 1 B(2110)1 1 0 1 1 a4b0=1,a3b0=1,a2b0=0,a1b0=1,a0b0=1 0 0 0 0 0 a4b1=0,a3b1=0,a2b1=0,a1b1=0,a0b1=0 1 1 0 1 1 a4b2=1,a3b2=1,a2b2=0,a1b2=1,a0b2=1 0 0 0 0 0 a4b3=0,a3b3=0,a2b3=0,a1b3=0,a0b3=0 1 1 0 1 1 a4b4=1,a3b4=1,a2b4=0,a1b4=1,a0b4=1 1 0 0 0 1 1 0 1 1 1 PP=p9p8p7p6p5p4p3p2p1p0=1000110111(56710)注意教材上勘误:a0b2=1,3、带符号位的阵列乘法器,要解决的问题说明:前面刚讨论了两个数是原码时的乘法运算,或者说是正数补码的乘法计算机中大部分时候数据以补码形式出现,当碰到负数,或者说有符号的数的补码乘法时该怎样处理?方法:先转为原码,然后再处理转为原码的过程和求补的过程完全相同,3、带符号位的阵列乘法器,先看求补电路(a3a2a1a0均为数值)、(E接符号位),3、带符号的阵列乘法器,求补电路分析:E=0时,输入和输出相等E=1时,则从数最右端往左边扫描,直到第一个1的时候,该位和右边各位保持不变0A=A,左边各数值位按位取反1A=A可以用符号作为E的输入这些操作也叫对2求补,3、带符号的阵列乘法器,原:1.10110 补:1.01010举例:10011 101000 11000011101 111000 110000(最高位是符号位),从右至左碰到第一个1不变,左边数值按位取反,3、带符号的阵列乘法器,时间延迟分析:或门延时串行时序,是关键时间路径转换n+1位带符号机器码的时间延迟为 t=(n-1)*T+4T其中(n-1)*T为或门延迟时间,4T为最高位与门和异或门的时延。与教材上有出入,3、带符号的阵列乘法器(间接法),带符号的阵列乘法器既适用于原码乘法也适用于补码乘法A、B均为原码时:算前求补和算后求补禁用,即不求补A、B均为补码时:算前求补和算后求补有效,需要求补两者都是符号位单独运算后者耗时约增加一倍,3、带符号的阵列乘法器(间接法),2023/9/15,30,例20 设x=+15,y=-13,用带求补器的原码阵列乘法器求出乘积xy=?解:x原=01111,y原=11101,|x|=1111,|y|=1101符号位运算:01=11 1 1 11 1 0 11 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1乘积符号为1,算后求补器输出11000011,xy原=111000011换算成二进制数真值是 xy=(-11000011)2=(-195)10,被乘数和乘数都是原码时:求补操作不执行,只将去掉符号的数值部分原样输出。,例21 设x=-15,y=-13,用带求补器的补码阵列乘法器求出乘积xy=?并用十进制数乘法进行验证。解:x补=10001,y补=10011,乘积符号位运算:11=0尾数部分算前求补器输出|x|=1111,|y|=11011 1 1 11 1 0 11 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1乘积符号为0,算后求补器输出11000011,xy补=011000011补码二进制数真值 xy=127126121120=(+195)10十进制数乘法验证 xy=(-15)(-13)=+195,被乘数和乘数都是补码时:去掉符号位,其余各位求反加1,即完成求补过程得到原码。,你可能好奇:,如果不转成原码直接进行补码乘法?设x=-15,y=-13x补=10001,y补=10011 0 0 0 1 0 0 1 1-0 0 0 1 0 0 0 1-0 0 0 0 1 1 出现错误!,即,要实现定点两机器数的乘法运算,需要先将其转换为原码,乘法运算结束后,再将其转换为补码,并附加符号位,得到乘积的补码形式,进而得到乘积原码与真值。这样的方案耗时约增加一倍,思考:一定要有这样的来回转换吗?即,一定要有算前对2求补和算后对2求补操作吗?,直接补码并行乘法(选学),1.补码与真值的转公式2.一般化的全加器形式3.直接补码阵列乘法器,需要将乘法阵列中的全加器进行升级,改为一般化全加器,使得被加数、加数和进位都可为负,就可实现直接补码并行乘法了!,