一种浮点乘加融合单元的五级流水线结构的制作方法

文档序号:6608782阅读:257来源:国知局
专利名称:一种浮点乘加融合单元的五级流水线结构的制作方法
技术领域
本发明涉及浮点运算单元设计,是一种用于实现高性能浮点运算的高速浮点乘加融合单元。

背景技术
文献数据表明,几乎50%的浮点乘法指令后面紧跟的指令为浮点加法或减法。因此,浮点乘加融合操作A+B×C已经成为科学运算和多媒体应用中的一种基本操作。由于浮点乘加融合操作在应用程序中如此频繁地出现,用浮点乘加融合单元(简化为MAF单元)来实现该操作已经成为现代高性能商业处理器的一个很好的选择。这种实现方式主要有以下两个优点(1)仅需要一次舍入,不是两次;(2)通过共享一些组成模块,可降低电路延迟和硬件开销。
乘加(MAF)指令需要3个操作数。例如,执行A+(B×C)操作,当把乘加指令中操作数A置为0时执行的是乘法指令,把操作数B或C置为1时,执行的是加法指令。在已实现的多数处理器中,浮点乘加运算一般通过以下步骤来实现(相关内容请见参考文献1Floating-Point Multiply-Add-Fused with Reduced Latency,实现过程的框图见图1) 1.首先对被乘数C做波茨编码,然后用进位保存压缩加法器(CSA)组成的压缩树实现B×C,得到两个部分积。在进行乘法的同时,操作数A进行取反和对齐移位操作。操作数A和B×C的符号可能相同,也可能相反。如果A和B×C的符号相反,将A和B×C做有效减法,需要得到A的补码进行相加,A需要取反。否则如果A和B×C的符号相同做有效加法,A不需要取反。下面不管是否需要进行取反操作,将通过取反器之后的A记为Ainv。
在IEEE-754标准中,单精度操作数的尾数是24比特,再加上2个额外的舍入位,Ainv比B×C的结果的最高位最多左移26位,或者比B×C结果的最高位最多右移48比特,即移位范围在[-26,48]之间。在浮点乘加的设计中为了使移位简单化,规一化A的移位方向为向右移位。所以Ainv初始是在B×C左移26比特的初始位置,Ainv在对齐中右移位的位数是27-(exp(A)-(exp(B)+exp(C)-127),其中,exp(A),exp(B)和exp(C)分别是操作数A,B和C的指数。
2.把对齐移位后的Ainv、和B×C压缩后的部分积用压缩比为3∶2的进位保存加法器(CSA)压缩,得到两个部分积,同时处理A求补时所需要的加1。
3.利用2中压缩后得到的部分积进行前导零预测(LZA,leading zero anticipator)得到加法结果的规格化左移的位数。同时判断最终结果的正负。
4.在前导零预测和符合预测的同时做半加操作,并完成部分的加法运算。进行半加操作是为了保证后面能正确进行舍入。由于符号预测所需要的时间比半加操作多,可在此时间空隙里完成最终加法的一部分。
5.加法结果利用LZA预测的左移的位数进行规格化左移。若3符号预测部件判断最终结果为负,则选择2中压缩后得到的部分积的补数形式经4处理后的结果进行规格化移位。
6.最终加法和舍入操作。
图1所示的现有技术的不足如下 (1)未处理对前导零预测逻辑可能引入的一位左移进行处理 (2)乘法结果采用两个48位部分积表示,会引起一位溢出错误, (3)加数移位对齐和规格化移位时需要移入‘0…0’或‘1…1’。加数为负或者最终结果的符号被检测到为负时需要移入‘1…1’,用来在最低位加一求补时传播进位。其选择逻辑在关键路径上,增加了延时。


发明内容
本发明的目的在于设计一种高性能的全流水线的单精度高速浮点乘加融合单元,同时保证较少的硬件开销。
本发明的另一个目的是纠正已有运算单元细节处不完善而造成精度损失之处,提供一个高精度的浮点乘加单元。
为实现上述目的,本发明提供了一种五级流水实现的单精度浮点乘加运算单元,实现形式为A+(B×C)的乘加操作,其吞吐量为每周期一条指令,如图2所示,具体结构如下 第一级流水线由指数处理单元1、以4为基的波茨编码器3、3∶2的进位保存加法器(CSA)组成的部分积压缩树4的一部分和符号处理单元2组成;其中, 指数处理单元1根据操作数A的指数,B的指数和C的指数计算其指数差d d=exp(A)-(exp(B)+exp(C)-127), 其中,exp(A),exp(B)和exp(C)分别是操作数A,B和C的指数,根据IEEE 754标准,单精度浮点数的指数为其第2位到第8位,并计算A与B×C对齐时所需的移位量mv, mv=74-d, 确定数据通路的临时指数Exp_temp,其计算方法为 若mv<0,则Exp_temp=exp(A);否则Exp_temp=exp(B)+exp(C)-127+27;这里加27是因为B×C的结果在数据通道中靠右侧摆放,如图3(a)所示; 符号处理单元2根据操作数A的符号,B的符号和C的符号计算临时符号、是否为有效减(sub),根据IEEE 754标准,单精度浮点数的符号位为其最高位,临时符号由B×C的符号位表示。A的符号位与B×C的符号位不同时,sub=1,否则sub=0; 基4的波茨编码器3对C的尾数进行编码,然后将编码的结果与B的尾数相乘得到13个部分积,根据IEEE 754标准,单精度浮点数的尾数为其第9位到第32位,编码后的13个部分积的被送入3∶2的进位保存(CSA)压缩树4中,单个单字节CSA单元和CSA压缩树的构造分别在图4和图5中做了详细的介绍,其中图5的输入x、y、z为3个要被压缩的字节,输出S、C分别为压缩后的和字节和进位字节,图6的输入in1~in13为波茨编码后得到的13个部分积,输出为压缩后得到的和、进位,整个压缩树由11个49比特的CSA构成,其中每个CSA由49个图5中的单元结构构成,将13个部分积压缩为两个,需要5级的CSA树,为平衡各级流水线的延时,这里将前两级CSA树放在第一级流水线中,而后面的三级CSA树留到第二级流水线中执行,最终压缩的结果需要被处理后才能做为乘法结果,具体处理方法为部分积压缩树每一压缩的结果都保留49位,最后一级压缩后的两个输出的最高位都为1时,将这两个1改为0,否则若两个最高位1个是1,另一个是0,而两个次高位均为1时,将这最高位的1个1和次高位的2个1都改为0,其与情况不需做修改; 第二级流水线由指数状态划分器5、74比特移位对齐器6、按位取反器7、粘滞位计算器8、3∶2的进位保存加法器(CSA)组成的部分积压缩树4的一部分和一个3∶2 CSA组成;其中, 指数状态划分器5根据1中计算出的d和从2中得到的sub,将指数的状态划分为以下6种情况 1)d≥27 2)27>d≥3或d=2,sub=0 3)2≥d-48且sub=1 4)d=1或d=0,sub=0 5)-1≥d≥48且sub=0 6)d<-48 前导零预测模块10将根据这里划分的状态进行特殊的操作,介绍10时将会具体的介绍; 74比特的移位对齐器6根据指数处理单元1得到的mv值,对A的尾数进行移,A最初被放置在B×C最高位的左边,如图3(a)所示,为保证d>27时能准确地进行舍入,将两个额外位放在A和B×C最高位之间,d>27时,A不移位,通过置入两个额外位,舍入逻辑不再需要考虑B×C的结果,A右移的位数由d决定,有三种情况 1.mv≤0,B×C在A最低位的右边。这种情况下,B×C仅影响粘滞位的计算,不需要移动A;2.0<mv<74,A右移mv位。mv>50时,A的一部分将被移到B×C最低位的右边,这些移出位将被收集用来计算粘滞位st1; 3.mv≥74,A将被全部移到B×C最低位的右边,仅影响粘滞位st1的计算; 计算粘滞位的部件8收集A向右移位对齐时移出数据通道的位,用以计算粘滞位,这里产生的粘滞位仅仅是整个乘加单元实现过程中产生的粘滞位的一部分,记为st1,在第四级流水线中还会产生粘滞位,后面介绍第四级流水线的时候将会详细介绍;若sub=0,A被移出数据通道的位全为0时,st1=0,否则st1=1;若sub=1,A被移出数据通道的位全为1时,st1=0,否则st1=1; 按位取反器7,如果A的符号位和B×C的符号位不同,对A的尾数的每比特都做取反操作(也就是按位取反),如果A的符号位和B×C的符号位相同,则不作取反操作,并将操作结果和4的输出结果一起送入3∶2CSA 9中作一次压缩,其输出结果记为sum、carry,它们在数据通道中的存在形式如图3(c)所示;A的符号位和B×C的符号位不同时,还要在A的最低位加1以完成对A的求补,但是移位后,A的最低位可能在24位到74位之间的任一位置,我们希望将1加到一个固定的位置,检查A的最低位在161位左边和右边两种情况,可发现sub=1且st1=0时要在进位字节的最低位加1,如图3(c)所示,这一加1能正确的传递到A的最低位,3∶2CSA压缩后进位字节(carry)的最低位(74位)为空,1可加在这一位上; 第三级流水线由前导零检测模块10、74比特的半加器11、12和13、符号预测逻辑14、25比特的一次性移位器15和选择器16组成;其中, 前导零检测模块10,根据5和9的输出,以及d和sub的值确定后两次规格化移位(分别由17、25完成)的移位量,下面阐述根据d和sub划分的六种情况,详细讨论各种情况下如何确定前导零个数(结果为负时为前导一) 情况1d≥27 前导零个数(LZN)可能为0或1,不需要进行移位,1位的左移不确定留到加法和舍入部分处理,17和25的移位量均为0; 情况227>d≥3或d=2,且sub=0 25的移位量为0,sub=1时,17中的移位量为mv,其中mv为1中计算出的A相对B×C移位对齐时的移位量;sub=1时,17中的移位量为mv-1,因为此时为有效加法,加法器20中最高位可能产生进位(Cout=1,Cout表示加法器20中最高位的进位),17中的移位量最少为0,最多为25; 情况32≥d≥-48且sub=1 此时A和B×C非常接近,减法运算可能损失很多有效位,这种情况下需要特殊的前导零预测逻辑,我们的实现方法如下 通过检查某一位及其左右相邻的位确定哪一位可能是最高位,设一预测位fi,
其中sum、carry为9的两个输出,若fi=1,而fj=0(j=0,1…i-1),则最高位为i或i+1, i≤26时,17中的移位量为i,25中的移位量为0;否则17中的移位量为26,25中的移位量为i-26; 情况4sub=0,且d=1或0 17和25中的移位量均为0; 情况5-1≥d≥-48且sub=0 25中的移位量为0; 17中的移位量由BC_sum
,BC_sum[1],BC_carry
,BC_carry[1]确定,它们分别是4的两个输出的最高两位,若 BC_sum
|BC_carry
|(BC_sum[1]&BC_carry[1])=1 则A与B×C相加,Cout=1,Cout为前面提到过的加法器20中最高位的进位,这种情况下17中的移位量为0,否则Cout=0,17中的移位量为1; 情况6d<-48 B×C远大于A,A仅影响舍入逻辑,在17中只需左移一位,25中的移位量为0; 总结几上各种情况可发现17、25中的最大的移位量仅为26位; 74比特的半加器11、12和13的引入是为了保证在第五级流水线中部件27、28仅产生一位进位,为减少电路的延时,这里同时对9输出结果及其补数表示进行处理,待部件14判断出结果的正负后再用选择器16选择需要的结果,11的输入为sum、carry,输出结果为sum&carry,即对sum和carry作按位与操作,12的输入为sum、carry,输出结果为sum^carry,即对sum和carry作按位或操作,13的输入为sum、carry按位取反,输出结果为sum和carry分别按位取反后作按位与操作; 25比特的一次性移位器15,根据1的输出d和2的输出sub判断是否对11、12、13的输出进行一次25比特的移位d>2,或者d=2且sub=0时进行移位,否则不进行移位,为得到sum、carry的补数表示,除了按位取反,还需要分别在最低位加1,这里的两个加1采用的技巧为1个加在13的输出的最低位,同时将数据通道向右拓展一位,然后在12和13的输出的最低位分别置1,这样就完成了另一个加1; 结果可能为负时将需要非常复杂的选择,注意这里提到的负指的是A+B×C的符号与B×C的符号不同,避免这一麻烦同时减小电路时延的方法是提前判断结果的正负,结果为负时选择9输出的补数表示,这一判断由符号预测模块14完成,它在进行前导零预测(10)、半加(11、12、13)以及一次性移位(15)的同时进行,符号预测模块14根据9的输出结果sum和carry预测最终结果的正负,结果仅在有效减(sub=1)时可能为负。有效减时,A的补数始终被使用,因此结果仅在d>0时可能为负,可能有两种情况 1.d≥2时结果始终为负; 2.d=0或d=1时,要对A和B×C进行全面的比较,具体方法是检测sum加carry时,最高位是否有进位产生,若有,则符号判断的结果为正; 选择器16根据14判断的结果从15的结果中选择,若14判断出结果为正,则选择sum和carry一次性移位后的输出,否则选择sum和carry取补再移位后的输出; 第四级流水线由26比特的规格化移位器17、最终结果的符号计算部件18、指数计算部件19、22位条件加法器20、进位和粘滞位计算部件21和两个与门22、23组成,其中, 26比特的规格化移位器17根据10中得到的移位量对16的输出结果进行移位,最大移位量为26; 最终结果的符号计算部件18将2中得到的B*C的符号和14得到的符号预测结果进行异或操作,得到A+B*C的符号; 指数计算部件19计算A+B*C的指数,计算方法为1中得到的Exp_temp与三次规格化移位(由15、17、25完成)的移位量之和相加; 22位条件加法器20,将17输出结果的高22比特相加得到sum0,sum0+1得到sum1; 部件21~23是完成舍入的部件的一部分; IEEE 754标准中规定了4种舍入模式就近舍入(RN),向正无穷舍入(RP),向负无穷舍入(RM),向零舍入(RZ),从应用的角度来看,这四种舍入模式能减少到三个RN、RI、RZ,如表1所示; 表1
从数学意义上讲,


这里



分别表示向上取整和向下取整; 21中利用17输出的低49位计算其最高位进位,利用17输出结果的低50位和st1计算粘滞位;有左移的粘滞位的计算方法为17输出的两个数的低49位相加的结果为零,且st1=0时,粘滞位的计算结果为0;无左移的粘滞位的计算方法为17输出的两个数的低50位相加的结果为零,且st1=0时,粘滞位的计算结果为0;采用下面的方法可快速确定两个数是否为0设两个操作数为A=a0...an-1,B=b0...bn-1,记矢量E=e0...en-1,其中pi=ai&bi,ki=ai+bi,那么 22和23为两个与门,22的输入为RI和21中得到的无左移时的粘滞位,输出进入加法器28,23的输入为RI和21中得到的有左移时的粘滞位,输出进入加法器27; 第五级流水线由指数修正部件24、24比特的规格化移位器25、两个4位的加法器27和28、选择器29和最低位修正部件30;其中, 尽管前面已进行规格化移位,但由于10中采用的前导零逻辑有一位的不确定性,以及两个数相加是否有进位的不确定性,将17的输出结果相加最高位可能为0,也就是说还可能需要一位左移;是否需要左移由sum0的最高位,sum1的最高位,以及21中得到的低49位向高位段的进位决定,
其中c_no_left_shift为假设不需左移时4位全加结果(在28中得到)的最高位进位; 若Left_shift=1,则指数修正部件24将19中得到的结果减1得到最终结果的指数,否则不需减1; 第三步规格化移位在25中完成,其移位量在10中已计算出了; 22和23为两个4位的加法器,它们有三个共同的输入17中两个输出结果的23~26比特,以及RN+RI,一个不同的输入分别为22和23的输出; 选择器29根据Left_shift的值从27和28的输出中作选择,若Left_shift=1,则选择28的输出作为输出,否则选择27的输出; 29输出结果的最高位为1时,选择器26选择sum1经部件25处理后的输出作为输出,否则选择sum0经25处理后的输出; 最后,RN模式时最低位需要被修正,这由舍入位和粘滞位确定 LSBcorrected=0 if(~R)&sticky&RN=1 其中R为舍入位,本设计中为29的输出的第3位,sticky为粘滞位,Left_shift=1,其值等于21中计算得的有左移时的粘滞位的值,否则为无左移时的粘滞位的值; 最终,对26和30的输出结果进行拼接——26的输出,联合30输出的最高两比特,就得到了A+B*C的尾数; 本发明在实现细节上做了周密的考虑,保证了浮点乘加单元的高精度,具体表现在两个方面 1.考虑了规格化移位所不能正确覆盖的一位左移。
2.乘法结果采用两个48位部分积表示,会引起一位溢出错误,本发明中提出了一种消除该错误的方法。
本发明的创新点总结如下 ●乘法结果采用两个48位部分积表示,会引起一位溢出错误,本发明中提出了一种消除该错误的方法。
●采用最终加和舍入同时进行的方法,减小了冗余,仅需要22位的加法器,同时能够处理前导零预测(leading zero anticipate-LZA)可能引入的一位左移,远小于其他的MAF单元中加法器的宽度。
●由于规格化移位需要在加法之前完成,所以LZA不可能与加法并行完成。为减少延时,我们根据A的移位对齐情况和指数差将规格化移位仔细的划分成了六种情况,分别采用不同方法进行LZA,同时分三步完成移位,最大移位量被减小到仅26位。而且仅一步规格化移位在关键路径上,另外两步在其它模块中完成。由于移位器的延时主要产生于连线延时,大幅度减少移位量能大大缩短连线长度,从而显著地减小了电路延时。
●为得到一个操作数的补数表示,该操作数被按位取反后还需要在其最低位加1。虽然这个加1操作可以留到最终加和舍入部分,但是会增加逻辑复杂度和延时,需要尽量避免,而32进位保存加法器(carry save adder-CSA)中进位字节的最低位是一个空位(因为这一位上不会有来自更低一位的进位),可以被用来存放求补所需加的1。另一个办法是将数据通路向右宽展一位,并在新的最低位上增加两个1,相当于在原来的最低位上加1。
本发明采用五级流水线实现,用VerilogHDL实现,通过验证后用0.18微米标准单元库进行电路综合。对综合结果进行时序分析,结果显示最大延时为1.82纳秒。



图1是参考文献1Floating-Point Multiply-Add-Fused with Reduced Latency中介绍的一种已有的乘加单元的结构框图; 图2是本发明的五级流水线实现的单精度浮点乘加单元的结构框图; 图3a是A相对B×C移位对齐前在数据通道中摆放的示意图; 图3b是A相对B×C移位对齐后在数据通道中摆放的示意图; 图3c是A相对B×C移位对齐,并进行3∶2进位保存压缩后数据通道中数据摆放的示意图; 图4是单字节3∶2进位压缩加法器(CSA)的具体实现图; 图5是乘法压缩树具体实现的框图,这一压缩树由11个49字节的CSA组成; 图6是乘法压缩结果在数据通道中摆放的示意图;
具体实施例方式 本发明的具体功能实现过程如下 A的移位对齐、取反与B×C的波斯编码、部分积压缩并行执行。求补所需的加1利用3∶2 CSA进位字节最低位上的空位实现。然后将Ainv与B×C压缩后的部分积输入到3∶2CSA中。Ainv表示将A的尾数按位对齐并取反(如果A的符号位与B×C的符号位相同则不需取反)的输出。由于B×C的部分积只有48位,只需将Ainv的低48位输入3∶2 CSA中,高55位与CSA输出的和字节相连得到74位的和字节。在进行乘法和对齐的同时,判断A的符号与B×C的符号是否相同,并计算指数差d。
下一步要确定规格化移位的移位量,也就是前导零的个数。由于前导零预测的延时大于第一步规格化移位和符号判断,可在前导零预测的同时完成加法的一部分以缩短关键路径。同时为确保最终加输出的结果为正,需要进行符号预测,结果为负时选取进位保存加法器输出结果的补数表示。
最后进行最终加和舍入。由于前导零预测结果有1位的不确定性,最终结果有可能需要左移一位,因此舍入位置也有1位的不确定性。本发明采用条件加法器和精心设计的舍入逻辑解决了这一问题。
乘法结果采用两个48位部分积表示,会引起一位溢出错误,本发明中提出了一种消除该错误的方法。
乘法模块的实现过程如下 乘法采用以4为基的波斯编码,仅无符号的B、C尾数部分被输入到乘法电路中。部分积压缩过程采用多级3∶2进位保存加法器,将13个部分积压缩为2个。
由于B和C的尾数均为24位,B×C的结果应为48位,但是部分积表示时应保留49位,最高位为符号位。由于仅无符号的B、C尾数部分被输入到乘法电路中,如果将2个49位的压缩后的部分积相加,符号位永远为0,因此可尝试仅保留低48位。但是将2个48位的部分积相加时可能产生进位溢出,这一错误暗示两个处于区间[1,2)的数相乘结果大于4,该进位应被抛弃。由于两个部分积是与Ainv相加,而不是单独相加,我们首先需要预测是否会出现进位,然后进行处理。一共有三种情况,具体如下 情况1.BC_49BitsCarry,BC_49BitsSum的最高位均为0。BC_49BitsCarry,BC_49BitsSum为49位的压缩后的部分积,如图6所示。这种情况下仅需要保留低48位。
情况2.BC_49BitsCarry,BC_49BitsSum的最高位均为1。假设BC_49BitsCarry与BC_49BitsSum的低48位相加有进位,则该进位与最高位上的两个1相加,最终的符号位将为1,表明结果为负。这是不可能出现的,因此不可能产生进位。
情况3.BC_49BitsCarry和BC_49BitsSum的最高位一个为0,另一个为1。这种情况下BC_49BitsCarry和BC_49BitsSum的低48位相加必有进位溢出。如果想仅保留低48位,必须消去该进位的影响。低48位只可能有两种形式11.*+01.*或1*.*+1*.*,*表示剩下的位,可为0也可为1。11.*+00.*不可能出现,因为这种情况下BC_49BitsCarry+BC_49BitsSum结果将为00.*,小于1,而B×C≥1。
BC_49BitsCarry+BC_49BitsSum为11.*+01.*时,将这三个1改为0就可避免溢出,而为1*.*+1*.*时,将两个1改为0即可。
最终加法和舍入的实现过程如下 IEEE 754标准中规定了4种舍入模式就近舍入(RN),向正无穷舍入(RP),向负无穷舍入(RM),向零舍入(RZ)。从应用的角度来看,这四种舍入模式能减少到三个RN、RI、RZ,如表1所示。
从数学意义上讲,


这里



分别表示向上取整和向下取整。
最终加和舍入模块非常类似于浮点乘法单元中相应的模块——尽管已进行规格化移位,还可能需要一位左移。舍入完成后,根据最高位的值决定0-23位还是1-24位被用来作为最终结果。最高位为1时,采用0-23位,否则采用1-24位。注意舍入本身可能导致最高位被置位,这就是舍入后溢出的情况。
如图2所示,输入被分为三部分高位段(第0-21位),中间段(第22-25位)和低位段(第26-74位)。下面详细介绍每一部分的设计。
高位段。这部分被输入到条件加法器中计算sum(sum0)和sum+1(sum1)。中位段的最高位进位决定选择sum0还是sum1。
中位段。这4位与低位段的最高位进位相加, RN和RI模式时需在舍入位加1,RI模式时还需加粘滞位。注意不需进行一位左移时舍入位为第24位,否则为第25位。
考虑到计算低位段进位的延时较大,计算是否需要左移一位的信号的延时大于粘滞位的计算和4-bit全加,所以采用条件加法器,同时计算左移和不需左移,低位段有进位和无进位时的全加结果,然后根据左移信号和进位选择所需的结果。
是否需要左移由sum0的最高位,sum1的最高位,以及向高位段的进位决定,
其中c_no_left_shift为假设不需左移时4位全加结果的最高位进位。
一排半加器被用来确保舍入和低位处理时最多仅有一个向第21位的进位,这一半加在3∶2CSA之后就已完成。
低位段被输入到计算最高位的进位以及粘滞位st2的电路中。
注意还要考虑A对齐时收集移出位得到的粘滞位st1,最终的粘滞位sticky=st1+st2。
权利要求
1.一种浮点乘加融合单元的五级流水线结构,其特征在于,含有一种五级流水实现的单精度浮点乘加运算单元,实现了形式为A+(B×C)的乘加操作,其吞吐量为每周期一条指令,如图2所示,具体结构如下
第一级流水线由指数处理单元1、以4为基的波茨编码器3、3∶2的进位保存加法器(CSA)组成的部分积压缩树4的一部分和符号处理单元2组成;其中,
指数处理单元1根据操作数A的指数,B的指数和C的指数计算其指数差d
d=exp(A)-(exp(B)+exp(C)-127),
其中,exp(A),exp(B)和exp(C)分别是操作数A,B和C的指数,根据IEEE 754标准,单精度浮点数的指数为其第2位到第8位,并计算A与B×C对齐时所需的移位量mv,
mv=74-d,
确定数据通路的临时指数Exp_temp,其计算方法为
若mv<0,则Exp_temp=exp(A);否则Exp_temp=exp(B)+exp(C)-127+27;这里加27是因为B×C的结果在数据通道中靠右侧摆放,如图3(a)所示;
符号处理单元2根据操作数A的符号,B的符号和C的符号计算临时符号、是否为有效减(sub),根据IEEE 754标准,单精度浮点数的符号位为其最高位,临时符号由B×C的符号位表示,A的符号位与B×C的符号位不同时,sub=1,否则sub=0;
基4的波茨编码器3对C的尾数进行编码,然后将编码的结果与B的尾数相乘得到13个部分积,根据IEEE 754标准,单精度浮点数的尾数为其第9位到第32位,编码后的13个部分积的被送入3∶2的进位保存(CSA)压缩树4中,单个单字节CSA单元和CSA压缩树的构造分别在图4和图5中做了详细的介绍,其中图5的输入x、y、z为3个要被压缩的字节,输出S、C分别为压缩后的和字节和进位字节,图6的输入in1~in13为波茨编码后得到的13个部分积,输出为压缩后得到的和、进位,整个压缩树由11个49比特的CSA构成,其中每个CSA由49个图5中的单元结构构成,将13个部分积压缩为两个,需要5级的CSA树,为平衡各级流水线的延时,这里将前两级CSA树放在第一级流水线中,而后面的三级CSA树留到第二级流水线中执行,最终压缩的结果需要被处理后才能做为乘法结果,具体处理方法为部分积压缩树每一压缩的结果都保留49位,最后一级压缩后的两个输出的最高位都为1时,将这两个1改为0,否则若两个最高位1个是1,另一个是0,而两个次高位均为1时,将这最高位的1个1和次高位的2个1都改为0,其与情况不需做修改;
第二级流水线由指数状态划分器5、74比特移位对齐器6、按位取反器7、粘滞位计算器8、3∶2的进位保存加法器(CSA)组成的部分积压缩树4的一部分和一个3∶2 CSA组成;其中,
指数状态划分器5根据1中计算出的d和从2中得到的sub,将指数的状态划分为以下6种情况
1)d≥27
2)27>d≥3或d=2,sub=0
3)2≥d≥-48且sub=1
4)d=1或d=0,sub=0
5)-1≥d≥-48且sub=0
6)d<-48
前导零预测模块10将根据这里划分的状态进行特殊的操作,介绍10时将会具体的介绍;
74比特的移位对齐器6根据指数处理单元1得到的mv值,对A的尾数进行移,A最初被放置在B×C最高位的左边,如图3(a)所示,为保证d>27时能准确地进行舍入,将两个额外位放在A和B×C最高位之间,d>27时,A不移位,通过置入两个额外位,舍入逻辑不再需要考虑B×C的结果,A右移的位数由d决定,有三种情况
1.mv≤0,B×C在A最低位的右边,这种情况下,B×C仅影响粘滞位的计算,不需要移动A;
2.0<mv<74,A右移mv位,mv>50时,A的一部分将被移到B×C最低位的右边,这些移出位将被收集用来计算粘滞位st1;
3.mv≥74,A将被全部移到B×C最低位的右边,仅影响粘滞位st1的计算;
计算粘滞位的部件8收集A向右移位对齐时移出数据通道的位,用以计算粘滞位,这里产生的粘滞位仅仅是整个乘加单元实现过程中产生的粘滞位的一部分,记为st1,在第四级流水线中还会产生粘滞位,后面介绍第四级流水线的时候将会详细介绍;若sub=0,A被移出数据通道的位全为0时,st1=0,否则st1=1;若sub=1,A被移出数据通道的位全为1时,st1=0,否则st1=1;
按位取反器7,如果A的符号位和B×C的符号位不同,对A的尾数的每比特都做取反操作(也就是按位取反),如果A的符号位和B×C的符号位相同,则不作取反操作,并将操作结果和4的输出结果一起送入32CSA 9中作一次压缩,其输出结果记为sum、carry,它们在数据通道中的存在形式如图3(c)所示;A的符号位和B×C的符号位不同时,还要在A的最低位加1以完成对A的求补,但是移位后,A的最低位可能在24位到74位之间的任一位置,我们希望将1加到一个固定的位置,检查A的最低位在161位左边和右边两种情况,可发现sub=1且st1=0时要在进位字节的最低位加1,如图3(c)所示,这一加1能正确的传递到A的最低位,32CSA压缩后进位字节(carry)的最低位(74位)为空,1可加在这位上;
第三级流水线由前导零检测模块10、74比特的半加器11、12和13、符号预测逻辑14、25比特的一次性移位器15和选择器16组成;其中,
前导零检测模块10,根据5和9的输出,以及d和sub的值确定后两次规格化移位(分别由17、25完成)的移位量,下面阐述根据d和sub划分的六种情况,详细讨论各种情况下如何确定前导零个数(结果为负时为前导一)
情况1d≥27
前导零个数(LZN)可能为0或1,不需要进行移位,1位的左移不确定留到加法和舍入部分处理,17和25的移位量均为0;
情况227>d≥3或d=2,且sub=0
25的移位量为0,sub=1时,17中的移位量为mv,其中mv为1中计算出的A相对B×C移位对齐时的移位量;sub=1时,17中的移位量为mv-1,因为此时为有效加法,加法器20中最高位可能产生进位(Cout=1,Cout表示加法器20中最高位的进位),17中的移位量最少为0,最多为25;
情况32≥d≥-48且sub=1
此时A和B×C非常接近,减法运算可能损失很多有效位,这种情况下需要特殊的前导零预测逻辑,我们的实现方法如下
通过检查某一位及其左右相邻的位确定哪一位可能是最高位,设一预测位fi,G=sum&carry,
其中sum、carry为9的两个输出,若fi=1,而fj=0(j=0,1…i-1),则最高位为i或i+1,
i≤26时,17中的移位量为i,25中的移位量为0;否则17中的移位量为26,25中的移位量为i-26;
情况4sub=0,且d=1或0
17和25中的移位量均为0;
情况5-1≥d≥-48且sub=0
25中的移位量为0;
17中的移位量由BC_sum
,BC_sum[1],BC_carry
,BC_carry[1]确定,它们分别是4的两个输出的最高两位,若
BC_sum
|BC_carry
|(BC_sum[1]& BC_carry[1])=1
则A与B×C相加,Cout=1,Cout为前面提到过的加法器20中最高位的进位,这种情况下17中的移位量为0,否则Cout=0,17中的移位量为1;
情况6d<-48
B×C远大于A,A仅影响舍入逻辑,在17中只需左移一位,25中的移位量为0;
总结几上各种情况可发现17、25中的最大的移位量仅为26位;
74比特的半加器11、12和13的引入是为了保证在第五级流水线中部件27、28仅产生一位进位,为减少电路的延时,这里同时对9输出结果及其补数表示进行处理,待部件14判断出结果的正负后再用选择器16选择需要的结果,11的输入为sum、carry,输出结果为sum&carry,即对sum和carry作按位与操作,12的输入为sum、carry,输出结果为sum^carry,即对sum和carry作按位或操作,13的输入为sum、carry按位取反,输出结果为sum和carry分别按位取反后作按位与操作;
25比特的一次性移位器15,根据1的输出d和2的输出sub判断是否对11、12、13的输出进行一次25比特的移位d>2,或者d=2且sub=0时进行移位,否则不进行移位,为得到sum、carry的补数表示,除了按位取反,还需要分别在最低位加1,这里的两个加1采用的技巧为1个加在13的输出的最低位,同时将数据通道向右拓展一位,然后在12和13的输出的最低位分别置1,这样就完成了另一个加1;
结果可能为负时将需要非常复杂的选择,注意这里提到的负指的是A+B×C的符号与B×C的符号不同,避免这一麻烦同时减小电路时延的方法是提前判断结果的正负,结果为负时选择9输出的补数表示,这一判断由符号预测模块14完成,它在进行前导零预测(10)、半加(11、12、13)以及一次性移位(15)的同时进行,符号预测模块14根据9的输出结果sum和carry预测最终结果的正负,结果仅在有效减(sub=1)时可能为负,有效减时,A的补数始终被使用,因此结果仅在d>0时可能为负,可能有两种情况
1.d≥2时结果始终为负;
2.d=0或d=1时,要对A和B×C进行全面的比较,具体方法是检测sum加carry时,
最高位是否有进位产生,若有,则符号判断的结果为正;
选择器16根据14判断的结果从15的结果中选择,若14判断出结果为正,则选择sum和carry一次性移位后的输出,否则选择sum和carry取补再移位后的输出;
第四级流水线由26比特的规格化移位器17、最终结果的符号计算部件18、指数计算部件19、22位条件加法器20、进位和粘滞位计算部件21和两个与门22、23组成,其中,
26比特的规格化移位器17根据10中得到的移位量对16的输出结果进行移位,最大移位量为26;
最终结果的符号计算部件18将2中得到的B*C的符号和14得到的符号预测结果进行异或操作,得到A+B*C的符号;
指数计算部件19计算A+B*C的指数,计算方法为1中得到的Exp_temp与三次规格化移位(由15、17、25完成)的移位量之和相加;
22位条件加法器20,将17输出结果的高22比特相加得到sum0,sum0+1得到sum1;
部件21~23是完成舍入的部件的一部分;
IEEE 754标准中规定了4种舍入模式就近舍入(RN),向正无穷舍入(RP),向负无穷舍入(RM),向零舍入(RZ),从应用的角度来看,这四种舍入模式能减少到三个RN、RI、RZ,如表1所示;
从数学意义上讲,
这里

分别表示向上取整和向下取整;
21中利用17输出的低49位计算其最高位进位,利用17输出结果的低50位和st1计算粘滞位;有左移的粘滞位的计算方法为17输出的两个数的低49位相加的结果为零,且st1=0时,粘滞位的计算结果为0;无左移的粘滞位的计算方法为17输出的两个数的低50位相加的结果为零,且st1=0时,粘滞位的计算结果为0;采用下面的方法可快速确定两个数是否为0设两个操作数为A=a0...an-1,B=b0...bn-1,记矢量E=e0...en-1,其中pi=ai&bi,ki=ai+bi,那么A+B=0 if
22和23为两个与门,22的输入为RI和21中得到的无左移时的粘滞位,输出进入加法器28,23的输入为RI和21中得到的有左移时的粘滞位,输出进入加法器27;
第五级流水线由指数修正部件24、24比特的规格化移位器25、两个4位的加法器27和28、选择器29和最低位修正部件30;其中,
尽管前面已进行规格化移位,但由于10中采用的前导零逻辑有一位的不确定性,以及两个数相加是否有进位的不确定性,将17的输出结果相加最高位可能为0,也就是说还可能需要一位左移;是否需要左移由sum0的最高位,sum1的最高位,以及21中得到的低49位向高位段的进位决定,
其中c_no_left_shift为假设不需左移时4位全加结果(在28中得到)的最高位进位;
若Left_shift=1,则指数修正部件24将19中得到的结果减1得到最终结果的指数,否则不需减1;
第三步规格化移位在25中完成,其移位量在10中已计算出了;
22和23为两个4位的加法器,它们有三个共同的输入17中两个输出结果的23~26比特,以及RN+RI,一个不同的输入分别为22和23的输出;
选择器29根据Left_shift的值从27和28的输出中作选择,若Left_shift=1,则选择28的输出作为输出,否则选择27的输出;
29输出结果的最高位为1时,选择器26选择sum1经部件25处理后的输出作为输出,否则选择sum0经25处理后的输出;
最后,RN模式时最低位需要被修正,这由舍入位和粘滞位确定
LSBcorrected=0 if(~R)&sticky&RN=1
其中R为舍入位,本设计中为29的输出的第3位,sticky为粘滞位,Left_shift=1,其值等于21中计算得的有左移时的粘滞位的值,否则为无左移时的粘滞位的值;
最终,对26和30的输出结果进行拼接——26的输出,联合30输出的最高两比特,就得到了A+B*C的尾数。
全文摘要
本发明公开了一种单精度浮点乘加单元的全流水线设计,实现了形式为A+B×C的乘加运算,分五级流水线实现在第一级流水线中,计算指数差,并完成乘法的一部分;在第二级流水线中,根据指数差将A与B×C对齐,有效减时取反,完成剩下的乘法,同时将指数划分成六种状态,不同状态下规格化移位量的计算方法将不同;在第三级流水线中,预测前导零数目,同时同步预测最终结果的符号,最后进行第一步规格化移位;在第四级流水线中,首先完成第二步规格化移位,然后进行加法和舍入的一部分;最后一级流水线中,完成加法和舍入,修正指数项,第三步规格化移位在舍入的间隔里完成。本发明的优点在于在硬件开销较小的情况下实现了高性能、高精度。
文档编号G06F7/57GK101174200SQ200710099408
公开日2008年5月7日 申请日期2007年5月18日 优先权日2007年5月18日
发明者李兆麟, 李恭琼, 轩 张 申请人:清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1