一种64比特浮点乘加器及其流水节拍划分方法

文档序号:6639425阅读:271来源:国知局
专利名称:一种64比特浮点乘加器及其流水节拍划分方法
技术领域
本发明涉及浮点乘加器,特别涉及到一种64比特浮点乘加器及其流水节拍划分方法。
背景技术
为了达到浮点计算的高效率,在许多处理器中浮点乘法和加法都使用一个浮点运算单元浮点乘加部件来实现。乘加(FMAF)指令需要3个操作数。例如,执行(A×B)+C操作,当把乘加指令中操作数C置为0时执行的是乘法指令,把操作数B置为1时,执行的是加法指令。在已实现的多数处理器中,浮点乘加运算一般通过以下步骤来实现(相关内容请见参考文献1Floating-Point Multiply-Add-Fused with ReducedLatency和参考文献2Architectural design of a fast floating-point multiplication-addfused unit using signed-digit addition)1、操作数A×B利用乘法压缩树进行压缩,得到carry(进位)和sum(和)两个部分积。在进行乘法树压缩的同时,操作数C进行取反和对齐移位操作。
在运算时,操作数A×B和C的符号可能相同,也可能相反。如果A×B和C的符号相反,将A×B和C做有效减法,需要得到C的补码进行相加,C需要取反。否则如果A×B和C的符号相同做有效加法,C不需要取反。
在IEEE754标准中,双精度C操作数的尾数是53比特,再加上2个额外的舍入(rounding)比特,取反后得到的Cinv比A×B的结果的最高位最多左移55位,或者比A×B结果的最高位最多右移106比特,即移位范围在(-55,106)之间。在浮点乘加的设计中为了使移位简单化,规一化Cinv的移位方向位为向右移位。所以Cinv初始是在A×B左移55比特的初始位置,Cinv在对齐中右移位的位数是56-d=56-(exp(C)-(exp(A)+exp(B)-1023)),其中,exp(A),exp(B)和exp(C)分别是操作数A,B和C的指数。当56-d小于零时,Cinv不移位,56-d大于161时最多向右移位161比特。
2、把对齐移位后的Cinv和A×B压缩后的carry和sum用压缩比为3∶2的CSAtree压缩,得到两个部分积。
3、把2中压缩后得到的部分积做加法运算,同时利用这两个部分积进行LZA(leading zero anticipator,首位0的个数预测)得到加法结果的规格化左移的位数。
4、加法结果利用LZA预测的左移的位数进行规格化左移和舍入操作。
在处理器中采用与浮点乘加运算相对应的浮点乘加部件,与单纯的乘法器和加法器相比,采用浮点乘加部件有以下两个好处①降低了用乘法器和加法器执行乘加指令的延迟。通常的处理器中实现的浮点乘法是2~4拍,浮点加法2~3拍,而浮点乘加指令的延迟一般在3~4拍左右,可以看出一条浮点乘法指令接着一条浮点加法指令所需要的节拍数之和大于等于一条浮点乘加的执行节拍数,所以采用浮点乘加指令降低了先乘后加(乘加)的指令序列的延迟。
②比乘法器和加法器的硬件开销之和要小,而且提高了乘加指令结果的精度。从上面步骤可以看出,浮点乘加只在A×B+C结束后做一次舍入(rounding)和规格化(normalization),而用乘法和加法指令来实现浮点乘加需要先进行乘法的舍入和规格化,然后进行加法的舍入和规格化,要做两次舍入和规格化。只做一次舍入和规格化使得浮点乘加器硬件规模比浮点乘法器和浮点加法器之和的硬件规模要小一些。并且在浮点乘加器中,进行舍入的数据长度是161比特,提高了浮点运算的精度。
在现有技术中,浮点乘加部件一般用一个27∶2的乘法压缩树(carry save addertree,以下简称CSA tree)来压缩A×B的结果,然后再用一个3∶2 CSA tree来压缩操作数C取反移位对齐的结果和A×B乘法压缩得到的carry和sum(相关的具体内容请见参考文献3Floating-Point Multiply-Add-Fused with Reduced Latency)。这样设计的浮点乘加器对于流水节拍的时延的均衡划分造成了很大困难,27∶2的CSA tree的延迟比较大,如果放在一个流水节拍内完成,就会成为整个浮点乘加器的最关键路径,限制了浮点乘加器的运行速度。

发明内容
本发明的目的是克服现有技术中,流水节拍时延不均衡,限制浮点乘加器运行速度的缺点,提供一种64比特浮点乘加器的流水节拍划分方法,实现对流水节拍时延的均衡划分。
本发明的另一个目的是提供一种与64比特浮点乘加器的流水节拍划分方法相对应的64比特浮点乘加器。
为了实现上述目的,本发明提供了一种64比特浮点乘加器的流水节拍划分方法,实现形式为(A×B)+C的乘加运算,具体包括以下步骤1)、在第一个流水节拍中,首先对操作数C做取反、移位操作,然后将B的尾数经过基2的波茨编码,得到27个编码结果,编码结果与A相乘,得到27个部分积,最后采用2个压缩比为14∶2的乘法压缩树,同时压缩27个部分积和操作数C取反移位后的结果,得到2个“和”及2个“进位”,分别标记为sum1,carry1,sum2,carry2;2)、在第二个流水节拍中,用一个4∶2的乘法压缩树压缩步骤1)得到的2个“和”及2个“进位”,生成压缩后的“进位”与“和”,分别用carry和sum表示,然后对carry和sum做正半加运算和取反半加运算,得到2组半加运算的结果,分别用sumHApos,carryHApos和sumHAinv,carryHAinv表示,同时对carry和sum之和进行首位0的个数检测,预测结果用一个序列表示,该序列标记为f,最后还需要对carry和sum之和进行符号检测,得到检测结果指示信号,该信号用complement表示,根据complement选择2组半加运算结果sumHApos,carryHApos,sumHAinv,carryHAinv中的一组,所得到的结果用sumHA,carryHA表示;3)、在第三个流水节拍中,把步骤2)中的首0个数预测得到的序列f进行编码,得到一个7比特数据S,同时对步骤2)中得到的结果sumHA,carryHA进行53比特预移位,然后再根据S进行108比特的移位,得到2个结果,用sumnorm和carrynorm来表示;4)、在第四个流水节拍中,利用步骤3)得到的sumnorm和carrynorm的高53位做加法,得到2个结果res0和res1,同时对sumnorm和carrynorm的低108比特进行舍入得到一个进位符号cin,然后用cin来选择res0和res1,得到最后乘加的尾数结果res。
一种64比特浮点乘加器,四个流水节拍部分包括第一个流水节拍部分由指数处理单元1、取反器2、161比特对齐移位器3、基2的波茨编码器4、14∶2的乘法压缩树5、14∶2的乘法压缩树6组成;其中,指数处理单元1根据操作数A的指数,B的指数和C的指数计算d=exp(C)-(exp(A)+exp(B)-1023)的符号,56-d的值,以及d≤2或d=0或d=1的控制信号的值;取反器2,如果C的符号位和A×B的符号位不同,C的尾数做每比特的取反操作,如果C的符号位和A×B的符号位相同,则不作取反操作,并将操作结果送入161比特对齐移位器3中;161比特对齐移位器3收到取反器2输出的结果后,根据指数处理单元1得到的56-d的值,对C的尾数进行161比特移位,移位输出的低106比特结果送入2个14∶2的乘法压缩树5、6中,移位输出的高55比特送入161比特正半加器9和161比特取反半加器10中;基2的波茨编码器4对B的尾数进行编码,然后将编码的结果与A的尾数相乘得到27个部分积,编码后的部分积的0~13部分积送入14∶2的乘法压缩树5,14~27部分积送入14∶2的乘法压缩树6;14∶2的乘法压缩树5和6压缩A×B的部分积,以及操作数C尾数对齐移位后结果,得到标记为carry1,sum1,carry2,sum2的4个80比特数据;第二个流水节拍由压缩比为4∶2的乘法压缩树7、108比特首0检测LZA8、161比特正半加器9、161比特取反半加器10、106比特符号检测器11、161比特的选择器12组成;其中,4∶2的乘法压缩树7输入14∶2的乘法压缩树5和6输出的carry1,sum1,carry2,sum2,对这4个80比特数据做压缩操作,carry2和sum2要比carry1和sum1左移26比特,进行移位压缩,最后输出2个106比特的结果sum和carry;106比特的首0检测LZA8检测4∶2的乘法压缩树7输出的sum和carry中的首0比特,得到106比特首零指示序列f;161比特正半加器9将161比特对齐移位器3输出的C取反移位后的高55比特和4∶2的乘法压缩树7输出的sum做合并,然后将carry的比特高位填0,得到两个数据,然后对这两个数据进行半加运算,得到两个结果sumHApos,carryHApos,送入161比特选择器12中;161比特取反半加器10是将161比特对齐移位器3输出的C取反移位后的高55比特和4∶2的乘法压缩树7输出的做sum合并,把sum和carry取反,carry高位填充1得到两个个数据,然后对这两个数据进行半加运算,得到两个结果sumHAinv,carryHAinv,送入161比特选择器12中;
106比特的符号检测器11判断carry和sum相加的符号,如果两个相加的结果为负,将检测结果指示信号complent的值设置为1,反之,当相加的结果为正,将检测结果指示信号complement的值设置为0,所得到的complement的值送入161比特选择器12中;161比特选择器12根据106比特的符号监测器11输出的complement的值,对161比特正半加器9和161比特取反半加器10输出的结果做选择,当complement的值为1时,sumHA=sumHAinv,carryHA=carryHAinv;反之,当complement的值为0时,sumHA=sumHApos,carryHA=carryHApos,选择得到的结果送入移位器14中;第三个流水节拍由108比特首0位置编码LZD13、移位器14、乘加指数结果计算单元15组成;其中,108比特首0位置编码LZD13对106比特的首0检测LZA8输出的f进行编码,编码后得到一个7比特结果S,并输出到移位器14中;移位器14由53比特移位器和108比特移位器组成,当LZD进行编码的同时,对161比特选择器12输出的结果进行53比特的条件移位,当d≤2时,对161比特选择器12输出的sumHA和carryHA做53比特移位,否则不进行移位,当LZD产生S后,根据S的值,再做108比特的移位,移位后的结果用sumnorm和carrynorm表示,并输出该结果到53比特双加法器16和低108比特舍入逻辑17;乘加指数结果计算单元15对操作数A,B,C的指数和d的符号位,以及移位器14最后移位的总位数进行计算,得到最后的浮点乘加器运算结果的指数位;第四个流水节拍由53比特双加法器16、低108比特舍入逻辑17和53比特选择器18组成;其中53比特双加法器16根据移位器14输出的sumnorm和carrynorm计算sumnorm+carrynorm和sumnorm+carrynorm+1的值,所得到的sumnorm+carrynorm记为res0,sumnorm+carrynorm+1记为res1,并将得到的res0和res1输出到53比特选择器18中;低108比特的舍入逻辑17根据处理器的舍入模式对移位器14输出的sumnorm和carrynorm的低108比特的数据做舍入操作,如果有舍入进位,则cin=1,否则没有舍入进位,则cin=0;53比特选择器18根据低108比特的舍入逻辑17输出的cin位选择最后输出的尾数结果,当cin=1时,有进位选择,结果是res1,当cin=0时,没有舍入进位选择,结果是res0。
所述的14∶2的乘法压缩树5和14∶2的乘法压缩树6能够同时压缩A×B结果的27个部分积,以及取反对齐移位后的加数C;在压缩时,部分积的0~13部分积用14∶2乘法压缩树5来压缩,乘法部分积的14~27部分积用14∶2乘法压缩树6来压缩;14∶2乘法压缩树5的0~23比特低位空位填充对齐移位后加数C的0~23比特,14∶2乘法压缩树6的第14个空位填充对齐移位后加数C的105~24比特。
所述的14∶2的乘法压缩树5和6由6级的压缩比为3∶2的乘法压缩树构建,在6级中按照4-3-2-1-1-1的个数做分布,14∶2的乘法压缩树有14个比特部分积输入端,这些输入端用in0~in13表示,实现10比特的低位进位输入,10比特的高位进位输出,乘法压缩树有2比特的结果输出端,输出压缩结果sum和carry。
所述的同时压缩A×B结果的27个部分积,以及取反对齐移位后的加数C时,取反对齐移位后的加数C输入14∶2的乘法压缩树的in0,A×B结果的部分积输入in1~in13。
本发明的优点在于1、本发明的64比特浮点乘加器的流水节拍划分方法缩短了第一个节拍的延迟,增加了第二个节拍的延迟,均衡了流水节拍。
2、取反对齐移位后的加数C利用14∶2的乘法压缩树的空位进行压缩,在不增加硬件的情况下,实现取反对齐移位后的加数C和乘法的部分积共同压缩。
3、在第一个流水节拍中,利用文中所述的14∶2的乘法压缩树,把实现取反对齐移位后的加数C送入in0的位置,使得C对齐移位以及一级3∶2的CSA延迟之和,和乘法树编码压缩的延迟相当,均衡了第一拍内部的延迟。


图1是本发明的64比特浮点乘加器的流水结构框图;图2a是本发明的64比特浮点乘加器将B的尾数经过基2的波茨编码后产生的27个编码和A的尾数相乘得到的27个部分积的示意图;图2b是将图2a中的27个部分积做分割并利用空位填充移位对齐加数C的0~23比特的示意图;图2c是将图2a中的27个部分积做分割并利用空位填充移位对齐加数C的105~24比特的示意图;图3是14∶2乘法压缩树构造图。
图面说明1 指数处理单元 2 取反器 3 161比特对齐移位器4 booth-2编码器5 14∶2的乘法压缩树树6 14∶2的乘法压缩树7 4∶2的乘法压缩树8 108比特首0检测LZA9 161比特正半加器10 161比特取反半加器11 106比特符号检测器12 161比特的选择器 13 108比特首0位置编码LZD14 移位器 15乘加指数结果计算单元 16 53比特双加法器17 低108比特舍入逻辑18 53比特选择器在图2b中,部分积13右侧的26比特空位用来填充移位后加数的0~25空位在图2c中,部分积26下的80比特空位用来填充移位后加数的26~105比特位具体实施方式
下面结合附图和具体实施方式
对本发明作进一步详细描述。
本发明的64比特浮点乘加器的流水节拍划分方法将浮点乘加器的操作过程按照时序划分为4个流水节拍,按照顺序对4个流水节拍的功能分别描述如下。在本实施例中,仍以(A×B)+C表示一个乘加操作。
在第一个流水节拍中,首先对操作数C做取反、移位操作,然后将B的尾数经过基2的波茨编码,得到27个编码结果,编码结果与A相乘,得到27个部分积,最后采用2个压缩比为14∶2的乘法压缩树,同时压缩27个部分积和操作数C取反移位后的结果,得到2个“和”及2个“进位”,分别标记为sum1,carry1,sum2,carry2。
在本实施例中,压缩比为14∶2的CSA tree利用平行四边形乘法压缩树的空位,实现了双精度浮点乘法部分积,和对齐移位后的操作数C共用乘法压缩树。双精度尾数的53比特经过booth-2(基2的波茨)编码得到27个部分积,直接压缩这27个部分积需要27∶2的CSA tree。为了降低这一拍流水节拍延迟,在本实施例中,把27∶2的CSA tree划分为两个14∶2的CSA tree进行部分积压缩。这样的划分在面积上没有增加,两个14∶2的CSA tree压缩延迟要比27∶2的CSA tree的延迟要降低一个3∶2的CSA的延迟。
划分27个部分积压缩树的方法如图2a-图2c所示。从图中可以看出两个乘法树都有一些空位没有数据填充压缩,为了节省面积,采用了把移位好的加数C填充到这些空位上,用乘法树进行压缩的方法。例如,在图2b和图2c中,对齐移位后的Cinv(C取反后的结果)的低106比特送入2个14∶2的CSA tree中,0~25比特送入第一个CSA tree中低26比特的空挡中,105~26比特送入第二个CSA tree的第14个部分积的80比特空档中。这样并没有增加14∶2 CSA tree的压缩时延,另一方面节省了在流水节拍中需存储对齐加数C的106个寄存器,尽量减少了由于划分流水节拍所增加的寄存器硬件。
在第二个流水节拍中,用一个4∶2的乘法压缩树压缩步骤1)得到的2个“和”及2个“进位”,生成压缩后的“进位”与“和”,分别用carry和sum表示,然后对carry和sum做正半加运算和取反半加运算,得到2组半加运算的结果,分别用sumHApos,carryHApos和sumHAinv,carryHAinv表示,同时对carry和sum之和进行首位0的个数检测,预测结果用一个序列表示,该序列标记为f,最后还需要对carry和sum之和进行符号检测,得到检测结果指示信号,该信号用complement表示,根据complement选择2组半加运算结果sumHApos,carryHApos,sumHAinv,carryHAinv中的一组,所得到的结果用sumHA,carryHA表示。与现有技术相比,第二个流水节拍从原来的3∶2的CSA变为4∶2的CSA,增加了一级3∶2的CSA tree,这样把第一个流水节拍的延迟分一部分到第二个流水节拍,起到均衡流水节拍的目的。
在第三个流水节拍中,把第二流水节拍得到的首0个数预测得到的序列f进行编码,得到一个7比特数据S,同时对第二流水节拍中得到的结果sumHA,carryHA进行53比特预移位,然后再根据S进行108比特的移位,得到2个结果,用sumnorm和carrynorm来表示。
在第四个流水节拍中,利用第三流水节拍得到的sumnorm和carrynorm的高53位做加法,得到2个结果res0和res1,同时对sumnorm和carrynorm的低108比特进行舍入得到一个进位符号cin,然后用cin来选择res0和res1,得到最后乘加的尾数结果res。
本发明为了降低对齐操作数C移位后经过14∶2压缩树的路径延迟,使得其和14∶2压缩树的延迟相当,设计了一种14∶2的CSA tree结构。如图3所示,对齐后的操作数C填充到14∶2的CSAtree的最后一级in0比特。从图中可以看出14∶2的CSA tree压缩总共需要六级压缩比为3∶2的CSA,而C操作数的路径只经过取反、对齐移位和一级3∶2的CSA操作,在实现上和波茨编码以及六级3∶2的CSA的延迟相当,没有在乘法树和移位上增加额外的延迟的基础上,均衡了第一拍中每条路径的延迟。
根据本发明的浮点乘加器流水节拍划分方法所划分的浮点乘加器的4个流水节拍,第一拍的时延关键路径为操作数C取反,经过161比特移位,然后经过14∶2CSAtree中的一级3∶2CSA。第二拍的时延关键路径是4个部分积经过4∶2 CSA tree,然后经过106比特符号检测器,最后经过选择器,得到半加器的结果。第三拍的时延关键路径是经过108比特首0位置编码LZD,然后再进行108比特移位。第四拍的时延关键路径是低108比特的舍入逻辑产生进位,和1个53比特选择器。这4个流水节拍的关键路径的时延,在实现上是基本相同的,起到了均衡各个流水节拍的效果。
本发明还提供了一种与流水节拍划分方法相对应的浮点乘加器。如图1所示,本发明的浮点乘加器被划分为四个流水节拍,第一个流水节拍包括指数处理单元1、取反器2、161比特对齐移位器3、booth-2(基2的波茨)编码器4、14∶2的CSA tree(部分积压缩树)5、14∶2的CSA tree(部分积压缩树)6。第二个流水节拍包括压缩比为4∶2的CSA tree 7、108比特首0检测LZA 8、161比特正半加器9、161比特取反半加器10、106比特符号检测器11、161比特的选择器12。第三个流水节拍包括108比特首0位置编码LZD 13、移位器14、乘加指数结果计算单元15。第四个流水节拍包括53比特双加法器16、低108比特舍入逻辑17和53比特选择器18。下面对各个单元的功能分别进行描述。
指数处理单元1的作用是根据操作数A,B,C的指数得到d=exp(C)-(exp(A)+exp(B)-1023)的符号,56-d的值,以及d≤2或d=0或d=1的控制信号的值。
取反器2是对C的尾数做每比特的条件取反操作,如果C的符号位和A×B的符号位不同,C的尾数做每比特的取反操作,如果C的符号位和A×B的符号位相同,则不作取反操作。
161比特对齐移位器3是做161比特的对齐移位,根据56-d的值对C的尾数进行161比特移位,移位输出的低106比特结果送入2个14∶2的CSA tree中。
booth-2(基2的波茨)编码器4是对B的尾数进行编码,得到27个部分积。编码后的部分积的0~13送入第一个14∶2的CSA tree,14~27部分积送入第二个14∶2的CSA tree。
14∶2的CSA tree 5和6是用来压缩A×B的部分积,以及对齐移位后操作数C尾数的106比特。
4∶2的CSA tree 7的作用是压缩5和6单元送出的carry1,sum1,carry2,sum2这4个80比特数据,carry2和sum2要比carry1和sum1左移26比特进行移位压缩,最后得到2个106比特的结果sum和carry。
106比特的首0检测LZA 8用来检测7单元输出sum和carry的首0比特,得到106比特首零指示数据f。
161比特正半加器9是将单元3输出的高55比特和sum合并,carry比特高位填0得到2个数据,然后对这2个数据进行半加运算得到两个结果sumHApos,carryHApos。
161比特取反半加器10是将单元3输出的高55比特和sum合并,把sum和carry取反,carry高位填充1得到2个数据,然后对这2个数据进行半加运算,得到两个结果sumHAinv,carryHAinv。
106比特的符号监测器11是用来判断carry和sum相加的符号,如果两个相加为负时complent=1,反之为正时complement=0。
161比特选择器12是根据106比特的符号监测器11的结果做选择,当complement=1时,输出信号sumHA=sumHAinv,carryHA=carryHAinv;反之,complement为0时sumHA=sumHApos,carryHA=carryHApos。
108比特首0位置编码LZD 13是对106比特的首0检测LZA 8输出的f进行编码,得到一个7比特结果S[6:0]。
移位器14是由53比特移位器和108比特移位器组成的,当LZD进行编码的同时,对12输出的sumHA和carryHA进行53比特的条件移位,当d≤2时对12输出的sumHA和carryHA53比特移位,否则不进行移位。当LZD产生S[6:0]后,根据S的值进行移位,最多时108比特的移位。
乘加指数结果计算单元15利用操作数A,B,C的指数和d的符号位,以及移位器14最后移位的总位数进行计算得到最后的浮点乘加器结果的指数位。
53比特双加法器16用来计算sumnorm+carrynorm,和sumnorm+carrynorm+1两个结果,其中的sumnorm+carrynorm记为res0,sumnorm+carrynorm+1记为res1低108比特的舍入逻辑17根据处理器的舍入模式对低108比特的数据进行舍入,如果有舍入进位,则cin=1,否则没有舍入进位,则cin=0。
53比特选择器18根据低108比特的舍入逻辑17输出的cin位选择最后输出的尾数结果。当cin=1时,有进位选择的是结果res1,当cin=0时,没有舍入进位选择的结果时res0。
综合本发明的流水节拍划分方法和浮点乘加器,参照图1,对整个工作过程进行说明。
第一拍A×B乘法CSA压缩和C对齐移位。
B的尾数经过booth-2(基2的波茨)编码器4编码后得到27个编码结果,然后和A相乘,产生27个部分积,如图3所示,分别送入两个14∶2的CSA tree中的in1~in13位置。
为了减少延迟,C的取反和移位操作与A×B的部分积压缩是同时进行的。C在取反器2中做取反操作后,送入161比特对齐移位器3,做对齐移位操作,对齐移位的结果送入14∶2CSA tree 5的in0位置。开始时C的位置放在A×B结果最左边,中间有2个额外的比特在Cinv(C取反的结果)和B×C的结果之间,用来在C不移位时,对结果进行舍入(rouding)。定义d=exp(C)-(exp(A)+exp(B)-1023),当d≥0时,移位的位数为max{0,56-d};当d<0时移位的尾数为min{161,56-d}。如图2所示,对齐移位后的Cinv的低106比特送入2个14∶2的CSAtree中,0~25比特送入第一个CSA tree中低26比特的空挡中,105~26比特送入第二个CSA tree的第14个部分积的80比特空挡中。Cinv的压缩比特在14∶2的CSAtree都处于in0位置。
14∶2的两个CSA tree输出的结果分别是sum1,carry1,sum2,carry2。
第二拍,2个14∶2 CSA tree的结果经过4∶2 CSA tree压缩后,进行LZA和符号检测以及半加运算。
第一拍2个14∶2 CSA tree输出4个80比特结果sum1、carry1、sum2、carry2,在4∶2CSA tree7移位压缩后,得到106比特的sum和carry。
“106比特的sum和carry”和“Cinv[107:106]比特”送入108比特的LZA逻辑8中,得到一个与sum和carry之和首0位置相同(或者差1)的108比特序列f。
Sum和carry同时被送到106比特的符号检测器11中,输出complement(取补)比特。当作有效减法时,当d≥2时,sum和carry之和总是负的,当d=0,和d=1时要对sum和carry之和作一个最高位符号判断,如果是1的话结果是负的,complenet=1,如果是0的话结果是正的,complement=0。当作有效加法时,complement=0。
Sum和carry同时还要进行161比特半加器运算,由于sum和carry之和可能是负的,所以要有2组半加器,分别为161比特正半加器9和161比特取反半加器10,161比特正半加器9进行sum和carry正的半加,161比特取反半加器10进行sum和carry负的半加。这两个半加器分别输出sumHApos,carryHApos,sumHAinv,carryHAinv。
利用符号监测器11出来的信号complement来选择sum和carry半加器的结果,complenet为1时,sumHA=sumHAinv,carryHA=carryHAinv;反之,complement为0时,sumHA=sumHApos,carryHA=carryHApos。
第三拍将第二拍输出的sumHA和carryHA,根据首零的位置进行规格化移位。
将从第二拍得到的首零位置的108比特序列f,先在108比特首0位置编码LZD13进行LZD编码,得到一个7比特位置数据S[6:0],同时如果d≤2,sumHA和carryHA先在移位器14中移位53比特,得到sumnorm1和carrynorm1,然后sumnorm1和carrynorm1根据S[7:0]进行移位得到161比特的结果sumnorm和carrynorm。
第四拍将从第三拍输出的sumnorm和carrynorm的高53比特进行一个双加,并由舍入的进位来选择最后的结果。
sumnorm和carrynorm的高53比特进入双加器16后产生2个结果,res0=sumnorm+carrynorm,res1=sumnorm+carrynorm+1。低108比特进入舍入逻辑17,输出一个舍入进位cin,53比特选择器18根据cin选择结果res,当cin=0时,res=res1,当cin=1时,res=res0。所得到的结果就是最终的选择结果。
权利要求
1.一种64比特浮点乘加器的流水节拍划分方法,实现形式为(A×B)+C的乘加运算,具体包括以下步骤1)、在第一个流水节拍中,首先对操作数C做取反、移位操作,然后将B的尾数经过基2的波茨编码,得到27个编码结果,编码结果与A相乘,得到27个部分积,最后采用2个压缩比为14∶2的乘法压缩树,同时压缩27个部分积和操作数C取反移位后的结果,得到2个“和”及2个“进位”,分别标记为sum1,carry1,sum2,carry2;2)、在第二个流水节拍中,用一个4∶2的乘法压缩树压缩步骤1)得到的2个“和”及2个“进位”,生成压缩后的“进位”与“和”,分别用carry和sum表示,然后对carry和sum做正半加运算和取反半加运算,得到2组半加运算的结果,分别用sumHApos,carryHApos和sumHAinv,carryHAinv表示,同时对carry和sum之和进行首位0的个数检测,预测结果用一个序列表示,该序列标记为f,最后还需要对carry和sum之和进行符号检测,得到检测结果指示信号,该信号用complement表示,根据complement选择2组半加运算结果sumHApos,carryHApos,sumHAinv,carryHAinv中的一组,所得到的结果用sumHA,carryHA表示;3)、在第三个流水节拍中,把步骤2)中的首0个数预测得到的序列f进行编码,得到一个7比特数据S,同时对步骤2)中得到的结果sumHA,carryHA进行53比特预移位,然后再根据S进行108比特的移位,得到2个结果,用sumnorm和carrynorm来表示;4)、在第四个流水节拍中,利用步骤3)得到的sumnorm和carrynorm的高53位做加法,得到2个结果res0和res1,同时对sumnorm和carrynorm的低108比特进行舍入得到一个进位符号cin,然后用cin来选择res0和res1,得到最后乘加的尾数结果res。
2.一种实施权利要求1所述的64比特浮点乘加器的流水节拍划分方法的64比特浮点乘加器,四个流水节拍部分包括第一个流水节拍部分由指数处理单元(1)、取反器(2)、161比特对齐移位器(3)、基2的波茨编码器(4)、14∶2的乘法压缩树(5)、14∶2的乘法压缩树(6)组成;其中,指数处理单元(1)根据操作数A的指数,B的指数和C的指数计算d=exp(C)-(exp(A)+exp(B)-1023)的符号,56-d的值,以及d≤2或d=0或d=1的控制信号的值;取反器(2),如果C的符号位和A×B的符号位不同,C的尾数做每比特的取反操作,如果C的符号位和A×B的符号位相同,则不作取反操作,并将操作结果送入161比特对齐移位器(3)中;161比特对齐移位器(3)收到取反器(2)输出的结果后,根据指数处理单元(1)得到的56-d的值,对C的尾数进行161比特移位,移位输出的低106比特结果送入2个14∶2的乘法压缩树(5)、(6)中,移位输出的高55比特送入161比特正半加器(9)和161比特取反半加器(10)中;基2的波茨编码器(4)对B的尾数进行编码,然后将编码的结果与A的尾数相乘得到27个部分积,编码后的部分积的0~13部分积送入14∶2的乘法压缩树(5),14~27部分积送入14∶2的乘法压缩树(6);14∶2的乘法压缩树(5)和(6)压缩A×B的部分积,以及操作数C尾数对齐移位后结果,得到标记为carry1,sum1,carry2,sum2的4个80比特数据;第二个流水节拍由压缩比为4∶2的乘法压缩树(7)、108比特首0检测LZA(8)、161比特正半加器(9)、161比特取反半加器(10)、106比特符号检测器(11)、161比特的选择器(12)组成;其中,4∶2的乘法压缩树(7)输入14∶2的乘法压缩树(5)和(6)输出的carry1,sum1,carry2,sum2,对这4个80比特数据做压缩操作,carry2和sum2要比carry1和sum1左移26比特,进行移位压缩,最后输出2个106比特的结果sum和carry;106比特的首0检测LZA(8)检测4∶2的乘法压缩树(7)输出的sum和carry中的首0比特,得到106比特首零指示序列f;161比特正半加器(9)将161比特对齐移位器(3)输出的C取反移位后的高55比特和4∶2的乘法压缩树(7)输出的sum做合并,然后将carry的比特高位填0,得到两个数据,然后对这两个数据进行半加运算,得到两个结果sumHApos,carryHApos,送入161比特选择器(12)中;161比特取反半加器(10)是将161比特对齐移位器(3)输出的C取反移位后的高55比特和4∶2的乘法压缩树(7)输出的做sum合并,把sum和carry取反,carry高位填充1得到两个个数据,然后对这两个数据进行半加运算,得到两个结果sumHAinv,carryHAinv,送入161比特选择器(12)中;106比特的符号检测器(11)判断carry和sum相加的符号,如果两个相加的结果为负,将检测结果指示信号complent的值设置为1,反之,当相加的结果为正,将检测结果指示信号complement的值设置为0,所得到的complement的值送入161比特选择器(12)中;161比特选择器(12)根据106比特的符号监测器(11)输出的complement的值,对161比特正半加器(9)和161比特取反半加器(10)输出的结果做选择,当complement的值为1时,sumHA=sumHAinv,carryHA=carryHAinv;反之,当complement的值为0时,sumHA=sumHApos,carryHA=carryHApos,选择得到的结果送入移位器(14)中;第三个流水节拍由108比特首0位置编码LZD(13)、移位器(14)、乘加指数结果计算单元(15)组成;其中,108比特首0位置编码LZD(13)对106比特的首0检测LZA(8)输出的f进行编码,编码后得到一个7比特结果S,并输出到移位器(14)中;移位器(14)由53比特移位器和108比特移位器组成,当LZD进行编码的同时,对161比特选择器(12)输出的结果进行53比特的条件移位,当d≤2时,对161比特选择器(12)输出的sumHA和carryHA做53比特移位,否则不进行移位,当LZD产生S后,根据S的值,再做108比特的移位,移位后的结果用sumnorm和carrynorm表示,并输出该结果到53比特双加法器(16)和低108比特舍入逻辑(17);乘加指数结果计算单元(15)对操作数A,B,C的指数和d的符号位,以及移位器(14)最后移位的总位数进行计算,得到最后的浮点乘加器运算结果的指数位;第四个流水节拍由53比特双加法器(16)、低108比特舍入逻辑(17)和53比特选择器(18)组成;其中53比特双加法器(16)根据移位器(14)输出的sumnorm和carrynorm计算sumnorm+carrynorm和sumnorm+carrynorm+1的值,所得到的sumnorm+carrynorm记为res0,sumnorm+carrynorm+1记为res1,并将得到的res0和res1输出到53比特选择器(18)中;低108比特的舍入逻辑(17)根据处理器的舍入模式对移位器(14)输出的sumnorm和carrynorm的低108比特的数据做舍入操作,如果有舍入进位,则cin=1,否则没有舍入进位,则cin=0;53比特选择器(18)根据低108比特的舍入逻辑(17)输出的cin位选择最后输出的尾数结果,当cin=1时,有进位选择,结果是res1,当cin=0时,没有舍入进位选择,结果是res0。
3.根据权利要求2所述的64比特浮点乘加器,其特征在于,所述的14∶2的乘法压缩树(5)和14∶2的乘法压缩树(6)能够同时压缩A×B结果的27个部分积,以及取反对齐移位后的加数C;在压缩时,部分积的0~13部分积用14∶2乘法压缩树(5)来压缩,乘法部分积的14~27部分积用14∶2乘法压缩树(6)来压缩;14∶2乘法压缩树(5)的0~23比特低位空位填充对齐移位后加数C的0~23比特,14∶2乘法压缩树(6)的第14个空位填充对齐移位后加数C的105~24比特。
4.根据权利要求2所述的64比特浮点乘加器,其特征在于,所述的14∶2的乘法压缩树(5)和(6)由6级的压缩比为3∶2的乘法压缩树构建,在6级中按照4-3-2-1-1-1的个数做分布,14∶2的乘法压缩树有14个比特部分积输入端,这些输入端用in0~in13表示,实现10比特的低位进位输入,10比特的高位进位输出,乘法压缩树有2比特的结果输出端,输出压缩结果sum和carry。
5.根据权利要求3和4所述的64比特浮点乘加器,其特征在于,所述的同时压缩A×B结果的27个部分积,以及取反对齐移位后的加数C时,取反对齐移位后的加数C输入14∶2的乘法压缩树的in0,A×B结果的部分积输入in1~in13。
全文摘要
本发明公开了一种64比特浮点乘加器的流水节拍划分方法,实现形式为(A×B)+C的乘加运算,浮点乘加器分为四个流水节拍,包括第一拍中用2个14∶2的乘法压缩树同时压缩A×B和操作数C取反移位后的结果,得到2个进位及2个和,在第二拍中用一个4∶2的乘法压缩树来压缩第一拍的结果,得到压缩后的进位与和,并做半加运算,同时预测加法结果符号及加法结果首0位置;第三拍中编码首0检测的结果,得到规格化左移的位数,进行移位;在第四拍中,对结果做加法和舍入操作,得到最后的结果。本发明还公开了与流水节拍划分方法相对应的64比特浮点乘加器。本发明的优点在于缩短第一个节拍的延迟,增加第二个节拍的延迟,均衡了流水节拍。
文档编号G06F7/50GK1924798SQ20051009581
公开日2007年3月7日 申请日期2005年9月2日 优先权日2005年9月2日
发明者齐子初, 胡伟武 申请人:中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1