发明内容
本发明所要解决的技术问题是,提供一种能够减少双精度浮点除法器的面积开销又满足应用需求的双精度浮点数除法器的设计方法及除法器。
本发明所采用的技术方案是:一种双精度浮点数除法器的设计方法,包括:
第一阶段,采用最小最大二次多项式逼近算法计算倒数函数1/X的种子值Rf,基中,X为除数的53位尾数部分;
第二阶段,基于硬件复用方法的两次Goldschmidt迭代,得到最终精确的结果。
第一阶段包括如下步骤:
1)将53位尾数X被分成三个部分:高位部分X1,中间部分X2和低位部分X3,得到,
X1=[1.x1x2x3...xm1]
X2=[xm1+1........xm2]×2-m1
X3=[xm2+1.........xn]×2-m2
对于倒数函数1/X通过如下公式进行计算,
X-1≈C0+C1X2+C2X2 2 (1)
其中,系数C0,C1,C2通过软件Maple获得,在Maple中通过调用Remez算法来实现最小最大算法,从而得到三个系数C0、C1和C2,并将三个系数C0,C1,C2存入系数查找表;
2)采用高位部分X1进行查表,得到C0、C1和C2的位宽,同时对中间部分X2进行基数为4的Booth编码,以及求中间部分X2的平方值和对所述该平方值进行Booth编码;
3)将用两个部分积产生模块分别产生C1X2和C2X2 2的部分积与查表得到的C0,采用三级4:2CSA树得到最终种子值的CARRY和SUM项;
4)采用一个超前进位加法器CLA对最终种子值的CARRY和SUM项进行相加,得到输出结果倒数函数1/X的种子值Rf。
第二阶段包括两次Goldschmidt迭代共涉及5次乘法和2次求补运算,如下步骤:
1)将第一阶段得到的种子值Rf分别与53位尾数X和被除数的尾数部分Y相乘得到d0和z0,对d0求补后得到x0,然后将z0与x0相乘得到z1;
2)在第二次Goldschmidt迭代中,将d0与x0相乘得到d1,d1求补后得到x1,将得到的x1与z1相乘得到最终的结果z。
本发明的采用双精度浮点数除法器的设计方法得到的除法器,包括有用于计算倒数函数1/X的种子值Rf的第一部分和与所述的第一部分的输出相连的用于计算最终精确结果的第二部分,其中,
第一部分包括:
寄存器,分别存放53位尾数X的高位部分X1、中间部分X2和低位部分X3;
第一查找表、第二查找表和第三查找表,分别连接所述寄存器的高位部分X1的输出端;
第一Booth编码器,输入端连接所述寄存器的中间部分X2,用于对中间部分X2进行重新编码;
专用平方单元,输入端连接所述寄存器的中间部分X2,用于求取中间部分X2的平方值;
第二Booth编码器,输入端连接所述专用平方单元输出端,用于对求出的平方值进行重新编码;
第一部分积产行单元,分别连接第二查找表和第一Booth编码器的输出端,用于产生C1X2的9个部分积;
第二部分积产生单元,分别连接第三查找表和第二Booth编码器的输出端,用于产生C2X2 2的6个部分积;
第一级进位保存加法器单元,分别连接第一查找表、第一部分积产行单元和第二部分积产生单元,用于产生第一级的CARRY和SUM项;
第二级进位保存加法器单元,连接第一级进位保存加法器单元的输出端,用于产生第二级的CARRY和SUM项;
第三级进位保存加法器,连接第二级进位保存加法器单元用于产生第三级的CARRY和SUM项;
超前进位加法器,连接第三级进位保存加法器单元的输出端,用于计算得到最终的种子值Rf;
第二部分包括:
第一多路选择器,分别连接外部控制信号sel、补码器的输出和第二部分输出的最终的种子值Rf,用于根据外部控制信号sel,选择补码器的输出信号和第二部分输出的最终的种子值Rf两个信号中的一个;
第二多路选择器,分别连接外部控制信号sel、补码器的输出和第二部分输出的最终的种子值Rf,用于根据外部控制信号sel,选择补码器的输出信号和第二部分输出的最终的种子值Rf两个信号中的一个;
第三多路选择器,分别连接外部控制信号sel、53位尾数X的输出信号以及第一乘法器的输出端,用于根据外部控制信号sel,选择53位尾数X的输出信号和第一乘法器的输出信号中的一个;
第四多路选择器,分别连接外部控制信号sel、被除数的尾数部分Y的输出信号以及第二乘法器的输出端,用于根据外部控制信号sel,选择被除数的尾数部分Y的输出信号和第二乘法器的输出信号中的一个;
第一乘法器,分别连接第一多路选择器和第三多路选择器的输出端,用于对该两路输出进行相乘;
第二乘法器,分别连接第二多路选择器和第四多路选择器的输出端,用于对该两路输出进行相乘,同时输出最终结果;
补码器,连接第一乘法器的输出端,用于对第一乘法器的输出结果求补。
对应计算倒数函数1/X的公式X-1≈C0+C1X2+C2X2 2,所述的第一查找表内存储系数C0,第二查找表内存储系数C1,第三查找表内存储系数C2。
所述的第一级进位保存加法器单元包括有:
第一进位保存加法器,分别连接第一查找表的输出端和第一部分积产行单元的9个部分积中的3个部分积的输出端,用于产生第一级的第一个CARRY和SUM项;
第二进位保存加法器,连接第一部分积产行单元的9个部分积中的另4个部分积的输出端,用于产生第一级的第二个CARRY和SUM项;
第三进位保存加法器,分别连接第一部分积产行单元的9个部分积中的最后2个部分积的输出端和第二部分积产生单元的6个部分积中的2个部分积的输出端,用于产生第一级的第三个CARRY和SUM项;
第四进位保存加法器,连接第二部分积产生单元的6个部分积中的其余4个部分积的输出端,用于产生第一级的第三个CARRY和SUM项。
所述的第二级进位保存加法器单元包括有:
第六进位保存加法器,分别连接第一级进位保存加法器单元中的第一进位保存加法器和第二进位保存加法器的输出端,用于产生第二级的第一个CARRY和SUM项;
第七进位保存加法器,分别连接第一级进位保存加法器单元中的第三进位保存加法器和第四进位保存加法器的输出端,用于产生第二级的第二个CARRY和SUM项。
本发明的一种双精度浮点数除法器的设计方法及除法器,是一种高性能、地面积开销的除法器,通过硬件复用方法,在性能减低很小的情况下可或者很大的面积优势,尤其适用于对面积要求严格的嵌入式微处理器领域。
具体实施方式
下面结合实施例和附图对本发明的一种双精度浮点数除法器的设计方法及除法器做出详细说明。
发明的一种双精度浮点数除法器的设计方法及除法器,采用一次查表法+两次Goldschmidt迭代的方法来设计双精度浮点除法器,其中查找表也是采用二次多项式逼近算法得到,但是其面积要远小于原方法所使用的查找表的面积,经查找表之后会得到一个比原先方法更小精度的种子值Rf,在后续的Goldschmidt中,采用两次迭代的方法来获得与原方法相同的精度,但是两次迭代使用相同的硬件单元(2个60x60的乘法器)。总的来看,我们采用的方法在查找表的面积上有很大的减少,但是由于采用了硬件复用技术,因此后续两次Goldschmidt的面积开销并没有增加太多,总面积开销要小于原方法的面积开销。从性能上来看,采用我们的方法设计出的双精度浮点除法器虽然不能完全可流水,但是由于实际应用中除法操作并不常见,因此采用该方法设计的除法器并不会带来整体性能上的损失。
本发明的一种双精度浮点数除法器的设计方法,包括:
第一阶段,采用最小最大二次多项式逼近算法计算倒数函数1/X的种子值Rf,基中,X为除数的53位尾数部分;第二阶段,基于硬件复用方法的两次Goldschmidt迭代,得到最终精确的结果。
其中,第一阶段包括如下步骤:
1)将53位尾数X被分成三个部分:高位部分X1,可为5位,中间部分X2,可为17位和低位部分X3,可为31位,得到,
X1=[1.x1x2x3...xm1]
X2=[xm1+1........xm2]×2-m1
X3=[xm2+1.........xn]×2-m2
对于倒数函数1/X通过如下公式进行计算,
X-1≈C0+C1X2+C2X2 2 (1)
其中,系数C0,C1,C2通过软件Maple获得,在Maple中通过调用Remez算法来实现最小最大算法,从而得到三个系数C0,C1,C2,并将三个系数C0,C1,C2存入系数查找表;
在实际的计算中,通过53位尾数X的m1bit高位部分X1进行查表得到系数C0、C1和C2,然后用得到的三个系数与53位尾数X的中位部分X2按照公式(1)进行二次多项式的计算,从而得到的近似值Rf。用于查表的X1的位宽,用于计算的X2的位宽及C0、C1和C2的位宽会直接影响得到的种子值的精度,其中X1的位宽和三个系数的位宽又会直接影响系数查找表的大小,前者决定了查找表的深度而后者决定了查找表的宽度。查找表的面积会极大影响整个双精度浮点除法器的面积,而得到的种子值的精度又会对后续Goldschmidt迭代的次数有着直接的影响,因此如何折中查找表的面积与得到的种子值的精度则需要设计者进行仔细权衡。
2)采用高位部分X1进行查表,得到C0、C1和C2的位宽,同时对中间部分X2进行基数为4的Booth编码,以及求中间部分X2的平方值和对所述该平方值进行Booth编码;
在本方法的实施例中选用位宽较小的X1进行查表,具体来讲是采用5位X1进行查表,得到C0、C1和C2的位宽分别为30、20和12进行多项式的计算,X2的一次项采用17bit,二次项用12bit,最终经过多项式的计算得到一个精度为19bit的种子值Rf,由于得到的种子值精度较低,因此在第二阶段采用两次Goldschmidt迭代来获得满足需要的精度。
在进行二次多项式的计算过程中,本发明使用了一种优化算法来计算X2的平方项,在性能不降低的情况之下面积开销减小了一半。在得到了X2的平方项之后整个多项式的计算就剩下了两次乘法和两次加法,在我们的设计中采用了一种融合累加树的方法进行后续多项式的计算。
3)将用两个部分积产生模块分别产生C1X2和C2X2 2的部分积与查表得到的C0,采用三级4:2CSA树得到最终种子值的CARRY和SUM项;
4)采用一个超前进位加法器CLA对最终种子值的CARRY和SUM项进行相加,得到输出结果倒数函数1/X的种子值Rf。
其中,第二阶段包括两次Goldschmidt迭代共涉及5次乘法和2次求补运算,第一阶段的结果产生之后就开始进行第二阶段的计算,第二阶段计算的流程如图3所示,具体采用如下步骤:
1)将第一阶段得到的种子值Rf分别与53位尾数X和被除数的尾数部分Y相乘得到d0和z0,对d0求补后得到x0,然后将z0与x0相乘得到z1;
2)在第二次Goldschmidt迭代中,将d0与x0相乘得到d1,d1求补后得到x1,将得到的x1与z1相乘得到最终的结果z。
下面对本发明方法的计算过程进行误差分析:
整个双精度浮点除法器的计算过程分为两个阶段,误差分析也主要根据计算的两个阶段进行分析。
1、Rf的误差分析
第一阶段的结果会产生一个种子值Rf,该种子值的误差来源主要有:1)二次多项式逼近算法本身的误差(εapprox),2)在多项式计算过程中因有限位宽而引入的算术误差。
总误差
由于有限位宽的系数是通过Maple程序获得的,因此实际的多项式逼近误差应为:
因此:
分析得知,当m1=5时,Rf的误差(εRf<2-19)满足本发明所设的误差精度。
2、Z的误差分析
在第二阶段计算过程中,以第一阶段的结果Rf作为输入进行两次Goldschmidt迭代,得到最终结果z,z的误差也主要来自两方面:1)Goldschmidt迭代算法本身的误差(εitera),2)在计算过程中因有限位宽表示而带来的算术误差(εarith)。
第二阶段总误差εz=εitera+εarith
最终的误差要满足εz<2-54,这样最终的结果才是精确的,我们不妨记在迭代的过程中要保留的小数部分的位宽为t位(输入操作数X,Y的取值范围都为[1:2),最终结果Z的取值范围为(0.5,2))。
迭代误差:
εitera=(εRf)4·X3·Y
因此εitera<2-72。
计算误差:
其中ε
z'是因乘法器输出的有限位宽而引入的误差,其值为2
-t,
是计算z1的过程中所产生的总的误差,包括传递误差和累积误差。同理,
是在计算x1的过程所产生的总的误差,包括传递误差和累积误差,x1,z1的最大值均不超过2,因此
计算误差
而
其中,
x0,z0,d0,最大值均不超过2,因此,计算误差
因此总的误差
即,
εz<2-72+2-t+2·(2-t+2·2-t+2·2-t)+2·(2-t+2·2-t+2·2-t)+(2-t+2·2-t+2·2-t)·(2-t+2·2-t+2·2-t)
即,
εz<2-72+2-t+4+2-t+2+2-t+2-2t+4+2-2t+3+2-2t+2-3t+3+2-3t+1+2-4t<2-t+5
由此可知,t最小为59时,可满足εz<2-54,因此选取t=59,再加上1位整数位,因此乘法器的位宽最小为60位时可满足精度要求。
本发明的采用双精度浮点数除法器的设计方法得到的除法器,包括有用于计算倒数函数1/X的种子值Rf的第一部分和与所述的第一部分的输出相连的用于计算最终精确结果的第二部分,其中,
如图1所示,第一部分包括:
寄存器1,分别存放53位尾数X的高位部分X1、中间部分X2和低位部分X3;
第一查找表2、第二查找表3和第三查找表4,分别连接所述寄存器1的高位部分X1的输出端;对应计算倒数函数1/X的公式X-1≈C0+C1X2+C2X2 2,所述的第一查找表2内存储系数C0,第二查找表3内存储系数C1,第三查找表4内存储系数C2。
第一Booth编码器5,输入端连接所述寄存器1的中间部分X2,用于对中间部分X2进行重新编码;
专用平方单元6,输入端连接所述寄存器1的中间部分X2,用于求取中间部分X2的平方值;
第二Booth编码器7,输入端连接所述专用平方单元6输出端,用于对求出的平方值进行重新编码;
第一部分积产行单元8,分别连接第二查找表3和第一Booth编码器5的输出端,用于产生C1X2的9个部分积;
第二部分积产生单元9,分别连接第三查找表4和第二Booth编码器7的输出端,用于产生C2X2 2的6个部分积;如图1所示,两个乘数项C1X2和C2X2 2,分别对乘数项中的X2和X2的平方项进行基数为4的Booth编码,从而两个部分积产生模块中分别得到9个部分积和6个部分积,连同C0,共计16个部分积,之后对这16个部分积进行累加。由图可知,我们采用3级4:2CSA累加树得到最终的CARRY和SUM项。最后通过一个超前进位加法器CLA对这两项进行相加就得到了第一阶段的输出结果Rf,得到的种子值的精度为19bit。
第一级进位保存加法器单元,分别连接第一查找表2、第一部分积产行单元8和第二部分积产生单元9,用于产生第一级的CARRY和SUM项;所述的第一级进位保存加法器单元包括有:
第一进位保存加法器10,分别连接第一查找表2的输出端和第一部分积产行单元8的9个部分积中的3个部分积的输出端,用于产生第一级的第一个CARRY和SUM项;
第二进位保存加法器11,连接第一部分积产行单元8的9个部分积中的另4个部分积的输出端,用于产生第一级的第二个CARRY和SUM项;
第三进位保存加法器12,分别连接第一部分积产行单元8的9个部分积中的最后2个部分积的输出端和第二部分积产生单元9的6个部分积中的2个部分积的输出端,用于产生第一级的第三个CARRY和SUM项;
第四进位保存加法器13,连接第二部分积产生单元9的6个部分积中的其余4个部分积的输出端,用于产生第一级的第三个CARRY和SUM项。
第二级进位保存加法器单元,连接第一级进位保存加法器单元的输出端,用于产生第二级的CARRY和SUM项;所述的第二级进位保存加法器单元包括有:
第六进位保存加法器14,分别连接第一级进位保存加法器单元中的第一进位保存加法器10和第二进位保存加法器11的输出端,用于产生第二级的第一个CARRY和SUM项;
第七进位保存加法器15,分别连接第一级进位保存加法器单元中的第三进位保存加法器12和第四进位保存加法器13的输出端,用于产生第二级的第二个CARRY和SUM项。
第三级进位保存加法器16,连接第二级进位保存加法器单元用于产生第三级的CARRY和SUM项;
超前进位加法器17,连接第三级进位保存加法器单元的输出端,用于计算得到最终的种子值Rf;
如图2所示第二部分包括:
第一多路选择器18,分别连接外部控制信号sel、补码器24的输出和第二部分输出的最终的种子值Rf,用于根据外部控制信号sel,选择补码器24的输出信号和第二部分输出的最终的种子值Rf两个信号中的一个;
第二多路选择器19,分别连接外部控制信号sel、补码器24的输出和第二部分输出的最终的种子值Rf,用于根据外部控制信号sel,选择补码器24的输出信号和第二部分输出的最终的种子值Rf两个信号中的一个;
第三多路选择器20,分别连接外部控制信号sel、53位尾数X的输出信号以及第一乘法器22的输出端,用于根据外部控制信号sel,选择53位尾数X的输出信号和第一乘法器22的输出信号中的一个;
第四多路选择器21,分别连接外部控制信号sel、被除数的尾数部分Y的输出信号以及第二乘法器23的输出端,用于根据外部控制信号sel,选择被除数的尾数部分Y的输出信号和第二乘法器23的输出信号中的一个;
第一乘法器22,分别连接第一多路选择器18和第三多路选择器20的输出端,用于对该两路输出进行相乘;
第二乘法器23,分别连接第二多路选择器19和第四多路选择器21的输出端,用于对该两路输出进行相乘,同时输出最终结果;
补码器24,连接第一乘法器22的输出端,用于对第一乘法器22的输出结果求补。
本领域技术人员可以理解附图只是一个优选实施例的示意图,上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。