CN101221490B - 一种具有数据前送结构的浮点乘加单元 - Google Patents
一种具有数据前送结构的浮点乘加单元 Download PDFInfo
- Publication number
- CN101221490B CN101221490B CN2007101799755A CN200710179975A CN101221490B CN 101221490 B CN101221490 B CN 101221490B CN 2007101799755 A CN2007101799755 A CN 2007101799755A CN 200710179975 A CN200710179975 A CN 200710179975A CN 101221490 B CN101221490 B CN 101221490B
- Authority
- CN
- China
- Prior art keywords
- bit
- carry
- result
- abc
- sum
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000007906 compression Methods 0.000 claims abstract description 29
- 230000006835 compression Effects 0.000 claims abstract description 26
- 238000012545 processing Methods 0.000 claims description 18
- 238000004364 calculation method Methods 0.000 claims description 17
- 238000000034 method Methods 0.000 claims description 13
- 230000000295 complement effect Effects 0.000 claims description 8
- 238000012937 correction Methods 0.000 claims description 8
- 230000001419 dependent effect Effects 0.000 claims description 6
- 241001442055 Vipera berus Species 0.000 abstract 2
- 238000006073 displacement reaction Methods 0.000 abstract 1
- 238000010586 diagram Methods 0.000 description 6
- 238000013461 design Methods 0.000 description 4
- 238000010606 normalization Methods 0.000 description 4
- 230000004927 fusion Effects 0.000 description 3
- 230000015572 biosynthetic process Effects 0.000 description 2
- 238000003786 synthesis reaction Methods 0.000 description 2
- 238000012300 Sequence Analysis Methods 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 239000000470 constituent Substances 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
Images
Landscapes
- Complex Calculations (AREA)
Abstract
具有数据前送结构的浮点乘加单元用于浮点运算,实现形式为A+B×C的乘加操作,分三级流水线实现:在第一级流水线中,对A进行移位对齐,同时完成B×C的波斯编码、部分积压缩,并将A移位对齐后的结果和B×C的部分积压缩后的结果经3∶2进位保存加法树压缩;在第二级流水线中,对前一级流水线的输出进行前导零预测、符号预测、半加运算以及规格化移位;在第三级流水线中,完成最终加法和舍入,计算其指数。这里A和B都可能是前一条指令的中间结果。本发明的优点在于,相邻指令发生数据相关时,能够不等待或仅等待一个周期,提高了指令流的执行效率。
Description
技术领域
本发明涉及浮点运算单元设计,是一种用于实现高性能浮点运算的高速浮点乘加单元。
背景技术
文献数据表明,几乎50%的浮点乘法指令后面紧跟的指令为浮点加法或减法。因此,浮点乘加融合操作A+B×C已经成为科学运算和多媒体应用中的一种基本操作。由于浮点乘加融合操作在应用程序中如此频繁地出现,用浮点乘加融合单元(简化为MAF单元)来实现该操作已经成为现代高性能商业处理器的一个很好的选择。这种实现方式主要有以下两个优点:(1)仅需要一次舍入,不是两次;(2)通过共享一些组成模块,可降低电路延迟和硬件开销。
乘加(MAF)指令需要3个操作数。例如,执行A+(B×C)操作,当把乘加指令中操作数A置为0时执行的是乘法指令,把操作数B或C置为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的结果的最高位最多左移55位,或者比B×C结果的最高位最多右移106比特,即移位范围在[-55,106]之间。在浮点乘加的设计中为了使移位简单化,规一化A的移位方向为向右移位。所以Ainv最初置于B×C左端55比特的位置,Ainv在对齐中右移位的位数是56-(exp(A)-(exp(B)+exp(C)-1024),其中,exp(A),exp(B)和exp(C)分别是操作数A,B和C的指数。
把对齐移位后的Ainv、和B×C压缩后的部分积用压缩比为3∶2的进位保存加法器(CSA)压缩,得到两个部分积,同时处理A求补时所需要的加1。
利用2中压缩后得到的两个部分积进行前导零预测(LZA,leading zero anticipator),得到加法结果的规格化左移的位数。同时判断最终结果的正负。
在前导零预测和符合预测的同时做半加操作,并完成部分的加法运算。进行半加操作是为了保证后面能正确地进行舍入。由于符号预测所需要的时间比半加操作多,可在此时间空隙里完成最终加法的一部分。
加法结果利用LZA预测的左移的位数进行规格化左移。若3中符号预测部件判断最终结果为负,则选择2中压缩后得到的部分积的补数形式经第4步处理后的结果进行规格化移位。
最终加法和舍入操作。
图1所示的现有技术的不足:
连续两条指令存在数据相关时,流水线将被迫等待两个周期(三级流水实现时,n级流水实现时将等待n-1个周期),而在实际应用中,数据相关又是一个非常普遍的现象。
相对图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,
计算A+B×C的临时符号sign_p1,
计算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的值分两种情况考虑:
当要执行的指令与上一条指令无数据相关时,或者虽发生了数据相关,但是上一条指令的结果不被用来作为要执行的指令的加数时,55比特的A1的前53比特为输入的被加数的尾数,后两比特为0,根据IEEE 754标准,双精度浮点数的尾数为其第13位到64位,其为规格化数时在最高位补1,否则在最高位补零,非规格化数将作为0看待,A2为0;
要执行的指令与上一条指令发生了数据相关,且上一条指令的结果被用来作为要执行的指令的加数时,又分为两种情况:
上一条指令为乘法指令,则A1、A2分别为第一级流水线的输出sum_p1、carry_p1的高55比特,其中sum_p1、carry_p1为第二个3∶2的CSA树(9)的输出;
上一条指令为加法指令或乘加指令,则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输出,按位取反器(3)的输出记为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的值分两种情况考虑:
当要执行的指令与上一条指令无数据相关时,或者虽发生了数据相关,但是上一条指令的结果不被用来作为要执行的指令的乘数时,55比特的B1的前53比特为输入的被乘数的尾数,后两比特为0,根据IEEE 754标准,双精度浮点数的尾数为其第13位到64位,其为规格化数时在最高位补1,否则在最高位补零,非规格化数将作为0看待,B2为0;
要执行的指令与上一条指令发生了数据相关,且上一条指令的结果被用来作为要执行的指令的乘数时,又分为两种情况:
上一条指令为乘法指令,则B1、B2分别为第一级流水线的输出sum_p1、carry_p1的高55比特,其中sum_p1、carry_p1为第二个3∶2的CSA树(9)的输出;
上一条指令为加法指令或乘加指令,则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∶2CSA级联,形成3∶2CSA树,就能将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,
f0=T0T1
fi=Ti-1(GiZi+1+ZiGi+1)+Ti-1(ZiZi+1+GiGi+1),i>0
其中sum_p1、carry_p1为第二个3∶2的CSA树(9)的两个输出,-表示按位取反,下标i表示第i位,若fi=1,而fj=0(j=0,1...i-1),则前导零个数LZN为i;
设半加器输入为x、y,输出为S、C,则其原理可表示为:
S=x^y,
C=(x&y)<<1,
第一个165比特的半加器(11)将第二个3∶2的CSA树(9)输出的sum_p1和carry_p1处理为输出sumHApos和carryHApos;
将sum_p1和carry_p1按位取反后作为第二个165比特的半加器(12)的输入,其输出为sumHAinv和carryHAinv,并将carryHAinv的最低位置为1;
将sumHAinv和carryHAinv作为第三个165比特的半加器(13)的输入,其输出为sumHAcom和carryHAcom,并将carryHAcom的最低位置为1,这样sumHAcom+carryHAcom就相当于sum_p1+carry_p1的补数形式了;
连续两条指令发生数据相关时,若前一条指令为加法或乘加指令,流水线将需要停滞等待一个时钟周期,在这个停滞等待的时钟周期里,符号预测逻辑(14)的输入为第二个165比特的移位器(16)的输出sum_p2、carry_p2,否则符号预测逻辑(14)的输入为sum_p1、carry_p1,符号预测逻辑(14)预测若将两个输入相加,其结果的正负,预测方法为判断两输入相加,最高位是否有进位产生,若有进位产生,则相加结果为负,将输出信号complement赋为1,否则complement=0;同时符号预测逻辑(14)还判断将两个输入的低110比特相加,有无进位产生,并根据判断结果产生另一输出carry_110LSBs:两个输入的低110比特相加,有进位产生时carry_110LSBs=1,否则carry_110LSBs=0;
选择器(15)根据符号预测的结果,从sumHApos、carryHApos和sumHAcom、carryHAcom中选择一对作为输出,其输出记为sumHA、carryHA,
complement=0时,sumHA=sumHApos,carryHA=carryHApos,
complement=1时,sumHA=sumHAcom,carryHA=carryHAcom;
第二个165比特的移位器(16)根据前导零预测的结果,对选择器(15)的输出向左进行移位,移位量为LZN,移位后的输出记为sum_p2和carry_p2;
与门(17)对符号预测逻辑(14)的输出complement和指数和符号处理单元(1)的输出sign_p1进行异或操作,得到A+B×C的符号;
第三级流水线由指数计算单元(18)、最终加/舍入单元(19)组成;其中,
指数计算单元(18),根据指数和符号处理单元(1)中得到的exp_p1、165比特的前导零预测单元(10)中得到的LZN和最终加/舍入单元(19)中是否发生1位左移计算A+B×C的指数,若最终加/舍入单元(19)中不发生1位左移,则A+B×C的指数为exp_p1-LZN,否则需要进行1比特的修正,最终A+B×C的指数将表示为exp_p1-LZN-1;
在最终加/舍入单元(19)中,首先将第二个165比特的移位器(16)的输出sum_p2和carry_p2相加,结果记为ABC_added,
ABC_added=sum_p2+carry_p2,
然后根据ABC_added和舍入模式进行舍入,有4种舍入模式:就近舍入RN,向正无穷舍入RP,向负无穷舍入RM,向零舍入RZ,这四种舍入模式能减少到三个:RN、RI、RZ;
对于负数,舍入模式RP可等效为RI,RM可等效为RN;对于正数,舍入模式RP可等效为RN,RM可等效为RI;
首先计算粘滞位st,若ABC_added的最高位为1,则st=|ABC_added[54:165],否则st=|ABC_added[55:165],这里|表示归约或操作;
然后根据st、ABC_added和舍入模式是RI、RN还是RZ,计算舍入结果的两个临时值,分别记为rounding_result_tmp1和rounding_result_tmp2,rounding_result_tmp1的计算方法如下:
若{RI=1},
{若{st=1,或ABC_added[53]=1},
{rounding_result_tmp1=ABC_added[0:52]+1;}
否则
{rounding_result_tmp1=ABC_added[0:52];} }
若{RI=0,且RN=1},
{若{ABC_added[53]=0},
{rounding_result_tmp1=ABC_added[0:52];}
若{ABC_added[53]=1,且st=1},
{rounding_result_tmp1=ABC_added[0:52]+1;}
若{ABC_added[53]=1,且ABC_added[52]=1},
{rounding_result_tmp1=ABC_added[0:52]+1;}
否则
{rounding_result_tmp1=ABC_added[0:52];} }
若{RI=0,且RN=0},
{rounding_result_tmp1=ABC_added[0:52]; }
rounding_result_tmp2的计算方法如下:
若{RI=1},
{若{st=1,或ABC_added[54]=1},
{rounding_result_tmp2=ABC_added[1:53]+1;}
否则
{rounding_result_tmp2=ABC_added[1:53];} }
若{RI=0,且RN=1},
{若{ABC_added[54]=0},
{rounding_result_tmp2=ABC_added[1:53];}
若{ABC_added[54]=1,且st=1},
{rounding_result_tmp2=ABC_added[1:53]+1;}
若{ABC_added[54]=1,且ABC_added[53]=1},
{rounding_result_tmp2=ABC_added[1:53]+1;}
否则
{rounding_result_tmp2=ABC_added[1:53];} }
若{RI=0,且RN=1},
{rounding_result_tmp2=ABC_added[1:53];}
最后根据ABC_added的最高位和rounding_result_tmp1的最高位从rounding_result_tmp1和rounding_result_tmp2中选取一个作为最终A+B×C的尾数,并决定指数计算单元(18)中的指数是否需要1比特的修正:
若rounding_result_tmp1的最高位为1且ABC_added的最高位为0,或者ABC_added的最高位为1时,选取rounding_result_tmp1作为最终结果,指数计算单元(18)中不需要1比特的修正,否则选取rounding_result_tmp2作为最终结果,指数计算单元(18)中需要1比特的修正。
本发明采用三级流水线实现,用VerilogHDL实现,通过验证后用0.18微米标准单元库进行电路综合。对综合结果进行时序分析,结果显示最大延时为3.47纳秒。用SPEC 2000评估显示,采用本发明后,相比普通的乘加单元,能够获得约25%的性能提升。
附图说明
图1是参考文献1:Floating-Point Multiply-Add-Fused with Reduced Latency中介绍的一种已有的乘加单元的结构框图;
图2是本发明的三级流水线实现的解决了数据相关的双精度浮点乘加单元的结构框图;
图3a是exp_B+exp_C-exp_A<52时,A相对B×C移位对齐后在数据通道中摆放的示意图;
图3a是exp_B+exp_C-exp_A≥52时,A相对B×C移位对齐后在数据通道中摆放的示意图;
图4是乘法压缩树具体实现的框图,这一压缩树由4个165比特的CSA组成。
具体实施方式
下面结合附图和具体实施方式对本发明作进一步的详细描述。
本发明采用三级流水线实现,用VerilogHDL实现,通过验证后用0.18微米标准单元库进行电路综合。
本发明的单精度并行浮点单元按时序划分为了三个流水节拍,下面参照图2,对整个工作过程进行说明。在本实施例中,仍以A+B×C表示一个乘加操作。
第一级流水线:A的移位对齐和B×C的波斯编码、部分积压缩,并经3:2 CSA树压缩后输出。
这里的A和B都可能来自上一条指令中间结果的回送,也就是说,它们都可能为55比特的进位保存表示的中间结果,组成A的两部分用A1、A2表示,组成B的两部分用B1、B2表示。
A1和A2的值分两种情况考虑:
当要执行的指令与上一条指令无数据相关时,或者虽发生了数据相关,但是上一条指令的结果不被用来作为该条指令的加数时,55比特的A1的前53比特为输入的被加数的尾数,后两比特为0,根据IEEE 754标准,双精度浮点数的尾数为其第13位到64位,其为规格化数时在最高位补1,否则在最高位补零,本发明针对的是规格化数,非规格化数将作为0看待,A2为0;
要执行的指令与上一条指令发生了数据相关,且上一条指令的结果被用来作为该条指令的加数时,又分为两种情况:
上一条指令为乘法指令,则A1、A2分别为第一级流水线的输出sum_p1、carry_p1(9的输出)的高55比特;
上一条指令为加法指令或乘加指令,则A1、A2分别为第二级流水线的输出sum_p2、carry_p2(16的输出)的高55比特;
B1和B2的值也分两种情况考虑:
当要执行的指令与上一条指令无数据相关时,或者虽发生了数据相关,数据相关的类型,但是上一条指令的结果不被用来作为该条指令的乘数时,55比特的B1的前53比特为输入的被乘数的尾数,后两比特为0,根据IEEE 754标准,双精度浮点数的尾数为其第13位到64位,其为规格化数时在最高位补1,否则在最高位补零,本发明针对的是规格化数,非规格化数将作为0看待,B2为0。
要执行的指令与上一条指令发生了数据相关,且上一条指令的结果被用来作为该条指令的乘数时,又分为两种情况:
上一条指令为乘法指令,则B1、B2分别为第一级流水线的输出sum_p1、carry_p1(9的输出)的高55比特。
上一条指令为加法指令或乘加指令,则B1、B2分别为第二级流水线的输出sum_p2、carry_p2(16的输出)的高55比特。
基4的波茨编码器5对C的尾数进行编码,然后将编码的结果与B1、B2相乘得到54个部分积,编码后的54个部分积的被送入3:2的进位保存(CSA)压缩树6中,CSA压缩树的构造分别在图4中做了详细的介绍,图4中每一个单元模块的输入x、y、z为3个要被压缩的165比特的数,输出S、C分别为压缩后的165比特的和字节和进位字节,其逻辑关系为:
S=x^y^z,
C=((x&y)|(x&z)|(y&z))<<1,
这里^、&和|分别表示按位异或、按位与和按位或操作,<<表示向右移位。
图4是一个将6个输入压缩为2个的3:2 CSA树的结构图,其输入in1~in6为6个165比特的数,输出为压缩后得到的和、进位字节。整个压缩树由4个165比特的CSA构成,将6个输入压缩为两个,需要3级的CSA树。
这里C为输入的被乘数,根据IEEE 754标准,双精度浮点数的尾数为其第13位到64位,其为规格化数时在最高位补1,否则在最高位补零,本发明针对的是规格化数,非规格化数将作为0看待。
当乘数B来自前一条指令的中间结果:第一级的输出(sum_p1、carry_p1)或第二级的输出(sum_p2、carry_p2)时,B1、B2仅取了中间结果的高55比特,中间结果的低110比特相加可能有进位产生,这一进位是要考虑的,本发明中考虑这一进位的方法是:当两条指令发生数据相关且前一指令的结果用做后一指令的一个乘数,当后一指令利用前一指令的中间结果进行计算时,若前一指令中间结果的低110比特有进位产生,则将7的控制信号ctrl2置高,将C并入CSA树6的输出端,实现(B1+B2+1)×C。
A的移位对齐、取反与B×C的波斯编码、部分积压缩并行执行。若A的符号与B×C的符号不同,则需要对其求补。求一个数的补数的方法为取反后加一。求补所需的加1可利用3:2 CSA进位字节最低位上的空位来实现。
在普通的乘加单元(这里以A+B×C表示一个普通的乘加操作)中,对A移位对齐的方法通常为:将其从B×C的最高位左侧26比特的位置开始存放,然后根据指数差向右进行移位。在A的最初存放位置和B×C的最高位之间有两个空位,目的是在A远大于B×C时确保能够正确的舍入。在本发明中,加数由两部分构成,若两部分同时被移出数据通道,移出数据通道的部分可能产生进位,这一进位的计算会增大延时,且这种情况下粘滞位的计算也很复杂,因此必须采用新的移位对齐策略,本发明中根据A、B、C的指数差,分两种情况,分别采用不同的移位对齐策略,这五种情况的划分方法如下:
exp_B+exp_C-exp_A<52
exp_B+exp_C-exp_A≥52
其中,exp_A、exp_B和exp_C分别是操作数A、B和C的指数,根据IEEE 754标准,双精度浮点数的指数为其第2位到第12位。
各种情况下的数据通道,以及A移位对齐后相对于B×C在数据通道中的摆放情况如图3所示。A由A1、A2两部分构成,还可能需要在最低位上加1(这一加1由常数CON表示),但是它们指数相同,在数据通道中移位的情况是一样的,所以在图3中都用A示意。
exp_B+exp_C-exp_A<52时,数据通道的构成如图3(a)所示,与普通的MAF一样,将A从165比特的数据通道的最高位开始摆放,B×C的置于165比特数据通道的低108位上。若A的指数比B×C大57甚至更多时,A1、A2和CON都不需移位,否则根据指数差与B×C对A1、A2和CON进行移位对齐;
exp_B+exp_C-exp_A≥52时,数据通道的构成如图3(b)所示,将B×C的置于165比特数据通道的高108位上,然后根据指数差与B×C对A1、A2和CON进行移位对齐,当A1、A2和CON的移位量大于110时,它们将会有部分别移出数据通道,此时A1、A2和CON在B×C的最低位的右侧,可将A1、A2和CON放置在数据通道的最低55比特上,而不继续移位。
总结上述2中情况可发现:
A1、A2和CON永远不会被移出数据通道,所以没有粘滞位产生,且被加数的求补将被大大简化:sign_A≠sign_Bsign_C(此时sub=1)时在3:2CSA树的两个进位保存压缩器的进位字节的最低位上加1即可,这里表示异或,sign_A、sign_B和sign_C分别是操作数A、B和C的符号位,根据IEEE 754标准,双精度浮点数的指数为其最高位。当ctrl=1时,还要增加一个求补所需的加1,在9的另一个进位保存压缩器的进位字节的最低位上加1即可。
当加数A来自前一条指令的中间结果:第一级的输出(sum_p1、carry_p1)或第二级的输出(sum_p2、carry_p2)时,A1、A2仅取了中间结果的高55比特,中间结果的低110比特相加可能有进位产生,这一进位是要考虑的,本发明中考虑这一进位的方法是:当两条指令发生数据相关且前一指令的结果用做后一指令的加数,当后一指令利用前一指令的中间结果进行计算时,若前一指令中间结果的低110比特有进位产生,则将4的控制信号ctrl1置高,将与A1、A2最低位对齐的1同A1、A2一样移位mv并由sub决定是否取反后并入到3的输出端。
第二级流水线:A、B移位对齐后的结果和C×D的部分积压缩后的结果经3:2 CSA树压缩后的结果进行进行前导零预测、符号预测、半加运算以及规格化移位。
将9的输出分别记为sum_p1和carry_p1,在第二级流水线中将sum_p1和carry_p1输入到前导零预测单元10中,计算前导零个数(记为LZN)。
如果下面直接对sum_p1和carry_p1进行规格化移位,再相加,若相加结果为负,还需要对其求补,增加了延时。避免这一延时的办法是在前导零预测的同时判断sum_p1和carry_p1的符号,若sum_p1和carry_p1<0,则选择sum_p1和carry_p1的补数表示进行后续的处理,如规格化移位、最终加和舍入等。这里求sum_p1和carry_p1的补数时所需的加1是利用半加器15和16的进位字节的最低位空位实现的。
当sum_p1和carry_p1的高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_tmp1和rounding_result_tmp2,若rounding_result_tmp1的最高位为1且ABC_added的最高位为0,或者ABC_added的最高位为1时,选取rounding_result_tmp1作为最终结果,否则选取rounding_result_tmp2作为最终结果。
18中根据1中计算出的数据通道的临时指数和13中计算出的规格化移位量计算A+B×C的指数,然后根据19的运算结果进行修正:若rounding_result_tmp2被选为最终结果,将指数减1。
本发明中仅回送中间结果的高55比特,但是精度并不低于普通的MAF中,先舍入成53比特的尾数,再用于下一条指令的计算,分析如下:
对于双精度浮点数,尾数为53位,浮点运算中第54位被称为监督位(guard bit),54位之后的位被用来产生粘滞位,其属性只有两个:全为0和不全为0,若采用普通的四舍五入,粘滞位对结果是不产生影响的,在IEEE 754所规定的几种舍入方式里,除截断舍入,粘滞位都将影响最终结果,但是对结果精确度的影响很小。
例如:guard bit=0,粘滞位为1,向无穷舍入时,结果将为前53bits加1,但真实结果更接近前53bits不加1的结果。
所以可以仅回送guard bit及其更高的位。又因为中间结果可能有一个前导零,所以应回送中间结果的前55bits,后面的位上可能有进位产生,该进位需要被考虑,本发明中很好的处理了该进位。
Claims (1)
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,
计算A+B×C的临时符号sign_p1,
计算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输出,按位取反器(3)的输出记为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,
设半加器输入为x、y,输出为S、C,则其原理可表示为:
S=x^y,
C=(x&y)<<1,
第一个165比特的半加器(11)将第二个3:2的CSA树(9)输出的sum_p1和carry_p1处理为输出sumHApos和carryHApos;
将sum_p1和carry_p1按位取反后作为第二个165比特的半加器(12)的输入,其输出为sumHAinv和carryHAinv,并将carryHAinv的最低位置为1;
将sumHAinv和carryHAinv作为第三个165比特的半加器(13)的输入,其输出为sumHAcom和carryHAcom,并将carryHAcom的最低位置为1,这样sumHAcom+carryHAcom就相当于sum_p1+carry_p1的补数形式了;
连续两条指令发生数据相关时,若前一条指令为加法或乘加指令,流水线将需要停滞等待一个时钟周期,在这个停滞等待的时钟周期里,符号预测逻辑(14)的输入为第二个165比特的移位器(16)的输出sum_p2、carry_p2,否则符号预测逻辑(14)的输入为sum_p1、carry_p1,符号预测逻辑(14)预测若将两个输入相加,其结果的正负,预测方法为判断两输入相加,最高位是否有进位产生,若有进位产生,则相加结果为负,将输出信号complement赋为1,否则complement=0;同时符号预测逻辑(14)还判断将两个输入的低110比特相加,有无进位产生,并根据判断结果产生另一输出carry_110LSBs:两个输入的低110比特相加,有进位产生时carry_110LSBs=1,否则carry_110LSBs=0;
选择器(15)根据符号预测的结果,从sumHApos、carryHApos和sumHAcom、carryHAcom中选择一对作为输出,其输出记为sumHA、carryHA,
complement=0时,sumHA=sumHApos,carryHA=carryHApos,
complement=1时,sumHA=sumHAcom,carryHA=carryHAcom;
第二个165比特的移位器(16)根据前导零预测的结果,对选择器(15)的输出向左进行移位,移位量为LZN,移位后的输出记为sum_p2和carry_p2;
与门(17)对符号预测逻辑(14)的输出complement和指数和符号处理单元(1)的输出sign_p1进行异或操作,得到A+B×C的符号;
第三级流水线由指数计算单元(18)、最终加/舍入单元(19)组成;其中,
指数计算单元(18),根据指数和符号处理单元(1)中得到的exp_p1、165比特的前导零预测单元(10)中得到的LZN和最终加/舍入单元(19)中是否发生1位左移计算A+B×C的指数,若最终加/舍入单元(19)中不发生1位左移,则A+B×C的指数为exp_p1-LZN,否则需要进行1比特的修正,最终A+B×C的指数将表示为exp_p1-LZN-1;
在最终加/舍入单元(19)中,首先将第二个165比特的移位器(16)的输出sum_p2和carry_p2相加,结果记为ABC_added,
ABC_added=sum_p2+carry_p2,
然后根据ABC_added和舍入模式进行舍入,有4种舍入模式:就近舍入RN,向正无穷舍入RP,向负无穷舍入RM,向零舍入RZ,这四种舍入模式能减少到三个:RN、RI、RZ;
对于负数,舍入模式RP可等效为RI,RM可等效为RN;对于正数,舍入模式RP可等效为RN,RM可等效为RI;
首先计算粘滞位st,若ABC_added的最高位为1,则st=|ABC_added[54:165],否则st=|ABC_added[55:165],这里|表示归约或操作;
然后根据st、ABC_added和舍入模式是RI、RN还是RZ,计算舍入结果的两个临时值,分别记为rounding_result_tmp1和rounding_result_tmp2,rounding_result_tmp1的计算方法如下:
若{RI=1},
{ 若{st=1,或ABC_added[53]=1},
{rounding_result_tmp1=ABC_added[0:52]+1;}
否则
{rounding_result_tmp1=ABC_added[0:52];} }
若{RI=0,且RN=1},
{ 若{ABC_added[53]=0},
{rounding_result_tmp1=ABC_added[0:52];}
若{ABC_added[53]=1,且st=1},
{rounding_result_tmp1=ABC_added[0:52]+1;}
若{ABC_added[53]=1,且ABC_added[52]=1},
{rounding_result_tmp1=ABC_added[0:52]+1;}
否则
{rounding_result_tmp1=ABC_added[0:52];} }
若{RI=0,且RN=0},
{rounding_result_tmp1=ABC_added[0:52];}
rounding_result_tmp2的计算方法如下:
若{RI=1},
{ 若{st=1,或ABC_added[54]=1},
{rounding_result_tmp2=ABC_added[1:53]+1;}
否则
{rounding_result_tmp2=ABC_added[1:53];} }
若{RI=0,且RN=1},
{ 若{ABC_added[54]=0},
{rounding_result_tmp2=ABC_added[1:53];}
若{ABC_added[54]=1,且st=1},
{rounding_result_tmp2=ABC_added[1:53]+1;}
若{ABC_added[54]=1,且ABC_added[53]=1},
{rounding_result_tmp2=ABC_added[1:53]+1;}
否则
{rounding_result_tmp2=ABC_added[1:53];} }
若{RI=0,且RN=1},
{ rounding_result_tmp2=ABC_added[1:53];}
最后根据ABC_added的最高位和rounding_result_tmp1的最高位从rounding_result_tmp1和rounding_result_tmp2中选取一个作为最终A+B×C的尾数,并决定指数计算单元(18)中的指数是否需要1比特的修正:
若rounding_result_tmp1的最高位为1且ABC_added的最高位为0,或者ABC_added的最高位为1时,选取rounding_result_tmp1作为最终结果,指数计算单元(18)中不需要1比特的修正,否则选取rounding_result_tmp2作为最终结果,指数计算单元(18)中需要1比特的修正。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2007101799755A CN101221490B (zh) | 2007-12-20 | 2007-12-20 | 一种具有数据前送结构的浮点乘加单元 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2007101799755A CN101221490B (zh) | 2007-12-20 | 2007-12-20 | 一种具有数据前送结构的浮点乘加单元 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101221490A CN101221490A (zh) | 2008-07-16 |
CN101221490B true CN101221490B (zh) | 2010-11-10 |
Family
ID=39631354
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2007101799755A Active CN101221490B (zh) | 2007-12-20 | 2007-12-20 | 一种具有数据前送结构的浮点乘加单元 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101221490B (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101751239B (zh) * | 2009-12-31 | 2011-06-08 | 西北工业大学 | 高速浮点规格化运算器 |
CN101916177B (zh) * | 2010-07-26 | 2012-06-27 | 清华大学 | 一种可配置多精度定点乘加装置 |
US8914430B2 (en) * | 2010-09-24 | 2014-12-16 | Intel Corporation | Multiply add functional unit capable of executing scale, round, GETEXP, round, GETMANT, reduce, range and class instructions |
GB2539265B (en) * | 2015-06-12 | 2020-07-29 | Advanced Risc Mach Ltd | Apparatus and method for controlling rounding when performing a floating point operation |
CN105607889A (zh) * | 2015-10-29 | 2016-05-25 | 中国人民解放军国防科学技术大学 | Gpdsp共享乘法器结构的定点浮点运算部件 |
CN105718423A (zh) * | 2016-01-19 | 2016-06-29 | 清华大学 | 一种流水可重构的单精度浮点fft/ifft协处理器 |
CN109117114B (zh) * | 2018-08-16 | 2023-06-02 | 电子科技大学 | 一种基于查找表的低复杂度近似乘法器 |
CN111338695B (zh) * | 2018-12-19 | 2022-05-17 | 中科寒武纪科技股份有限公司 | 基于流水线技术的数据处理方法及相关产品 |
BR112021009911A2 (pt) * | 2018-12-29 | 2021-08-17 | Huawei Technologies Co., Ltd. | codificador, decodificador e métodos correspondentes usando armazenamento de mv compacto |
CN113168308A (zh) * | 2020-04-20 | 2021-07-23 | 深圳市大疆创新科技有限公司 | 浮点累加装置、方法和计算机存储介质 |
CN112230882B (zh) * | 2020-10-28 | 2021-06-01 | 海光信息技术股份有限公司 | 浮点数处理装置、浮点数加法装置及浮点数处理方法 |
CN113377334B (zh) * | 2021-08-16 | 2021-11-02 | 北京微核芯科技有限公司 | 一种浮点数据处理方法、装置及存储介质 |
CN114327359A (zh) * | 2021-12-07 | 2022-04-12 | 江苏华创微系统有限公司 | 三输入前导零预测算法 |
CN116954551A (zh) * | 2022-12-09 | 2023-10-27 | 腾讯科技(深圳)有限公司 | 一种数据处理方法、装置、设备及存储介质 |
CN221466006U (zh) * | 2023-02-15 | 2024-08-02 | 声龙(新加坡)私人有限公司 | 一种逻辑运算电路,安全散列算法的压缩电路和芯片 |
CN116643718B (zh) * | 2023-06-16 | 2024-02-23 | 合芯科技有限公司 | 一种流水线结构的浮点融合乘加装置、方法及处理器 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6542915B1 (en) * | 1999-06-17 | 2003-04-01 | International Business Machines Corporation | Floating point pipeline with a leading zeros anticipator circuit |
CN1831753A (zh) * | 2005-03-08 | 2006-09-13 | 中国科学院计算技术研究所 | 一种浮点乘法器及其兼容双精度和双单精度计算的方法 |
CN1924798A (zh) * | 2005-09-02 | 2007-03-07 | 中国科学院计算技术研究所 | 一种64比特浮点乘加器及其流水节拍划分方法 |
-
2007
- 2007-12-20 CN CN2007101799755A patent/CN101221490B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6542915B1 (en) * | 1999-06-17 | 2003-04-01 | International Business Machines Corporation | Floating point pipeline with a leading zeros anticipator circuit |
CN1831753A (zh) * | 2005-03-08 | 2006-09-13 | 中国科学院计算技术研究所 | 一种浮点乘法器及其兼容双精度和双单精度计算的方法 |
CN1924798A (zh) * | 2005-09-02 | 2007-03-07 | 中国科学院计算技术研究所 | 一种64比特浮点乘加器及其流水节拍划分方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101221490A (zh) | 2008-07-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101221490B (zh) | 一种具有数据前送结构的浮点乘加单元 | |
CN100570552C (zh) | 一种并行浮点乘加单元 | |
CN101174200B (zh) | 一种具有五级流水线结构的浮点乘加融合单元 | |
US8965945B2 (en) | Apparatus and method for performing floating point addition | |
Pineiro et al. | Algorithm and architecture for logarithm, exponential, and powering computation | |
JP5273866B2 (ja) | 乗算器/アキュムレータ・ユニット | |
US7698353B2 (en) | Floating point normalization and denormalization | |
US7720900B2 (en) | Fused multiply add split for multiple precision arithmetic | |
US8463834B2 (en) | Floating point multiplier with first and second partial product shifting circuitry for result alignment | |
US5633819A (en) | Inexact leading-one/leading-zero prediction integrated with a floating-point adder | |
Bruguera et al. | Floating-point fused multiply-add: reduced latency for floating-point addition | |
CN107608655B (zh) | 微处理器中执行fma指令的方法和微处理器 | |
Hickmann et al. | A parallel IEEE P754 decimal floating-point multiplier | |
US20070050434A1 (en) | Data processing apparatus and method for normalizing a data value | |
CN101770355B (zh) | 兼容双精度和双单精度的浮点乘加器及其兼容处理方法 | |
US7437400B2 (en) | Data processing apparatus and method for performing floating point addition | |
Arunachalam et al. | Efficient dual-precision floating-point fused-multiply-add architecture | |
Quinnell et al. | Bridge floating-point fused multiply-add design | |
CN116594590A (zh) | 一种浮点数据的多功能运算装置及方法 | |
US5260889A (en) | Computation of sticky-bit in parallel with partial products in a floating point multiplier unit | |
US20130124592A1 (en) | Operand-optimized asynchronous floating-point units and method of use thereof | |
US9430190B2 (en) | Fused multiply add pipeline | |
JPH08212058A (ja) | 加算オーバフロ検出回路 | |
Tsen et al. | A combined decimal and binary floating-point multiplier | |
CN100476718C (zh) | 一种64比特浮点乘加器及其流水节拍划分方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |