一种高速自定义浮点复数除法器
技术领域
本发明涉及高速实时数字信号处理领域,特别涉及一种除法器的实现方法,具体是高速自定义浮点复数除法器的实现。
背景技术
在科学计算、数字信号处理尤其是通信数字信号处理等领域,浮点除法是其中一种重要的运算。相对于其它加(减)乘运算,除法运算的设计更加复杂,而且需要更多的时间用于计算商,因此,对于那些有高速实时要求的应用,高性能浮点除法器是非常重要的。
经典除法算法中主要有三大类:查表法(LUT),数字递归算法(DigitalRecurrence)和函数迭代算法(Functional Iteration)。其中LUT方法用于对商精度要求不高的除法中;数字递归算法中最重要的是SRT算法,该算法基于减法操作完成除法功能,每进行一次减法迭代可以将商精度提高一位,这样的商收敛过程是线性的,满足不了高性能要求。函数迭代算法则是基于乘法迭代过程,商精度能进行非线性快速收敛。
复数除法器至今提出了基于CORDIC算法,基于Goldschmidt算法,以及直接求除数倒数的方法。基于CORDIC算法对资源消耗及其严重,基本上适用于定点除法器。直接求除数倒数的方法是直接求出除数的倒数,然后再用倒数分别乘以被除数的实部和虚部,这样虽然可以省略一次除法操作,但在全流水实现中,乘法只能在除法完成之后操作,这样大大增加流水线长度,耗费大量寄存器资源。基于Goldschmidt算法在满足高精度要求时需消耗大量资源,且基于标准的IEEE 754格式,因此只能采用双精度和单精度两种格式方法,无法在精度要求和资源消耗中进行优化取舍。目前,针对自定义浮点复数的除法器尚未见报道。
发明内容
本发明要解决的技术问题是:针对现有浮点复数除法器中仅适用于双精度和单精度两种格式,且在满足高精度要求时需消耗大量资源等不足,提供一种自定义浮点复数除法器的实现方法。
本发明技术方案的基本思路是:将复数除法操作转换成实数除法操作,并利用乘法迭代中除数倒数迭代过程的独立性,对实部和虚部并行进行除法运算,同时得到商的实部和虚部。转换过程表示为:
其中A=a×c+b×d,C=b×c-a×d,B=a×a+b×b。
本发明的技术方案是:一种高速自定义浮点复数除法器,其特征在于,包括下述步骤:
第一步,利用自定义浮点乘法单元和加法单元计算除数、被除数的实部和虚部;
以计算A=a×c+b×d来说明计算过程。将参与运算的自定义浮点数定义为a=Man(a)×2Exp(a),Man(a)为尾数部分,Exp(a)为指数部分。自定义浮点乘法单元将相应乘数的指数用基本加法单元作相加运算,尾数用基本乘法单元作相乘运算。用这种方法分别得到a×c和b×d,作为基本加法器的输入。然后对基本加法器的和进行高位截取,将截取后的指数和尾数部分进行格式化操作,得到的结果即为A的指数和尾数。
所述的格式化操作,是指首先对待格式化数值的指数和尾数部分对齐并调整好时序;接着,计算尾数中的符号位个数,同时从指数部分减去符号位个数作为格式化后的指数输出,而尾数部分则根据符号位个数进行左移操作,得到的结果就是格式化后的指数和尾数。
第二步,并行计算实部和虚部的除法;
步骤(一),对除法输入的操作数进行预处理:
将操作数中的尾数部分取绝对值,并对相应的指数进行相减操作,相应的符号位进行异或操作。同时,在该阶段中,需对异常情况进行判断,如判断除数是否为0等情况。
步骤(二),采用查找表操作计算除数倒数近似值1/B:
进行除数倒数近似值的查表操作,将查表所得的结果应用于步骤(三),并对其余输入数作相应的延时操作;
本发明利用ROM实现直接查找表方式。设计的查找表大小为:
Table Size=2n×m (2)采用中点倒数法,表中每一项对应的值如下等式:
其中,floor(·)表示向下取整,d等于0.1d1d2...dn,表的输入索引值为d1d2-...dn,当m=n+g,g=0,1,2,3时,则输出的倒数的最小精度表示如下:
步骤(三),复数除法操作实现:
对其余输入数作相应时间对齐操作后,进行以下迭代过程:
NA,i+1=NA,i×FB,i NC,i+1=NC,i×FB,i (5)
DB,i+1=DB,i×FB,i (6)
FB,i+1=2-DB,i+1 (7)
其中A和C分别表示被除数的实部和虚部,B表示除数;Ni和Di的初始值分别为被除数和除数的尾数部分,Fi的初始值则为除数倒数的近似值。Fi分成了尾数和指数两部分,其中尾数部分的初始值是2倍除数的倒数近似值,即查表所得的结果,同时,指数部分相应地变成整数1。将虚部和实部同时并行进行求解,同时只利用一次除数的倒数值。由于自定义浮点格式设计的因素,需引入指数计算。同时在这个过程中进行乘法器设计时,积的位宽为乘数位宽之和再减去1。
第三步,标准格式化输出;
将前面得到的结果进行格式化,再将得到的商格式化成标准格式,然后根据对异常情况判断的结果以及相应符号位异或得到的结果,来判断格式化后的数值,并进行输出操作。
本发明的效益效果是:
(1)运用FPGA的全流水计算能力,实现自定义浮点除法器的快速运算,弥补了除法器运算效率低的问题;
(2)结合算法特点,通过并行实现策略,在不增加除法操作次数的情况下,将复数浮点运算转化为了实数浮点运算;
(3)通过所提出的自定义浮点格式算法,平衡算法精度和资源消耗之间的要求,使得需要用到除法器的算法总体性能大大加强。
发明附图
图1是本发明的总体流程图
图2是A=a×c+b×d的示例说明图
图3是(A+jC)/B的示例说明图
具体实施方式
下面以一个64-bit的自定义浮点格式的复数除法器这一具体实例说明本发明的实施方式,其中指数部分的位宽为12,尾数部分的位宽为52。图1是本发明的总体流程图,整个流程可以分为三大步骤:
第一步,利用自定义浮点乘加单元实现A、B和C:
图2是A=a×c+b×d的示例说明。a=Man(a)×2Exp(a),b=Man(b)×2Exp(b),c=Man(c)×2Exp(c),d=Man(d)×2Exp(d)。
对尾数进行乘法之后,再对所得的积作高位截取52位,将得到的结果与指数部分同时作为基本加法器的输入,即基本加法器的尾数部分的位宽为52,指数部分的位宽为12。然后对基本加法器的和进行高位截取52位,得到格式化后的自定义浮点表示数的尾数和指数部分。用这种方法得到最终进行除法的除数B,被除数的实部A和虚部C的值。
第二步,(A+jC)/B的实现:
步骤(一):对B、A、C的尾数进行预处理,判断它们是否为0,再对尾数部分取绝对值进行下一步运算,同时对尾数的符号位进行异或操作,再将异或得到的结果作为最后输出的数值的符号位;而指数部分则对应地进行减法操作;
步骤(二),采用查找表操作技术除数倒数近似值;
本发明采用直接查找表形式,对于64-bit自定义浮点除法器,初始倒数值的输出精度需要达到14位左右,故设定输入索引n为13,g为3,这样m为16,这个设定主要是依据XILINX的块RAM设定,即m的值取13到16中的任意一个,所消耗的块RAM值是一样的,故选取最大值16,这样可获得的初始倒数值的最小精度为13.912,块RAM的大小则为
Table Size=213×16 (8)
即需要4个36k的块RAM。在这个阶段中,其它的变量作延时寄存。
步骤(三):复数除法操作实现;
图3是(A+jC)/B的示例说明。对于64-bit浮点除法器,只需要两次迭代。第一次迭代需要两个16x52的乘法器,乘法器输出的位宽为67-bit,将得到的67-bit的积截取高52位,同时,第一次迭代还需要相应的定点减法。第二次迭代需要两个52x52的乘法器,得到的结果同样做高位截取,即截取52位,最后需要一个52x52的乘法器,以便获得最终的商的尾数。因此,整个过程需要2个16x52的乘法器和3个52x52的乘法器。
第三步,标准格式化输出:
在这一步骤中,将上一步骤中得到的商进行标准格式化,进而得到IEEE754格式的输出商,并根据异常结果和经过异或操作所得到的符号,输出相应的复数商。
64-bit自定义浮点格式的复数除法器在XILINX Virtex-7系列FPGA上实现速度可达300MHz以上,表1显示了相应的资源消耗情况。表的第一列表示寄存器消耗情况,第二列表示查找表消耗情况,第三列表示乘法器消耗情况,第四列表示RAM消耗情况。
表1资源消耗情况