发明名称 一种具有五级流水线结构的浮点乘加融合单元
摘要 本发明公开了一种单精度浮点乘加单元的全流水线设计,实现了形式为A+B×C的乘加运算,分五级流水线实现:在第一级流水线中,计算指数差,并完成乘法的一部分;在第二级流水线中,根据指数差将A与B×C对齐,有效减时取反,完成剩下的乘法,同时将指数划分成六种状态,不同状态下规格化移位量的计算方法将不同;在第三级流水线中,预测前导零数目,同时同步预测最终结果的符号,最后进行第一步规格化移位;在第四级流水线中,首先完成第二步规格化移位,然后进行加法和舍入的一部分;最后一级流水线中,完成加法和舍入,修正指数项,第三步规格化移位在舍入的间隔里完成。本发明的优点在于:在硬件开销较小的情况下实现了高性能、高精度。
申请公布号 CN101174200B 申请公布日期 2010.09.08
申请号 CN200710099408.9 申请日期 2007.05.18
申请人 清华大学 发明人 李兆麟;李恭琼;张轩
分类号 G06F7/57(2006.01)I 主分类号 G06F7/57(2006.01)I
代理机构 代理人
主权项 1.一种具有五级流水线结构的浮点乘加融合单元,其特征在于,含有一种五级流水实现的单精度浮点乘加运算单元,实现了形式为A+(B×C)的乘加操作,其吞吐量为每周期一条指令,具体结构如下:第一级流水线:由指数处理单元(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;符号处理单元(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单元的输入x、y、z为3个要被压缩的字节,输出S、C分别为压缩后的和字节和进位字节,3:2的进位保存加法器CSA组成的部分积压缩树(4)的输入in1~in13为波茨编码后得到的13个部分积,输出为压缩后得到的和、进位,3:2的进位保存加法器CSA组成的部分积压缩树(4)由11个49比特的CSA构成,将所述13个部分积压缩为两个,需要5级的CSA树,为平衡各级流水线的延时,这里将前两级CSA树放在第一级流水线中,而后面的三级CSA树留到第二级流水线中执行,最终压缩的结果需要被处理后才能做为乘法结果,具体处理方法为:3:2的进位保存加法器CSA组成的部分积压缩树(4)每一压缩的结果都保留49位,最后一级压缩后的两个输出的最高位都为1时,将这两个1改为0,否则若两个最高位一个是1,另一个是0,而两个次高位均为1时,将这最高位的1个1和次高位的2个1都改为0,其余情况不需做修改;第二级流水线:由指数状态划分器(5)、74比特移位对齐器(6)、按位取反器(7)、粘滞位计算器(8)、3:2的进位保存加法器CSA组成的部分积压缩树(4)的一部分和3:2CSA(9)组成;其中,指数状态划分器(5),根据指数处理单元(1)中计算出的指数差d和从符号处理单元(2)中得到的有效减sub,将指数的状态划分为以下6种区间中的一种,产生指示指数差所在区间的信号:1)d≥272)27>d≥3或d=2,sub=03)2≥d≥-48且sub=14)d=1或d=0,sub=05)-1≥d≥-48且sub=06)d<-4874比特的移位对齐器(6),根据指数处理单元(1)得到的mv值,对操作数A的尾数进行移位,A最初被放置在B×C最高位的左边,为保证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的符号位相同,则不作取反操作,并将操作结果和3:2的进位保存加法器CSA组成的部分积压缩树(4)的输出结果一起送入3:2CSA(9)中作一次压缩,其输出结果记为和sum、进位carry,A的符号位和B×C的符号位不同时,还要在A的最低位加1以完成对A的求补,所述sub=1且st1=0时要在进位字节的最低位加1,这一加1能正确的传递到A的最低位,3:2CSA(9)压缩后进位字节carry的最低位为空,1可加在这一位上;第三级流水线:由前导零检测模块(10)、第一个74比特的半加器(11)、第二个74比特的半加器(12)、第三个74比特的半加器(13)、符号预测逻辑(14)、25比特的一次性移位器(15)和第一选择器(16)组成;其中,前导零检测模块(10),根据指数状态划分器(5)和3:2CSA(9)的输出,以及指数差d和有效减sub的值确定后两次规格化移位的移位量,分别由26比特的规格化移位器(17)和24比特的规格化移位器(25)完成移位:1)如果d≥27,前导零个数LZN可能为0或1,不需要进行移位,1位的左移不确定留到加法和舍入部分处理,26比特的规格化移位器(17)和24比特的规格化移位器(25)的移位量均为0;2)如果27>d≥3或d=2,且sub=0,24比特的规格化移位器(25)的移位量为0,sub=1时,26比特的规格化移位器(17)中的移位量为mv,其中mv为指数处理单元(1)中计算出的A相对B×C移位对齐时的移位量;sub=0时,26比特的规格化移位器(17)中的移位量为mv-1,因为此时为有效加法,22位条件加法器(20)中最高位可能产生进位C<sub>out</sub>=1,C<sub>out</sub>表示22位条件加法器(20)中最高位的进位),26比特的规格化移位器(17)中的移位量最少为0,最多为25;3)如果2≥d≥-48且sub=1,此时A和B×C非常接近,减法运算可能损失很多有效位,这种情况下需要特殊的前导零预测逻辑,实现方法如下:通过检查某一位及其左右相邻的位确定哪一位可能是最高位,设一预测位f<sub>i</sub>,<maths num="0001"><![CDATA[<math><mrow><mi>T</mi><mo>=</mo><mi>sum</mi><mo>&CirclePlus;</mo><mi>carry</mi><mo>,</mo></mrow></math>]]></maths>G=sum&amp;carry,Z=sum&amp;carryf<sub>0</sub>=T<sub>0</sub>T<sub>1</sub>f<sub>i</sub>=T<sub>i-1</sub>(G<sub>i</sub>Z<sub>i+1</sub>+Z<sub>i</sub>G<sub>i+1</sub>)+T<sub>i-1</sub>(Z<sub>i</sub>Z<sub>i+1</sub>+G<sub>i</sub>G<sub>i+1</sub>),i>0其中sum、carry为3:2CSA(9)的两个输出,若f<sub>i</sub>=1,而f<sub>j</sub>=0,其中j=0,1…i-1,则最高位为i或i+1,i≤26时,26比特的规格化移位器(17)中的移位量为i,24比特的规格化移位器(25)中的移位量为0;否则26比特的规格化移位器(17)中的移位量为26,24比特的规格化移位器(25)中的移位量为i-26;4)如果sub=0,且d=1或0,26比特的规格化移位器(17)和24比特的规格化移位器(25)中的移位量均为0;5)如果-1≥d≥-48且sub=0,24比特的规格化移位器(25)中的移位量为0;26比特的规格化移位器(17)中的移位量由BC_sum[0],BC_sum[1],BC_carry[0],BC_carry[1]确定,它们分别是3:2的进位保存加法器CSA组成的部分积压缩树(4)的两个输出的最高两位,若BC_sum[0]|BC_carry[0]|(BC_sum[1]&amp;BC_carry[1])=1则A与B×C相加,C<sub>out</sub>=1,C<sub>out</sub>为所述22位条件加法器(20)中最高位的进位,这种情况下26比特的规格化移位器(17)中的移位量为0,否则C<sub>out</sub>=0,26比特的规格化移位器(17)中的移位量为1;6)如果d<-48,B×C远大于A,A仅影响舍入逻辑,26比特的规格化移位器(17)中的移位量为1,24比特的规格化移位器(25)中的移位量为0;第一个74比特的半加器(11)、第二个74比特的半加器(12)和第三个74比特的半加器(13)同时对3:2CSA(9)输出结果及其补数表示进行处理,待符号预测逻辑(14)判断出结果的正负后再用第一选择器(16)选择需要的结果,第一个74比特的半加器(11)的输入为所述sum、carry,输出结果为sum&amp;carry,即对sum和carry作按位与操作,第二个74比特的半加器(12)的输入为sum、carry,输出结果为sum^carry,即对sum和carry作按位或操作,第三个74比特的半加器(13)的输入为sum、carry按位取反,输出结果为sum和carry分别按位取反后作按位与操作;25比特的一次性移位器(15),根据指数处理单元(1)的输出指数差d和符号处理单元(2)的输出有效减sub判断是否对第一个74比特的半加器(11)、第二个74比特的半加器(12)、第三个74比特的半加器(13)的输出进行一次25比特的移位:d>2,或者d=2且sub=0时进行移位,否则不进行移位,为得到所述sum、carry的补数表示,除了按位取反,还需要分别在最低位加1,这里的两个加1采用的技巧为:1个加在第三个74比特的半加器(13)的输出的最低位,同时将数据通道向右拓展一位,然后在第二个74比特的半加器(12)和第三个74比特的半加器(13)的输出的最低位分别置1,这样就完成了另一个加1;结果可能为负时将需要非常复杂的选择,这里提到的负指的是A+B×C的符号与B×C的符号不同,避免这一麻烦同时减小电路时延的方法是提前判断结果的正负,结果为负时选择3:2CSA(9)输出的补数表示,这一判断由符号预测逻辑(14)完成,它在进行前导零预测、半加以及一次性移位的同时进行,符号预测逻辑(14)根据3:2CSA(9)的输出结果sum和carry预测最终结果的正负,结果仅在有效减sub=1时可能为负,有效减时,A的补数始终被使用,因此结果仅在d>0时可能为负,为以下两种情况之一:1)d≥2时结果始终为负;2)d=0或d=1时,要对A和B×C进行全面的比较,检测sum加carry时,最高位是否有进位产生,若有,则符号判断的结果为正;第一选择器(16)根据符号预测逻辑(14)判断的结果从25比特的一次性移位器(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与三次规格化移位的移位量之和相加;22位条件加法器(20),将26比特的规格化移位器(17)输出结果的高22比特相加得到sum0,sum0+1得到sum1;进位和粘滞位计算部件(21)、第一与门(22)和第二与门(23)是完成舍入的部件的一部分;IEEE 754标准中规定了4种舍入模式:就近舍入RN,向正无穷舍入RP,向负无穷舍入RM,向零舍入RZ,从应用的角度来看,这四种舍入模式能减少到三个:RN、RI、RZ,<img file="F200710099408901C00051.GIF" wi="912" he="158" /><img file="F200710099408901C00052.GIF" wi="257" he="62" /><img file="F200710099408901C00053.GIF" wi="238" he="65" />这里<img file="F200710099408901C00054.GIF" wi="71" he="66" />和<img file="F200710099408901C00055.GIF" wi="72" he="65" />分别表示向上取整和向下取整;进位和粘滞位计算部件(21)中利用26比特的规格化移位器(17)输出的低49位计算其最高位进位,利用26比特的规格化移位器(17)输出结果的低50位和所述st1计算粘滞位;有左移的粘滞位的计算方法为:26比特的规格化移位器(17)输出的两个数的低49位相加的结果为零,且st1=0时,粘滞位的计算结果为0;无左移的粘滞位的计算方法为:26比特的规格化移位器(17)输出的两个数的低50位相加的结果为零,且st1=0时,粘滞位的计算结果为0;采用下面的方法可快速确定两个数是否为0:设两个操作数为A=a<sub>0</sub>...a<sub>n-1</sub>,B=b<sub>0</sub>...b<sub>n-1</sub>,记矢量E=e<sub>0</sub>...e<sub>n-1</sub>,其中<maths num="0002"><![CDATA[<math><mrow><msub><mi>e</mi><mi>i</mi></msub><mo>=</mo><msub><mi>k</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub><mo>&CirclePlus;</mo><msub><mi>p</mi><mi>i</mi></msub><mo>,</mo></mrow></math>]]></maths>p<sub>i</sub>=a<sub>i</sub>&amp;b<sub>i</sub>,k<sub>i</sub>=a<sub>i</sub>+b<sub>i</sub>,那么<maths num="0003"><![CDATA[<math><mrow><mi>A</mi><mo>+</mo><mi>B</mi><mo>=</mo><mn>0</mn><mo>,</mo><mi>ifZ</mi><mo>=</mo><munderover><mi>&Pi;</mi><mrow><mi>i</mi><mo>=</mo><mn>0</mn></mrow><mrow><mi>n</mi><mo>-</mo><mn>1</mn></mrow></munderover><msub><mi>e</mi><mi>i</mi></msub><mo>=</mo><mn>1</mn></mrow></math>]]></maths>第一与门(22)和第二与门(23)为两个与门,第一与门(22)的输入为所述RI和进位和粘滞位计算部件(21)中得到的无左移时的粘滞位,输出进入第二个4位的加法器(28),第二与门(23)的输入为所述RI和进位和粘滞位计算部件(21)中得到的有左移时的粘滞位,输出进入第一个4位的加法器(27);第五级流水线:由指数修正部件(24)、24比特的规格化移位器(25)、第二选择器(26)、第一个4位的加法器(27)、第二个4位的加法器(28)、第三选择器(29)和最低位修正部件(30);其中,尽管前面已进行规格化移位,但由于前导零检测模块(10)中采用的前导零逻辑有一位的不确定性,以及两个数相加是否有进位的不确定性,将26比特的规格化移位器(17)的输出结果相加最高位可能为0,也就是说还可能需要一位左移;是否需要左移由sum0的最高位、sum1的最高位、以及进位和粘滞位计算部件(21)中得到的低49位向高位段的进位决定,Left_shift=sum0[0]+sum1[0]&amp;c_no_left_shift其中c_no_left_shift为第二个4位的加法器(28)得到的不需左移时4位全加结果的最高位进位;若Left_shift=1,则指数修正部件(24)将指数计算部件(19)中得到的结果减1得到最终结果的指数,否则不需减1;第三步规格化移位在24比特的规格化移位器(25)中完成,其移位量在前导零检测模块(10)中已计算出了;第一个4位的加法器(27)和第二个4位的加法器(28)为两个4位的加法器,有三个共同的输入:26比特的规格化移位器(17)中两个输出结果的23~26比特,以及RN+RI,还有一个不同的输入:分别为第一与门(22)和第二与门(23)的输出;第三选择器(29)根据Left_shift的值从第一个4位的加法器(27)和第二个4位的加法器(28)的输出中作选择,若Left_shift=1,则选择第二个4位的加法器(28)的输出作为输出,否则选择第一个4位的加法器(27)的输出;第三选择器(29)输出结果的最高位为1时,第二选择器(26)选择所述sum1经24比特的规格化移位器(25)处理后的输出作为输出,否则选择所述sum0经24比特的规格化移位器(25)处理后的输出;最后,RN模式时最低位需要被修正,这由舍入位和粘滞位确定:LSBcorrected=0 if (~R)&amp;sticky&amp;RN=1其中R为舍入位,是第三选择器(29)的输出的第3位,sticky为粘滞位,如果Left_shift=1,sticky的值等于进位和粘滞位计算部件(21)中计算得的有左移时的粘滞位的值,否则为无左移时的粘滞位的值;最终,对第二选择器(26)和最低位修正部件(30)的输出结果进行拼接,即第二选择器(26)的输出,联合最低位修正部件(30)输出的最高两比特,就得到了A+B*C的尾数。
地址 100084 北京市海淀区100084-82信箱