[发明专利]一种具有数据前送结构的浮点乘加单元有效
| 申请号: | 200710179975.5 | 申请日: | 2007-12-20 |
| 公开(公告)号: | CN101221490A | 公开(公告)日: | 2008-07-16 |
| 发明(设计)人: | 李兆麟;李恭琼;邬健元 | 申请(专利权)人: | 清华大学 |
| 主分类号: | G06F7/57 | 分类号: | G06F7/57;G06F9/38 |
| 代理公司: | 北京众合诚成知识产权代理有限公司 | 代理人: | 朱琨 |
| 地址: | 100084北*** | 国省代码: | 北京;11 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | 具有数据前送结构的浮点乘加单元用于浮点运算,实现形式为A+B×C的乘加操作,分三级流水线实现:在第一级流水线中,对A进行移位对齐,同时完成B×C的波斯编码、部分积压缩,并将A移位对齐后的结果和B×C的部分积压缩后的结果经3∶2进位保存加法树压缩;在第二级流水线中,对前一级流水线的输出进行前导零预测、符号预测、半加运算以及规格化移位;在第三级流水线中,完成最终加法和舍入,计算其指数。这里A和B都可能是前一条指令的中间结果。本发明的优点在于,相邻指令发生数据相关时,能够不等待或仅等待一个周期,提高了指令流的执行效率。 | ||
| 搜索关键词: | 一种 具有 数据 结构 浮点 单元 | ||
【主权项】:
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_Asign_Bsign_C,其中,sign_A、sign_B、sign_C分别是操作数A、B、C的符号,根据IEEE 754标准,双精度浮点数的符号为其最高位;为异或操作;计算A+B×C的临时符号sign_p1,sign_p1=sign_Bsign_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_p1carry_p1,G=sum_p1&carry_p1,![]()
f 0 = T 0 ‾ T 1 ]]>f i = T i - 1 ( G i Z ‾ i + 1 + Z i G ‾ i + 1 ) + T ‾ i - 1 ( Z i Z ‾ i + 1 + G i G ‾ i + 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;![]()
RZ(x)=x这里
和x分别表示向上取整和向下取整;对于负数,舍入模式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比特的修正。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于清华大学,未经清华大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/200710179975.5/,转载请声明来源钻瓜专利网。
- 上一篇:用于摩托车制动器的制动盘
- 下一篇:作为抗菌剂的噁唑烷酮类化合物
- 数据显示系统、数据中继设备、数据中继方法、数据系统、接收设备和数据读取方法
- 数据记录方法、数据记录装置、数据记录媒体、数据重播方法和数据重播装置
- 数据发送方法、数据发送系统、数据发送装置以及数据结构
- 数据显示系统、数据中继设备、数据中继方法及数据系统
- 数据嵌入装置、数据嵌入方法、数据提取装置及数据提取方法
- 数据管理装置、数据编辑装置、数据阅览装置、数据管理方法、数据编辑方法以及数据阅览方法
- 数据发送和数据接收设备、数据发送和数据接收方法
- 数据发送装置、数据接收装置、数据收发系统、数据发送方法、数据接收方法和数据收发方法
- 数据发送方法、数据再现方法、数据发送装置及数据再现装置
- 数据发送方法、数据再现方法、数据发送装置及数据再现装置





