一种具有数据前送结构的浮点乘加单元的制作方法

文档序号:6614043阅读:251来源:国知局
专利名称:一种具有数据前送结构的浮点乘加单元的制作方法
技术领域
本发明涉及浮点运算单元设计,是一种用于实现高性能浮点运算的高速浮点乘加单元。
背景技术
文献数据表明,几乎50%的浮点乘法指令后面紧跟的指令为浮点加法或减法。因此,浮 点乘加融合操作A + BXC己经成为科学运算和多媒体应用中的一种基本操作。由于浮点乘加 融合操作在应用程序中如此频繁地出现,用浮点乘加融合单元(简化为MAF单元)来实现该 操作己经成为现代高性能商业处理器的一个很好的选择。这种实现方式主要有以下两个优点 (l)仅需要一次舍入,不是两次;(2)通过共享一些组成模块,可降低电路延迟和硬件开销。
乘加(MAF)指令需要3个操作数。例如,执行A+(BXC)操作,当把乘加指令中操作数 A置为0时执行的是乘法指令,把操作数B或C置为1时,执行的是加法指令。在已实现的 多数处理器中,浮点乘加运算一般通过以下步骤来实现(见图1):
首先对被乘数C做波茨编码,然后用进位保存压縮加法器(CSA)组成的压縮树实现BXC, 得到两个部分积。在进行乘法的同时,操作数A进行取反和对齐移位操作。操作数A和BXC 的符号可能相同,也可能相反。如果A和BXC的符号相反,将A和BXC做有效减法,需要 得到A的补码进行相加,A需要取反。否则如果A和BXC的符号相同做有效加法,A不需要 取反。下面不管是否需要进行取反操作,将通过取反器之后的A记为A,。
在IEEE-754标准中,单精度操作数的尾数是24比特,再加上2个额外的舍入位,A, v 比BXC的结果的最高位最多左移55位,或者比BXC结果的最高位最多右移106比特,即 移位范围在[-55, 106]之间。在浮点乘加的设计中为了使移位简单化,规一化A的移位方向 为向右移位。所以A^最初置于BXC左端55比特的位置,A,在对齐中右移位的位数是 56- (exp (A) — (exp (B)十exp (C) -1024),其中,exp (A) , exp (B)和exp (C)分别是操作数A , B和 C的指数。
把对齐移位后的Ainv、和BXC压縮后的部分积用压縮比为3 : 2的进位保存加法器(CSA)压縮,得到两个部分积,同时处理A求补时所需要的加1。利用2中压縮后得到的两个部分积进行前导零预测(LZA, leading zero anticipator), 得到加法结果的规格化左移的位数。同时判断最终结果的正负。在前导零预测和符合预测的同时做半加操作,并完成部分的加法运算。进行半加操作是 为了保证后面能正确地进行舍入。由于符号预测所需要的时间比半加操作多,可在此时间空 隙里完成最终加法的一部分。加法结果利用LZA预测的左移的位数进行规格化左移。若3中符号预测部件判断最终结 果为负,则选择2中压縮后得到的部分积的补数形式经第4步处理后的结果进行规格化移位。最终加法和舍入操作。图1所示的现有技术的不足连续两条指令存在数据相关时,流水线将被迫等待两个周期(三级流水实现时,n级流 水实现时将等待n-l个周期),而在实际应用中,数据相关又是一个非常普遍的现象。相对图l所示的现有技术,本发明设计实现了一种具有数据前送结构的浮点乘加单元。 与现有技术的不同在于,将流水线中间两级的结果提前馈送至第一级的输入处,加速了指令 流的执行效率,同时增加的硬件开销和延时都很小。发明内容本发明的目的在于设计一种高性能的全流水线的双精度高速的浮点乘加单元,对于发生 数据相关的指令进行加速,提高浮点指令流的执行效率。为实现上述目的,本发明提供了一种具有数据前送结构的浮点乘加单元。数据前送是指 在流水线实现的处理器中,如果前后两条指令发生数据相关,即后一条指令的原操作数采用 前一条指令的结果,则前一条指令的中间结果可以反馈到运算单元的输入,作为后一条指令 的操作数进行运算。本发明提供了一种双精度的浮点乘加运算单元,实现形式为A+BXC的乘加操作,其特征 在于,该设计的双精度浮点乘加运算单元由三级流水实现,且操作数A和B可以是上一指令 的中间结果,可由三部分构成A由55比特的Al、 A2和常数项C0N构成,B由55比特的Bl、 B2和一个常数项构成,A和B的常数项都可以是0或1,该浮点乘加单元含有第一级流水线由指数和符号处理单元(1)、第一个165比特移位对齐器(2)、按位取 反器(3)、第一个选通器(4)、以4为基的波茨编码器(5)、第一个3 : 2的进位保存加法器CSA组成的部分积压缩树(6)、第二个选通器(7)、 57比特的一次性移位器(8)和第二个3 : 2的CSA树(9)组成;其中,指数和符号处理单元(1)根据操作数A 、 B、 C的指数和符号计算是否为有效减sub, <formula>formula see original document page 12</formula>其中,sign—A、 sign —B、 sign —C分别是操作数A 、 B、 C的符号,根据IEEE 754标 准,双精度浮点数的符号为其最高位;④为异或操作; 计算A+BXC的临时符号sign—pl,<formula>formula see original document page 12</formula>,计算A+BXC的指数差exp_ABC,<formula>formula see original document page 12</formula>其中,exp—A、 exp—B和exp—C分别是操作数A 、 B和C的指数,根据IEEE 754标准, 双精度浮点数的符号指数为第2位到第12位;计算A+BXC的指数exp—pl,并确定A相对BXC移位对齐时的移位量mv, exp—pl和mv的计算方法如下<formula>formula see original document page 12</formula>第一个165比特移位对齐器(2)根据指数和符号处理单元(1)中得到的mv值,对Al、 A2、 C0N进行移位,55比特的CON为00…01,即由54比特的0和最低位上的1构成,Al和 A2的值分两种情况考虑当要执行的指令与上一条指令无数据相关时,或者虽发生了数据相关,但是上一条指令 的结果不被用来作为该条指令的加数时,55比特的Al的前53比特为输入的被加数的尾数, 后两比特为O,根据IEEE 754标准,双精度浮点数的尾数为其第13位到64位,其为规格化 数时在最高位补l,否则在最高位补零,非规格化数将作为O看待,A2为0;要执行的指令与上一条指令发生了数据相关,且上一条指令的结果被用来作为该条指令 的加数时,又分为两种情况-上一条指令为乘法指令,则A1、 A2分别为第一级流水线的输出sum—pl、 carry—pl的高 55比特,其中sum—pl、 carry—pl的为第二个3 : 2的CSA树(9)输出;上一条指令为加法指令或乘加指令,则A1、 A2分别为第二级流水线的输出sum一p2、 carry—p2的高55比特,其中sum—p2、 carry—p2为第二个165比特的移位器(16)的输出;Al、 A2、 CON移位后的输出分别记为align—Al、 align—A2、 align_C0N,第一个165比特 移位对齐器(2)完成的功能可用下面的公式表达 一爿l =□ wv ,a/Zg"—爿2 =爿2口 ,,a/Zg" —CCW = CCWD mv,其中口表示右移;按位取反器(3),如果A的符号位和BXC的符号位不同,即指数和符号处理单元(1) 的输出sub-l,对第一个165比特移位对齐器(2)的输出结果align—Al、align_A2和align—CON 的每比特都做取反操作(也就是按位取反),否则不做任何操作直接将aligr^Al、 align—A2 和alignJ]ON输出,以4为基的波茨编码器(5)的输出记为inv—Al、 inv一A2、 inv—CON;第一个选通器(4)根据控制信号ctrll决定是否将inv—C0N输出到第二个3 : 2的CSA 树(9)中,ctrll由是否发生数据相关,以及符号预测逻辑(14)的输出carry—llOLSBs决 定,当发生数据相关,且前一条指令的结果被作为后一条指令的加数,同时carry一110LSBs =1时,ctrll二l,此时第一个选通器(4)的输出为irw—CON,否则第一个选通器(4)的输 出为O;以4为基的波茨编码器(5)对C的尾数进行编码,然后将编码的结果分别与Bl、 B2 相乘得到54个部分积,这里C为输入的被乘数,根据IEEE 754标准,双精度浮点数的尾数为其第13位到64位,其为规格化数时在最高位补1,否则在最高位补零,非规格化数将作 为0看待;Bl和B2的值分两种情况考虑当要执行的指令与上一条指令无数据相关时,或者虽发生了数据相关,但是上一条指令 的结果不被用来作为该条指令的乘数时,55比特的Bl的前53比特为输入的被乘数的尾数, 后两比特为0,根据IEEE 754标准,双精度浮点数的尾数为其第13位到64位,其为规格化 数时在最高位补l,否则在最高位补零,非规格化数将作为0看待,B2为0;要执行的指令与上一条指令发生了数据相关,且上一条指令的结果被用来作为该条指令 的乘数时,又分为两种情况上一条指令为乘法指令,则B1、 B2分别为第一级流水线的输出SUm_pl、 carry—pl的高 55比特,其中sum—pl、 carry_pl的为第二个3 : 2的CSA树(9)输出;上一条指令为加法指令或乘加指令,则B1、 B2分别为第二级流水线的输出sum—p2、 carry—p2的高55比特,其中sum—p2、 carry—p2为第二个165比特的移位器(16)的输出;这54个部分积的被送入第二个3 : 2的进位保存CSA压缩树(6)中,3 : 2 CSA树 即由3 : 2 CSA组成的树,3个输入经过一个3: 2CSA将被压縮成2个输出,若设输入为x、 y、 z,输出为S、 C,则压縮过程可表示如下C-((x&力l(x&z)IO&z))《1,这里\ &和|分别表示按位异或、按位与和按位或操作, <〈表示向左移位;将9级3 : 2 CSA级联,形成3 : 2 CSA树,就能将54个部分积压縮为2个,分别记为 s咖一BC、 carry一BC;第二个选通器(7)根据控制性号ctrl2决定是否将C输出到57比特的一次性移位器(8) 中,ctrl2由是否发生数据相关,数据相关的类型,以及14的输出carry—110LSBs决定,当 发生数据相关,且前一条指令的结果被作为后一条指令的乘数,同时carry一110LSBs二l时, ctrl2 = l,此时第二个选通器(7)的输出为C后面补上55比特的0后的结果,否则第二个 选通器(7)的输出为0;sum_ BC、 carry— BC和第二个选通器(7)的输出被送到57比特的一次性移位器(8) 中,由指数和符号处理单元(1)的输出exp—ABC决定是否对它们分别进行一次57位的移位exp—ABC〈52时,SUm_ BC、 carry— BC和第二个选通器(7)的输出将分别被左移57位,否则均不被移位,直接输出;第二个3 : 2的CSA树(9)对inv—Al、 inv—A2、 4的输出、57比特的一次性移位器(8) 的3个输出做3: 2压縮,压縮过程与第一个3 : 2的进位保存加法器CSA组成的部分积压 縮树(6)中相似,不同的在于,当指数和符号处理单元(1)中判断出sub二l时,在两个进 位保存加法器进位字节的最低位置入l,第一个选通器(4)的控制信号ctrll等于l时,还 要在第三个进位保存加法器进位字节的最低位置入1,最终6个输入被压縮为2个输出,记 为sum—pl、 carry—pl;第二级流水线165比特的前导零预测单元(10)、第一个165比特的半加器(11)、第 二个165比特的半加器(12)和第三个165比特的半加器(13)、符号预测逻辑(14)、选择 器(15)、第二个165比特的移位器(16)和与门(17)组成;其中,165比特的前导零预测单元(10),判断第二个3 : 2的CSA树(9)的输出结果sum—pl 和carry—pl相加时,前导零的数目,前导零数目即从最高位开始,到第一个非0位之间的位 数,若sum—pl和carry—pl相加结果为负,则这里判断的将是前导一的数目,即从最高位到 第一个非l位之间的位数,具体的判断方法为通过检查某一位及其左右相邻的位确定哪一位可能是最高位,设一预测位fi, 71 = swm _ / 1十can17 _ pl, G = — pl & ca 77 _ _pl, Z 二 swm — pl & c" 77 _ / 1/; = 7;., (g,+ z,)+5-, (z,+ ) , / > o其中sum—pl、 carry—pl为第二个3 : 2的CSA树(9)的两个输出,—表示按位取反, 下标i表示第i位,若f^l,而f尸0(j^, 1…i-l),则前导零个数LZN为i; 设类拥與输入为x、 y,输出为S、 C,则其原理可表示为c二o&力《i,第一个165比特的半加器(11)将第二个3:2的CSA树(9)输出的sum—pl和carry—pl sumHAp',s,[l carryHApos;将s咖—pl和carry—pl按位取反后作为半加器第二个165比特的半加器(12)的输入, 其输出为sum他,.nv禾口 carryIIAi ,并将carry貼而的最低位置为1;将s咖,n,和carryH—作为第三个165比特的半加器(13)的输入,其输出为sum,^和 carryHA。。m,并将carryi。m的最低位置为1,这样^""W哪+ ,"^")"'就相当于.连续两条指令发生数据相关时,若前一条指令为加法或乘加指令,流水线将需要停滞等 待一个时钟周期,在这个停滞等待的时钟周期里,符号预测模块(14)的输入为第二个165 比特的移位器(16)的输出sum—p2、 carry—p2,否则符号预测模块(14)的输入为sum—pl、 carry—pl,符号预测模块(14)预测若将两个输入相加,其结果的正负,预测方法为判断两 输入相加,最高位是否有进位产生,若有进位产生,则相加结果为负,将输出信号complement 赋为1,否则^^7^/^"纟=();同时符号预测模块(14)还判断将两个输入的低110比特相加,有无进位产生,并根据判断结果产生另一输出carry一110LSBs:两个输入的低110比特相加,有进位产生时carry—110LSBs二l,否则carry—110LSBs = 0;选择器(15)根据符号预测的结果,从 和 中选择一对作为输出,其输出记为sumHA、 carry,com/ /eweW = 0时,sumHA =sumHAp。s , carryHA =carryHApos'c0w;7/emW = 1时,sum^ =sumHAcom , carry^ =carryHAcom ;第二个165比特的移位器(16)根据前导零预测的结果,对选择器(15)的输出向左进 行移位,移位量为LZN,移位后的输出记为sum—p2和carry—p2;与门(17)对符号预测模块(14)的输出complement和指数和符号处理单元(1)的输 出sign—pl进行异或操作,得到A+BXC的符号;第三级流水线由指数计算单元(18)、最终加/舍入单元(19)组成;其中,指数计算单元(18),根据指数和符号处理单元(1)中得到的exp一pl、 165比特的前导 零预测单元(10)中得到的LZN和最终加/舍入单元(19)中是否发生l位左移计算A+BXC 的指数,若最终加/舍入单元(19)中不发生l位左移,则A+BXC的指数为exp — p1-£ZW, 否则需要进行l比特的修正,最终A+BXC的指数将表示为e;c;7 —pl-丄ZiV-l;在最终加/舍入单元(19)中,首先将第二个165比特的移位器(16)的输出sum—p2和 carry—p2相加,结果记为ABC—added,JSC —— a必efif = — />2 + ccwr少—,然后根据ABC—added、和舍入模式进行舍入,有4种舍入模式就近舍入(RN),向正无 穷舍入(RP),向负无穷舍入(脂),向零舍入(RZ),这四种舍入模式能减少到三个RN、 RI、 RZ;<formula>formula see original document page 17</formula>这里「一和b」分别表示向上取整和向下取整;对于负数,舍入模式RP可等效为RI,脂可等效为RN;对于正数,舍入模式RP可等效 为RN, RM可等效为RI;首先计算粘滞位st,若ABC—added的最高位为1 ,则w =| JSC —a必W[54:165],否则 W =| —a舰牟5:165];然后根据st、 ABC—added和舍入模式是RI、 RN还是RZ,计算舍入结果的两个临时值, 分另U记为rounding—result—tmpl禾口 rounding—result—tmp2, rounding—result—tmpl的i十算 方法如下若,,若st^,或ABC—added [53]=1rounding—result—tmpl=ABC—added
+1; 否则rounding_result_tmpl=ABC—added
; 若RI二0,且RN:l,若ABC—added[53]=0,rounding—result_tmpl=ABC—added
; 若ABC—added [53] =1, _@_st=l,rounding—result—tmpl=ABC—added
+1; 若ABC—added[53]=1,且ABC—added[52]=1,rounding—result—tmpl二ABC一added
+1; 否则rounding—result—tmpl=ABC—added
; 若RI二0,且RN:O,rounding_result—tmpl=ABC—added
; rounding—result—tmp2的计算方法如下若RI:1,若st:l,或ABC—added [54] =1rounding—result—tmp2=ABC_added[l:53]+1; 否则rounding—result—tmp2=ABC_added[l:53]; 若RPO, iRN=l,若ABC—added[54]=0,rounding—result—tmp2=ABC—added[1:53]; 若ABC—added[54]=1,且st=l,rounding—result_tmp2=ABC—added[1:53]+l; 若ABC—added[54]=1,且ABC—added[53]=1,rounding—result—tmp2=ABC—added[1:53]+1; 否则rounding—result—tmp2=ABC—added[l:53]; 若RI二0,且RN二l,rounding—result—tmp2=ABC—added[l:53]; 最后根据ABC—added的最高位和rounding—result—tmpl的最高位从 rounding—result一tmpl禾口 rounding_result—trap2中选取一个作为最终A+BXC的尾数,并决 定指数计算单元(18)中的指数是否需要l比特的修正若rounding_result_tmpl的最高位为1且ABC—added的最高位为0,或者ABC—added的 最高位为1时,选取rounding—resultjmpl作为最终结果,指数计算单元(18)中不需要1 比特的修正,否则选取rounding—result—t即2作为最终结果,指数计算单元(18)中需要1 比特的修正。本发明采用三级流水线实现,用VerilogHDL实现,通过验证后用0. 18微米标准单元库 进行电路综合。对综合结果进行时序分析,结果显示最大延时为3.47纳秒。用SPEC 2000评 估显示,采用本发明后,相比普通的乘加单元,能够获得约25%的性能提升。


图1是参考文献1 : Floating-Point Multiply-Add-Fused with Reduced Latency中介绍的一种已有的乘加单元的结构框图;图2是本发明的三级流水线实现的解决了数据相关的双精度浮点乘加单元的结构框图; 图3a是ex;^S + e;^ —C-exp —J < 52时,A相对BXC移位对齐后在数据通道中摆放的示意图;图3a是ex户—S + ex;7 —C-exp —^ 2 52时,A相对B X C移位对齐后在数据通道中摆放的 示意图;图4是乘法压缩树具体实现的框图,这一压縮树由4个165比特的CSA组成。
具体实施方式
下面结合附图和具体实施方式
对本发明作进一步的详细描述。本发明采用三级流水线实现,用VerilogHDL实现,通过验证后用0. 18微米标准单元库 进行电路综合。本发明的单精度并行浮点单元按时序划分为了三个流水节拍,下面参照图2,对整个工 作过程进行说明。在本实施例中,仍以A+B X C表示一个乘加操作。第一级流水线A的移位对齐和BXC的波斯编码、部分积压縮,并经3: 2CSA树压縮 后输出。这里的A和B都可能来自上一条指令中间结果的回送,也就是说,它们都可能为55比特 的进位保存表示的中间结果,组成A的两部分用A1、 A2表示,组成B的两部分用B1、 B2表示。Al和A2的值分两种情况考虑当要执行的指令与上一条指令无数据相关时,或者虽发生了数据相关,但是上一条指令 的结果不被用来作为该条指令的加数时,55比特的Al的前53比特为输入的被加数的尾数, 后两比特为0,根据IEEE 754标准,双精度浮点数的尾数为其第13位到64位,其为规格化 数时在最高位补l,否则在最高位补零,本发明针对的是规格化数,非规格化数将作为o看 待,A2为0;要执行的指令与上一条指令发生了数据相关,且上一条指令的结果被用来作为该条指令 的加数时,又分为两种情况上一条指令为乘法指令,则A1、 A2分别为第一级流水线的输出sum—pl、 carry—pi (9的 输出)的高55比特;上一条指令为加法指令或乘加指令,贝ijAl、 A2分别为第二级流水线的输出sum—p2、 carry—p2 (16的输出)的高55比特; Bl和B2的值也分两种情况考虑当要执行的指令与上一条指令无数据相关时,或者虽发生了数据相关,数据相关的类型, 但是上一条指令的结果不被用来作为该条指令的乘数时,55比特的Bl的前53比特为输入的 被乘数的尾数,后两比特为0,根据IEEE 754标准,双精度浮点数的尾数为其第13位到64 位,其为规格化数时在最高位补l,否则在最高位补零,本发明针对的是规格化数,非规格 化数将作为0看待,B2为0。要执行的指令与上一条指令发生了数据相关,且上一条指令的结果被用来作为该条指令 的乘数时,又分为两种情况-上一条指令为乘法指令,则B1、 B2分别为第一级流水线的输出sum_pl、 carry—pl (9的 输出)的高55比特。上一条指令为加法指令或乘加指令,则B1、 B2分别为第二级流水线的输出sum—p2、 carry—p2 (16的输出)的高55比特。基4的波茨编码器5对C的尾数进行编码,然后将编码的结果与Bl、 B2相乘得到54 个部分积,编码后的54个部分积的被送入3 : 2的进位保存(CSA)压縮树6中,CSA压 縮树的构造分别在图4中做了详细的介绍,图4中每一个单元模块的输入x、 y、 z为3个要 被压縮的165比特的数,输出S、 C分别为压缩后的165比特的和字节和进位字节,其逻辑关 系为C = ((x &少)I (x & z) I (j; & z))《1,这里~、 &和|分别表示按位异或、按位与和按位或操作,《表示向右移位。 图4是一个将6个输入压縮为2个的3: 2CSA树的结构图,其输入in广in6为6个165比特的数,输出为压縮后得到的和、进位字节。整个压縮树由4个165比特的CSA构成,将6个输入压縮为两个,需要3级的CSA树。这里C为输入的被乘数,根据IEEE 754标准,双精度浮点数的尾数为其第13位到64位,其为规格化数时在最高位补l,否则在最高位补零,本发明针对的是规格化数,非规格化数 将作为0看待。当乘数B来自前一条指令的中间结果第一级的输出(S,_pl、 carry—pl)或第二级的 输出(sum_p2、 carry—p2)时,Bl、 B2仅取了中间结果的高55比特,中间结果的低110比 特相加可能有进位产生,这一进位是要考虑的,本发明中考虑这一进位的方法是当两条指 令发生数据相关且前一指令的结果用做后一指令的一个乘数,当后一指令利用前一指令的中 间结果进行计算时,若前一指令中间结果的低110比特有进位产生,则将7的控制信号ctrl2 置高,将C并入CSA树6的输出端,实现(Bl+B2+1) XC。A的移位对齐、取反与BXC的波斯编码、部分积压縮并行执行。若A的符号与BXC的 符号不同,则需要对其求补。求一个数的补数的方法为取反后加一。求补所需的加l可利用 3: 2 CSA进位字节最低位上的空位来实现。在普通的乘加单元(这里以A+BXC表示一个普通的乘加操作)中,对A移位对齐的方法 通常为将其从BXC的最高位左侧26比特的位置开始存放,然后根据指数差向右进行移位。 在A的最初存放位置和BXC的最高位之间有两个空位,目的是在A远大于BXC时确保能够 正确的舍入。在本发明中,加数由两部分构成,若两部分同时被移出数据通道,移出数据通 道的部分可能产生进位,这一进位的计算会增大延时,且这种情况下粘滞位的计算也很复杂, 因此必须采用新的移位对齐策略,本发明中根据A、 B、 C的指数差,分两种情况,分别采用 不同的移位对齐策略,这五种情况的划分方法如下ex/ — 5 + ex/> — C _ — ^ < 52exp — 5 + ex/ — C — ex; — ^4 2 52其中,exp_A、 exp_B和exp一C分别是操作数A 、 B和C的指数,根据IEEE 754标准, 双精度浮点数的指数为其第2位到第12位。各种情况下的数据通道,以及A移位对齐后相对于BXC在数据通道中的摆放情况如图3 所示。A由Al、 A2两部分构成,还可能需要在最低位上加1 (这一加1由常数CON表示),但 是它们指数相同,在数据通道中移位的情况是一样的,所以在图3中都用A示意。exp —S + exp — C-ex; —^ < 52时,数据通道的构成如图3 (a)所示,与普通的MAF — 样,将A从165比特的数据通道的最高位开始摆放,BXC的置于165比特数据通道的低108 位上。若A的指数比BXC大57甚至更多时,Al、 A2和C0N都不需移位,否则根据指数差与BXC对A1、 A2和C0N进行移位对齐;exp —+ —C-exp —X 2 52时,数据通道的构成如图3 (b)所示,将BXC的置于165 比特数据通道的高108位上,然后根据指数差与BXC对Al、 A2和CON进行移位对齐,当Al、 A2和C0N的移位量大于110时,它们将会有部分别移出数据通道,此时Al、 A2和C0N在B XC的最低位的右侧,可将A1、 A2和C0N放置在数据通道的最低55比特上,而不继续移位。总结上述2中情况可发现Al、 A2和C0N永远不会被移出数据通道,所以没有粘滞位产生,且被加数的求补将被大 大简化《g"_^^wg" —C (此时sub =1)时在3: 2CSA树的两个进位保存压縮器的 进位字节的最低位上加1即可,这里e表示异或,sign—A、 sign 一B和sign 一C分别是操作 数A 、 B和C的符号位,根据IEEE 754标准,双精度浮点数的指数为其最高位。当ctrl-l时,还要增加一个求补所需的加1,在9的另一个进位保存压缩器的进位字节的最低位上加 1即可。当加数A来自前一条指令的中间结果第一级的输出(sum—pl、 carry—pl)或第二级的 输出(sum_p2、 carry—p2)时,Al、 A2仅取了中间结果的高55比特,中间结果的低110比 特相加可能有进位产生,这一进位是要考虑的,本发明中考虑这一进位的方法是当两条指 令发生数据相关且前一指令的结果用做后一指令的加数,当后一指令利用前一指令的中间结 果进行计算时,若前一指令中间结果的低110比特有进位产生,则将4的控制信号ctrll置 高,将与Al、 A2最低位对齐的1同Al、 A2 —样移位mv并由sub决定是否取反后并入到3的 输出端。第二级流水线A、.B移位对齐后的结果和CXD的部分积压縮后的结果经3: 2CSA树压 縮后的结果进行进行前导零预测、符号预测、半加运算以及规格化移位。将9的输出分别记为sum一pl和carry—pl,在第二级流水线中将sum—pl和carry_pl输 入到前导零预测单元10中,计算前导零个数(记为LZN)。如果下面直接对sum—pl和carry—pl进行规格化移位,再相加,若相加结果为负,还需 要对其求补,增加了延时。避免这一延时的办法是在前导零预测的同时判断sum—pl和 carry_pl的符号,若sum—pl和carry—pK0,则选择sum—pl和carry_pl的补数表示进行后 续的处理,如规格化移位、最终加和舍入等。这里求sum一pl和carry—pl的补数时所需的加 1是利用半加器15和16的进位字节的最低位空位实现的。当sum—pl和carry一pl的高55位作为中间结果回送时,还需计算低110位的进位,可利 用符号预测单元14来完成,计算结果记为carry—110LSBs。连续两条指令发生数据相关时,若前一条指令为加法或乘加指令,回送sum一p2、carry一p2 的高55位的同时,还需回送sum—p2、 carry—p2的低110位的进位,考虑到这种情况下流水 线将需要停滞等待一个时钟周期,在这个停滞等待的时钟周期里,可利用符号预测模块14来 计算sum_p2、 carry—p2低110位的进位。165比特的移位器16根据10中计算出的LZN对选择器15的输出进行向右移位,其输出 结果记为sum—p2、 carry—p2。第三级流水线利用第二级流水线输出的sum—p2、 carry—p2完成最终加法和舍入。在19中,首先将sum一p2和carry—p2相加,结果记为ABC—added,然后根据舍入模式分 别将第54位和第55位作为舍入位时的结果,分别记为rounding—result—tmpl和 rounding一result—tmp2,若rounding—result一tmpl的最高位为1且ABC—added的最高位为0, 或者ABC一added的最高位为1时,选取rounding—result—tmpl作为最终结果,否则选取 rounding—result—tmp2作为最终结果。18中根据1中计算出的数据通道的临时指数和13中计算出的规格化移位量计算A+BXC 的指数,然后根据19的运算结果进行修正若rounding—result—t卿2被选为最终结果,将 指数减l。本发明中仅回送中间结果的高55比特,但是精度并不低于普通的MAF中,先舍入成53 比特的尾数,再用于下一条指令的计算,分析如下对于双精度浮点数,尾数为53位,浮点运算中第54位被称为监督位(guard bit), 54 位之后的位被用来产生粘滞位,其属性只有两个全为0和不全为0,若采用普通的四舍五 入,粘滞位对结果是不产生影响的,在IEEE 754所规定的几种舍入方式里,除截断舍入,粘 滞位都将影响最终结果,但是对结果精确度的影响很小。例如guard bit = 0,粘滞位为l,向无穷舍入时,结果将为前53bits加1,但真实结 果更接近前53bits不加1的结果。所以可以仅回送guard bit及其更高的位。又因为中间结果可能有一个前导零,所以应 回送中间结果的前55bits,后面的位上可能有进位产生,该进位需要被考虑,本发明中很好 的处理了该进位。
权利要求
1、一种具有数据前送结果的浮点乘加单元,实现形式为A+B×C的乘加操作,其特征在于,该设计的双精度浮点乘加运算单元由三级流水实现,且操作数A和B可以是上一指令的中间结果,可由三部分构成A由55比特的A1、A2和常数项CON构成,B由55比特的B1、B2和一个常数项构成,A和B的常数项都可以是0或1,该浮点乘加单元含有第一级流水线由指数和符号处理单元(1)、第一个165比特移位对齐器(2)、按位取反器(3)、第一个选通器(4)、以4为基的波茨编码器(5)、第一个3:2的进位保存加法器CSA组成的部分积压缩树(6)、第二个选通器(7)、57比特的一次性移位器(8)和第二个3:2的CSA树(9)组成;其中,指数和符号处理单元(1)根据操作数A、B、C的指数和符号计算是否为有效减sub,sub=sign_Asign_Bsign_C,其中,sign_A、sign_B、sign_C分别是操作数A、B、C的符号,根据IEEE 754标准,双精度浮点数的符号为其最高位;为异或操作;计算A+B×C的临时符号sign_p1,sign_p1=sign_Bsign_C,计算A+B×C的指数差exp_ABC,exp_ABC=exp_B+exp_C-exp_A其中,exp_A、exp_B和exp_C分别是操作数A、B和C的指数,根据IEEE 754标准,双精度浮点数的符号指数为第2位到第12位;计算A+B×C的指数exp_p1,并确定A相对B×C移位对齐时的移位量mv,exp_p1和mv的计算方法如下exp_ABC≤-58时,exp_p1=exp_A,mv=0,52>exp_ABC>-58时,exp_p1=exp_B+exp_C+57,mv=exp_ABC+57,109>exp_ABC≥52时,exp_p1=exp_B+exp_C+1,mv=exp_ABC+1,exp_ABC≥109时,exp_p1=exp_B+exp_C+1,mv=110,第一个165比特移位对齐器(2)根据指数和符号处理单元(1)中得到的mv值,对A1、A2、CON进行移位,55比特的CON为00…01,即由54比特的0和最低位上的1构成,A1和A2的值分两种情况考虑(1)当要执行的指令与上一条指令无数据相关时,或者虽发生了数据相关,但是上一条指令的结果不被用来作为该条指令的加数时,55比特的A1的前53比特为输入的被加数的尾数,后两比特为0,根据IEEE 754标准,双精度浮点数的尾数为其第13位到64位,其为规格化数时在最高位补1,否则在最高位补零,非规格化数将作为0看待,A2为0;(2)要执行的指令与上一条指令发生了数据相关,且上一条指令的结果被用来作为该条指令的加数时,又分为两种情况1)上一条指令为乘法指令,则A1、A2分别为第一级流水线的输出sum_p1、carry_p1的高55比特,其中sum_p1、carry_p1的为第二个3:2的CSA树(9)输出;2)上一条指令为加法指令或乘加指令,则A1、A2分别为第二级流水线的输出sum_p2、carry_p2的高55比特,其中sum_p2、carry_p2为第二个165比特的移位器(16)的输出;A1、A2、CON移位后的输出分别记为align_A1、align_A2、align_CON,第一个165比特移位对齐器(2)完成的功能可用下面的公式表达align_A1=A1□mv,align_A2=A2□mv,align_CON=CON□mv,其中□表示右移;按位取反器(3),如果A的符号位和B×C的符号位不同,即指数和符号处理单元(1)的输出sub=1,对第一个165比特移位对齐器(2)的输出结果align_A1、align_A2和align_CON的每比特都做取反操作(也就是按位取反),否则不做任何操作直接将align_A1、align_A2和align_CON输出,以4为基的波茨编码器(5)的输出记为inv_A1、inv_A2、inv_CON;第一个选通器(4)根据控制信号ctrl1决定是否将inv_CON输出到第二个3:2的CSA树(9)中,ctrl1由是否发生数据相关,以及符号预测逻辑(14)的输出carry_110LSBs决定,当发生数据相关,且前一条指令的结果被作为后一条指令的加数,同时carry_110LSBs=1时,ctrl1=1,此时第一个选通器(4)的输出为inv_CON,否则第一个选通器(4)的输出为0;以4为基的波茨编码器(5)对C的尾数进行编码,然后将编码的结果分别与B1、B2相乘得到54个部分积,这里C为输入的被乘数,根据IEEE 754标准,双精度浮点数的尾数为其第13位到64位,其为规格化数时在最高位补1,否则在最高位补零,非规格化数将作为0看待;B1和B2的值分两种情况考虑(1)当要执行的指令与上一条指令无数据相关时,或者虽发生了数据相关,但是上一条指令的结果不被用来作为该条指令的乘数时,55比特的B1的前53比特为输入的被乘数的尾数,后两比特为0,根据IEEE 754标准,双精度浮点数的尾数为其第13位到64位,其为规格化数时在最高位补1,否则在最高位补零,非规格化数将作为0看待,B2为0;(2)要执行的指令与上一条指令发生了数据相关,且上一条指令的结果被用来作为该条指令的乘数时,又分为两种情况1)上一条指令为乘法指令,则B1、B2分别为第一级流水线的输出sum_p1、carry_p1的高55比特,其中sum_p1、carry_p1的为第二个3:2的CSA树(9)输出;2)上一条指令为加法指令或乘加指令,则B1、B2分别为第二级流水线的输出sum_p2、carry_p2的高55比特,其中sum_p2、carry_p2为第二个165比特的移位器(16)的输出;这54个部分积的被送入第二个3:2的进位保存CSA压缩树(6)中,3:2CSA树即由3:2CSA组成的树,3个输入经过一个3:2CSA将被压缩成2个输出,若设输入为x、y、z,输出为S、C,则压缩过程可表示如下S=x^y^z,C=((x&y)|(x&z)|(y&z))<<1,这里^、&和|分别表示按位异或、按位与和按位或操作,<<表示向左移位;将9级3:2 CSA级联,形成3:2 CSA树,就能将54个部分积压缩为2个,分别记为sum_BC、carry_BC;第二个选通器(7)根据控制性号ctrl2决定是否将C输出到57比特的一次性移位器(8)中,ctrl2由是否发生数据相关,数据相关的类型,以及14的输出carry_110LSBs决定,当发生数据相关,且前一条指令的结果被作为后一条指令的乘数,同时carry_110LSBs=1时,ctrl2=1,此时第二个选通器(7)的输出为C后面补上55比特的0后的结果,否则第二个选通器(7)的输出为0;sum_BC、carry_BC和第二个选通器(7)的输出被送到57比特的一次性移位器(8)中,由指数和符号处理单元(1)的输出exp_ABC决定是否对它们分别进行一次57位的移位exp_ABC<52时,sum_BC、carry_BC和第二个选通器(7)的输出将分别被左移57位,否则均不被移位,直接输出;第二个3:2的CSA树(9)对inv_A1、inv_A2、4的输出、57比特的一次性移位器(8)的3个输出做3:2压缩,压缩过程与第一个3:2的进位保存加法器CSA组成的部分积压缩树(6)中相似,不同的在于,当指数和符号处理单元(1)中判断出sub=1时,在两个进位保存加法器进位字节的最低位置入1,第一个选通器(4)的控制信号ctrl1等于1时,还要在第三个进位保存加法器进位字节的最低位置入1,最终6个输入被压缩为2个输出,记为sum_p1、carry_p1;第二级流水线165比特的前导零预测单元(10)、第一个165比特的半加器(11)、第二个165比特的半加器(12)和第三个165比特的半加器(13)、符号预测逻辑(14)、选择器(15)、第二个165比特的移位器(16)和与门(17)组成;其中,165比特的前导零预测单元(10),判断第二个3:2的CSA树(9)的输出结果sum_p1和carry_p1相加时,前导零的数目,前导零数目即从最高位开始,到第一个非0位之间的位数,若sum_p1和carry_p1相加结果为负,则这里判断的将是前导一的数目,即从最高位到第一个非1位之间的位数,具体的判断方法为通过检查某一位及其左右相邻的位确定哪一位可能是最高位,设一预测位fi,T=sum_p1carry_p1,G=sum_p1&amp;carry_p1,
全文摘要
具有数据前送结构的浮点乘加单元用于浮点运算,实现形式为A+B×C的乘加操作,分三级流水线实现在第一级流水线中,对A进行移位对齐,同时完成B×C的波斯编码、部分积压缩,并将A移位对齐后的结果和B×C的部分积压缩后的结果经3∶2进位保存加法树压缩;在第二级流水线中,对前一级流水线的输出进行前导零预测、符号预测、半加运算以及规格化移位;在第三级流水线中,完成最终加法和舍入,计算其指数。这里A和B都可能是前一条指令的中间结果。本发明的优点在于,相邻指令发生数据相关时,能够不等待或仅等待一个周期,提高了指令流的执行效率。
文档编号G06F7/48GK101221490SQ20071017997
公开日2008年7月16日 申请日期2007年12月20日 优先权日2007年12月20日
发明者李兆麟, 李恭琼, 邬健元 申请人:清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1