CN103677737B - 基于进位节省加法器的低延时cordic三角函数实现的方法及装置 - Google Patents
基于进位节省加法器的低延时cordic三角函数实现的方法及装置 Download PDFInfo
- Publication number
- CN103677737B CN103677737B CN201310444469.XA CN201310444469A CN103677737B CN 103677737 B CN103677737 B CN 103677737B CN 201310444469 A CN201310444469 A CN 201310444469A CN 103677737 B CN103677737 B CN 103677737B
- Authority
- CN
- China
- Prior art keywords
- iteration
- data path
- cordic
- carry
- save
- 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
Landscapes
- Error Detection And Correction (AREA)
- Complex Calculations (AREA)
Abstract
本发明公开一种基于进位节省加法器的低延时CORDIC三角函数实现的方法及装置,方法步骤为:1)对X、Y、Z数据通路进行初始化;2)对Z数据通路进行旋转方向预测,输出给X、Y数据通路;将X、Y数据通路的前N/2次迭代压缩为N/8级,每级采用进位节省加法器在一拍内完成迭代;3)对X、Y数据通路的后N/2次采用进位节省加法器进行并行迭代;装置包括初始化模块、旋转方向预测模块、迭代压缩模块和并行迭代模块,迭代压缩单元和并行迭代单元均采用进位节省加法器。本发明具有硬件开销小、周期短、延时短、吞吐率大、精度高的优点。
Description
技术领域
本发明涉及三角函数实现领域,尤其涉及一种于进位节省加法器的低延时CORDIC三角函数实现的方法及装置。
背景技术
在音频通信、视频通信、信号处理、雷达图像处理等的实时信号处理系统中,需要进行快速高精度的三角函数数值计算,尤其是三角正弦/余弦函数。在硬件电路的实现中,三角正弦/余弦函数的计算方法可以分为:多项式近似方法和数字迭代方法。传统的正余弦的计算方法是采用查找表、多项式展开或近似的方法。查表法适用于精度要求低的情况,查找表的硬件开销将以计算精度的指数方式增长,当精度要求较高时,查找表的硬件消耗大;多项式近似在自变量较小时,收敛较快,当变量增大时,收敛速度迅速减小,运算所需的乘和加运算的次数增多,执行时间增长;因此,多项式近似通常采用查表法与Taylor展开或切比雪夫多项式相结合,通过查找表压缩自变量到一个较小的区域,然后通过多项式快速计算出结果。然而这种实现方法需要多个乘法器和加法器,硬件资源需求太高。
CORDIC(Coordinate Rotation Digital Computer,坐标旋转数字计算机)算法是一种实现多种超越函数的数字迭代方法,在旋转模式圆周坐标下能够实现三角正弦/余弦函数的计算。对比而言,CORDIC算法从运算本身入手,采用迭代的思想,用一系列与运算基数相关的角度的不断偏摆从而逼近所需旋转的角度。这是一个数值逼近的算法,通过简单的移位运算和加减运算就可完成三角正弦/余弦函数的计算。因此,CORDIC算法非常适合硬件实现。
选择旋转模式圆周坐标下的CORDIC迭代方程为:
CORDIC计算三角正弦/余弦函数时,X、Y、Z三条数据通路需要同时计算。首先,对这三条数据通路赋初值,分别为X0=0.607252935008881280,Y0=0,Z0=θ(输入角度),数据通路Z用判断旋转方向,每次迭代根据上一次迭代Z的符号来确定旋转方向,数据通路X和Y同时计算三角余弦和正弦。最后得到的结果是:Xout=cosθ,Yout=sinθ,Zout=0。
如图1所示,为传统CORDIC三角函数实现结构,包括X数据通道迭代计算模块、Y数据通道迭代计算模块和Z数据通路迭代计算模块。旋转方向为sj=-Sign(Zj),是以角度Z的变化作为每次迭代旋转方向的判断依据,X、Y和Z数据通道迭代公式依次为:Xj+1=Xj-sjYj2-j,Yj+1=Yj+sjXj2-j,Zj+1=Zj-sjarctan(2-j)。初始化X、Y数据通路的初始值后,令Y0=0,Z0=输入角度θ,X0=1/K=0.607252935008881280,|Z|≤1.7433,经过N次迭代后得到结果正弦和余弦函数计算结果。
CORDIC算法是一种线性收敛的算法,现有技术中的CORDIC算法实现三角函数过程中,每一次迭代只能计算一位精度,因此计算N位精度的结果至少需要N次的迭代,在N个时钟周期才可以完成,同时由于在旋转模式下存在以下两种数据相关:
(1)每次迭代中,X和Y数据通路的旋转操作是在上一次迭代的基础上进行的。
(2)每次迭代中,X和Y数据通路的旋转操作由Z的符号所决定;
因此迭代计算所需周期多、计算延时大。CORDIC算法的硬件电路的实现中,加法器内部具有进位延时,是主要的延时来源,其延时与字长成正比,从而降低了整个CORDIC算法的速度。
发明内容
本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种实现方法简单、硬件开销小、迭代次数少、速度快、延时短、精度高的基于进位节省加法器的低延时CORDIC三角函数计算方法及装置。
为解决上述技术问题,本发明提出的技术方案为:
一种基于进位节省加法器的低延时CORDIC三角函数实现的方法,其特征在于,步骤为:(1)输入角度值并对X、Y和Z数据通路进行初始化,输出各数据通路的初始化数据,三角函数的数据精度为N位;
(2)Z数据通路接收输出的Z数据通路初始化数据,预测N次CORDIC迭代的旋转方向,输出给X、Y数据通路;X、Y数据通路接收X、Y数据通路的初始化数据及Z数据通路输出的前N/2次CORDIC迭代的旋转方向,将前N/2次CORDIC迭代压缩为N/8级,每级迭代压缩过程采用进位节省加法器在一拍内完成4次迭代,得到前N/2次CORDIC迭代结果;
(3)X、Y数据通路根据前N/2次CORDIC迭代结果及Z数据通路输出的后N/2次CORDIC迭代的旋转方向,将X、Y数据通路的后N/2次CORDIC迭代展开,采用进位节省加法器进行并行迭代,输出最终的CORDIC迭代结果作为三角函数值。
作为本发明方法的进一步改进:所述步骤(2)中旋转方向预测具体实施步骤为:
(2.1)迭代索引i<(N-log23)/3时,增加第k次校正迭代,计算第k次迭代的剩余角度,其中k为增加的校正迭代的次数且k<3i+1;执行校正迭代之前,提前计算出校正迭代时Z数据通路中的加减运算,并制表保存;
(2.2)将Z数据通路的前(N-log23)/3次迭代按校正迭代位置划分成多个小段,从输入的初始角度开始依次预测,由本段的校正迭代计算得到的剩余角度预测下一小段的旋转方向,直到得到前(N-log23)/3次迭代的旋转方向;
(2.3)根据第(N-log23)/3次迭代的结果直接预测得到后续2N/3次迭代的旋转方向。
作为本发明方法的进一步改进:步骤(2)中所述进位节省加法器为N位的CSA4-2加法器。
作为本发明方法的进一步改进:所述步骤(3)具体实施步骤为:
(3.1)采用由进位节省加法器构成的N/2*N/2乘法器计算式(2)中的两次乘法运算,产生N/2个部分积后对产生的部分积进行压缩得到中间结果,将中间结果相加得到最后的乘法运算结果;
其中XN+1、YN+1为X、Y数据通路第N次迭代后结果,XN/2+1、YN/2+1分别为X、Y数据通路第N/2次迭代后结果,si为第i次迭代时的旋转方向;
(3.2)利用两个进位节省加法器计算式(2)中的两次加法运算,得到最终的CORDIC迭代结果作为三角函数值。
作为本发明方法的进一步改进:所述步骤(3.1)中N/2*N/2乘法器采用无符号乘法;
所述无符号乘法对部分积的求补计算方法为:将部分积求反再加1,将+1用1代替放在下一个部分积的尾部;下一个部分积相对左移一位,将求补+1与当前部分积的最低位对齐;
所述无符号乘法符号扩展的方法为:首先假设所有的部分积都是负的,在部分积前面补1;再假设其中的部分积为非负,高位的1重新转换为0,通过在高位为1中的最后一位1上再加1实现全部位的转换。
作为本发明方法的进一步改进:所述部分积压缩采用CSA4-2压缩树结构。
一种基于进位节省加法器的低延时CORDIC三角函数实现的装置,包括:
初始化模块,用来输入角度值并对X、Y和Z数据通路进行初始化,输出各数据通路的初始化数据,数据精度为N位;
旋转方向预测模块,用来Z数据通路接收输出的Z数据通路初始化数据,预测N次CORDIC迭代的旋转方向,输出给X、Y数据通路;
迭代压缩模块,用来X、Y数据通路接收X、Y数据通路的初始化数据及Z数据通路输出的前N/2次CORDIC迭代的旋转方向,将前N/2次CORDIC迭代压缩为N/8级,每级采用进位节省加法器在一拍内完成4次迭代,得到前N/2次CORDIC迭代结果;
并行迭代模块,用来X、Y数据通路根据前N/2次CORDIC迭代结果及Z数据通路输出的后N/2次CORDIC迭代的旋转方向,将X、Y数据通路的后N/2次CORDIC迭代展开,采用进位节省加法器进行并行迭代,输出最终的CORDIC迭代结果作为三角函数值。
作为本发明装置的进一步改进:所述旋转方向预测模块包括:
校正迭代模块,用来迭代索引i<(N-log23)/3时,增加第k次校正迭代,计算第k次迭代的剩余角度,其中k为增加的校正迭代的次数且k<3i+1;
数据存储模块,用来执行校正迭代之前,提前计算出校正迭代时Z数据通路中的加减运算,并制表保存;
前(N-log23)/3次旋转方向预测模块,用来将Z数据通路的前(N-log23)/3次迭代按校正迭代位置划分成多个小段,从输入的初始角度开始依次预测,由本段的校正迭代计算得到的剩余角度预测下一小段的旋转方向,直到得到前(N-log23)/3次迭代的旋转方向;
后2N/3次旋转方向预测模块,用来根据第(N-log23)/3次迭代的结果直接预测得到后续2N/3次迭代的旋转方向。
作为本发明装置的进一步改进:所述并行迭代单元包括两个由进位节省加法器构成的N/2*N/2乘法器和两个进位节省加法器;所述两个N/2*N/2乘法器用来计算迭代展开式(2)中的两次乘法运算,产生N/2个部分积后对产生的部分积进行压缩得到中间结果,将中间结果相加得到最后的乘法运算结果;所述两个进位节省加法器用来计算式(2)中的两次加法运算,得到最终的CORDIC迭代结果作为三角函数值。
其中XN+1、YN+1为X、Y数据通路第N+1次迭代结果,XN/2+1、YN/2+1分别为X、Y数据通路第N/2+1迭代结果,si为第i次迭代时的旋转方向。
作为本发明装置的进一步改进:所述N/2)*N/2乘法器采用无符号乘法器,包括部分积的求补计算模块和符号扩展模块;所述部分积的求补计算模块把部分积求反再加1,将+1用1代替放在下一个部分积的尾部;下一个部分积相对左移一位,将求补+1与当前部分积的最低位对齐;
所述符号扩展模块用来首先假设所有的部分积都是负的,在部分积前面补1;再假设其中的部分积为非负,高位的1重新转换为0,通过在高位为1中的最后一位1上再加1实现全部位的转换。
与现有技术相比,本发明的优点在于:
(1)本发明的X、Y数据通路的迭代采用进位节省加法器,迭代速度快,同时消除了加减法操作的进位延迟,使之与操作数字长无关,这样可以减少每一次迭代计算的时间,从而降低CORDIC迭代计算的延时,使整个CORDIC的流水时钟频率可以得到提高。
(2)本发明采用CSA(4:2)加法器实现迭代,在迭代压缩时采用64位CSA(4:2),一个N位的4-2CSA具有N个(4:2)CSA加法器并行操作,其间没有任何进位链互连,延迟与位数N无关,仅需在最后N位的部分和与N位的进位序列相加时才进行一次进位传播;并行迭代时采用CSA(4:2)压缩树结构,可以减少进步延迟的同时有效减少硬件开销。
(3)本发明采用旋转方向预测、迭代压缩和并行迭代方法,旋转方向预测采用分段预测及省略后2N/3次的旋转方向的预测方法;迭代压缩将迭代压缩为N/8级,每一级迭代在一拍内完成4次迭代,仅需要8拍就能够完成前N/2次迭代;并行迭代也仅需要3拍就可以实现后N/2次的迭代,大大减少了迭代次数,从而缩短了迭代计算周期。
附图说明
图1是传统CORDIC算法三角函数实现结构示意图。
图2是本发明旋转方向的预测规则原理示意图。
图3是本实施例执行迭代压缩采用的进位节省加法器端口示意图。
图4是本实施例采用CSA(3:2)加法器组成CSA(4:2)加法器原理示意图。
图5是本发明执行迭代压缩采用的树形结构。
图6是本实施例采用64位CSA(4:2)进位保留加法器执行一级迭代压缩的原理示意图。
图7是本实施例执行并行迭代时部分积产生原理示意图。
图8是本实施例执行并行迭代时乘法压缩原理示意图。
图9是本发明基于进位节省加法器的低延时CORDIC三角函数实现的装置结构示意图。
图例说明:
1、初始化模块;2、旋转方向预测模块;3、迭代压缩模块;4、乘法器模块;21、前(N-log23)/3次旋转方向预测模块;22、后2N/3次旋转方向预测模块;31、迭代压缩子单元。
具体实施方式
以下结合说明书附图和具体优选的实施例对本发明作进一步描述,但并不因此而限制本发明的保护范围。
本发明基于进位节省加法器的低延时CORDIC三角函数实现的方法,步骤为:
(1)输入角度值并对X、Y和Z数据通路进行初始化,输出各数据通路的初始化数据,三角函数的数据精度为N位;
(2)Z数据通路接收输出的Z数据通路初始化数据,预测N次CORDIC迭代的旋转方向,输出给X、Y数据通路;X、Y数据通路接收X、Y数据通路的初始化数据及Z数据通路输出的前N/2次CORDIC迭代的旋转方向,将前N/2次CORDIC迭代压缩为N/8级,每级迭代压缩过程采用进位节省加法器在一拍内完成4次迭代,得到前N/2次CORDIC迭代结果;
(3)X、Y数据通路根据前N/2次CORDIC迭代结果及Z数据通路输出的后N/2次CORDIC迭代的旋转方向,将X、Y数据通路的后N/2次CORDIC迭代展开,采用进位节省加法器进行并行迭代,输出最终的CORDIC迭代结果作为三角函数值。
本实施例以数据精度为64位为例进行说明,输入角度值θ并对X、Y和Z三条数据通路进行初始化过程为:
令Y0=0,Z0=输入角度θ,X0=1/K=0.607252935008881280,|Z|≤1.7433,按公式(1)迭代一次后得到初始化数据X1、Y1及Z1。按CORDIC迭代方程(1)进行迭代得到X、Y数据通路输出结果X64和Y64时需要迭代64次。
由于对于输入角度Z0二进制的表达式可以为:
其中ci∈{0,1},将其转换为相应的两极表示的一般形式为:
其中si∈{-1,1}为迭代时的旋转方向,αi=arctan2-i,i为迭代索引。αi与2-i之间的差距会随着迭代索引i的增加而减小,因此可以由Z数据通路的二进制表达式中的有效位的高位来预测后面部分迭代的旋转方向。
假设第j次迭代的角度Zj=c0.c1...cj-1cj...ck,其中c0=c1=...=cj-1,通过cj...ck预测第j次迭代到第k次迭代的旋转方向,预测规则定义为:如果第j次迭代的角度Zj为正数,即cj-1为0,则sj为1,反之sj为-1;对i>j-1时,如果ci为0,则si+1为-1,否则si+1为1。
如图2所示,本发明旋转方向的预测规则原理,假设第i次迭代的角度为:
Z(i)=C(0)·C(1)...C(i-1)·C(i)·C(i+1)·C(i+2)...C(k),其中C(0)=C(1)=...=C(i-1),由公式(4)可知第k次迭代的角度Z(k)=Z(i)+S(i)*α(i)+S(i+1)*α(i+1)+S(i+2)*α(i+2)+…+S(k)*α(k),则第i位到第k位的预测规则为:如果Z(i)为正数,即C(i-1)=0,则S(i)=1,反之C(i-1)=1,则S(i)=0;而当预测位数j>i-1位时,C(j)=0时,则S(j+1)=-1,反之C(j)=1时,则S(j+1)=0,例如C(i)=0时,则S(i+1)=-1,而C(i)=1时,S(i+1)=0。
这种预测规则的每一次迭代都可能产生的角度误差为2-i-αi,为保证收敛性,则这k-j+1次迭代产生的累积误差必须小于2-k-1,即要求不等式(5)成立,因此j和k必须满足k≤3j+1。
当迭代索引i≥(N-log23)/3时,2-i-αi<2-N,可以预测至k=3i+1次。因此,当i≥(N-log23)/3时,可用2-i代替αi而直接使用预测规则得到后2/3次迭代的旋转方向。当迭代索引i<(N-log23)/3时,根据关系式k≤3j+1在迭代序列中适当的位置加入校正迭代以保证CORDIC算法的正确性。
步骤(2)中Z数据通路预测N次CORDIC迭代的旋转方向具体实施步骤为:
(2.1)迭代索引i<(N-log23)/3时,增加第k次校正迭代,计算第k次迭代的剩余角度,其中k为增加的校正迭代的次数且k<3i+1;执行校正迭代之前,提前计算出校正迭代时Z数据通路中的加减运算,并制表保存;
(2.2)将Z数据通路的前(N-log23)/3次迭代按校正迭代位置划分成多个小段,从输入的初始角度开始依次预测,由本段的校正迭代计算得到的剩余角度预测下一小段的旋转方向,直到得到前(N-log23)/3次迭代结果;
(2.3)根据第(N-log23)/3次迭代结果直接预测得到后续2N/3次迭代的旋转方向。
本实施例中,由于N=64,则由关系式k≤3i+1,i<(N-log23),i=1,2,...,N,在Z数据通路的前20次迭代中每4次迭代增加一次校正迭代,校正迭代次数k分别为4、8、12、16和20,即前20次迭代中增加第4、8、12、16和20次的校正迭代,以确保旋转方向预测的准确性。
由于Z数据通路与X、Y数据通路的迭代计算是同时进行的,Z数据通路迭代得到旋转方向后执行X、Y数据通路迭代,为了保证在一拍内完成4次CORDIC迭代,在增加校正迭代时,提前计算出Z数据通路的加减运算结果并制表保存,即在执行X、Y数据通路的迭代同时,执行校正迭代前计算执行校正迭代所需的Z数据通路中的加减运算。
本实施例中,增加第4次校正迭代时,由输入的初始角度Z1及预测规则得到第2次~第4次迭代的旋转方向,计算第2次~第4次CORDIC迭代的同时计算第4次迭代后的剩余角度Z4,其中Z(4)=Z(1)+[S(1)*α(1)+S(2)*α(2)+S(3)*α(3)],把[S(1)*α(1)+S(2)*α(2)+S(3)*α(3)]中S(1)、S(2)、S(3)八种所有情况全部计算出来并制表保存,以次类推,每次校正迭代之前提前计算出Z数据通路的加减运算结果并制表保存,以保证在一拍内完成4次CORDIC迭代。
本实施例中,Z数据通路的前(N-log23)/3次迭代划分为5个小段,分别为:第1~4次迭代段、第5~8次迭代段、第9~12次迭代段、第13~16次迭代段以及第17~20次迭代段,增加第4、8、12、16和20次的校正迭代。由输入的初始角度Z1开始进行分段预测,由Z1及预测规则预测得到本段中第1次~第4次迭代的旋转方向,同时计算第4次迭代后的剩余角度Z4;由剩余角度Z4及预测规则预测得到本段中第5、6、7及8次的旋转方向,同时计算第8次迭代后的剩余角度Z8;依次类推,预测得到本段中第9、10、11、12次的旋转方向及第12次迭代后的剩余角度Z12;由剩余角度Z12预测得到本段中第13、14、15、16次的旋转方向及第16次迭代后的剩余角度Z16;由剩余角度Z16预测得到本段中第17、18、19、20次的旋转方向及第20次迭代后的剩余角度Z20。由剩余角度Z20计算出第21次迭代后的剩余角度Z21,用2-i代替αi直接使用预测规则得到后21~32次迭代的旋转方向。
根据Z数据通路的剩余角度来预测接下来的若干次迭代的旋转方向,旋转方向已经预测的CORDIC迭代可以同时计算,以减少CORDIC算法中的每次迭代X和Y数据通路的旋转操作由Z的符号决定所带来的延时,同时通过预测省略Z数据通路的20次迭代以后的迭代,减少硬件开销。
在执行X、Y数据通路的N次迭代时,将N次迭代计算分为前半部分和后半部分的迭代,即前N/2次的迭代和后N/2次的迭代。
X、Y数据通路执行前N/2次迭代时,接收X、Y数据通路的初始化数据及Z数据通路输出的前N/2次CORDIC迭代的旋转方向,将前N/2次CORDIC迭代压缩为N/8级,每级迭代压缩过程采用进位节省加法器在一拍内完成4次迭代,得到前N/2次CORDIC迭代结果。
本实施例中,将X、Y数据通路的64次迭代中的前32次迭代分为8级,分别为第1~4次迭代、第5~8次迭代,......,第29~32次迭代,每一级包含4次迭代,每一级接收Z数据通路输出的对应的旋转方向,即第1~4次迭代的旋转方向S(1)~S(4)输出给X、Y数据通路第1~4次迭代,第5~8次迭代的旋转方向S(5)~S(8)输出给X、Y数据通路第5~8次迭代,依次类推,直到第29~32次迭代的旋转方向S(29)~S(32)输出给X、Y数据通路第29~32次迭代.
采用进位节省加法器在一拍内完成每级迭代计算,可以减少加法器内部的进位延迟,同时大大减少了迭代次数,只需要8拍就可以完成前32次的迭代,缩短了迭代所需的周期。
X、Y数据通路执行前N/2次迭代时采用的进位节省加法器为N位的CSA4-2加法器,本实施例中,X、Y数据通路的前32次迭代采用64位的CSA(4:2)进位节省加法器分8级执行,每级在一拍内完成4次迭代。如图3所示,本实施例执行迭代压缩采用的进位节省加法器端口,CSA(4:2)其实际上是一个5输入、3输出的编码器,其5个输入是同权重的,其中In1~In4为本级输入的4个用于相加的操作数,cin来自前面一级的进位输入,cout是本级的进位输出,carry和sum是本级加法的输出结果。
采用CSA(4:2)进位节省加法器,使加减法操作可以消除进位延迟,使之与操作字长无关,这样可以减少每一次迭代计算的时间,从而整个CORDIC的流水时钟频率可以得到提高。
如图4所示,本实施例采用CSA(3:2)加法器组成CSA(4:2)加法器原理,用两个(3:2)CSA进位节省加法器实现CSA(4:2)进位节省加法器,操作数In1~In3为第一个(3:2)CSA进位节省加法器的输入,第一个(3:2)CSA进位节省加法器的输出、进位及操作数In4作为第二个(3:2)CSA进位节省加法器的输入,输出加法结果carry和sum。
本实施例中,采用64位的CSA(4:2)构成的树形结构执行迭代压缩,如图5所示,本实施例执行迭代压缩采用的树形结构,由4个CSA(4:2)进位节省加法器依次连接构成,下一级的4个输入会向上一级产生2个输出。采用CSA(4:2)进位节省加法器的树形结构能够把两个冗余表示的中间结果压缩为一个,所以可以将其视为冗余的2叉树。由于CSA(4:2)进位节省加法器的树形结构具有的2分特性,因此其结构很规整。
一个N位的CSA(4:2)进位节省加法器具有N个(4:2)CSA加法器并行操作,其间没有任何进位链互连,延迟与位数N无关,仅需在最后N位的部分和与N位的进位序列相加时才进行一次进位传播,这使得在一级迭代过程中执行几次迭代压缩成为可能。
如图6所示,本实施例采用64位CSA(4:2)进位节省加法器执行一级迭代压缩的原理,包括4级由两个64位CSA(4:2)进位节省加法器构成的结构,每级两个64位CSA(4:2)进位节省加法器分别对应X数据通路和Y数据通路,每级X、Y数据通路输入旋转方向S(i)及4个输入,其中i为迭代索引。第i次X数据通路X(i)的两个输出carry和sum,经过移位模块移动i位后与同级的Y数据通路Y(i)的两个输出一起作为下一级i+1次Y数据通路Y(i+1)的四个输入,按公式Yi+1=Yi+siXi2-i进行移位相加,得到Y数据通路i+1次迭代结果Y(i+1);同理,每级Y数据通路Y(i)的两个输出carry和sum经过移位模块移动i位后与同级X数据通路X(i)的两个输出一起按公式Xi+1=Xi-siYi2-i进行移位相加,得到X数据通路i+1次迭代结果X(i+1)。按照以上方法,执行一级迭代压缩时,第i次X、Y数据通路X(i)和Y(i)经过4级迭代后得到第i+4级X、Y数据通路X(i+4)和Y(i+4)迭代结果。
在迭代过程中,每一次得到的是中间两个保留数据结果为sum和carry,当sum和carry的符号位都为1时,实际上最终结果(sum+carry)符号位应为0,此时需要将sum和carry的符号位都变为0。
对于后N/2次迭代,假设第m次迭代公式表示为:
将其代入到第m+1次迭代公式中得到:
依次类推,得到第m到第n-1次(m<n)迭代展开成如下:
其中:
其中i,j,k,l,i(1),...,i(2t),i(2t+1)都是m到n-1的整数,且m-1<i<j<k<l<n,m-1<i(1)<i(2)<...<i(2t)<i(2t+1)<n。
当m>N/2时,Am,n中除第1项为1之外所有的项都移位为0,Bm,n中除第1项()之外所有的项都移位为0,因此可以将第N/2+1到N次迭代展开简化为:
其中XN+1、YN+1为X、Y数据通路第N次迭代结果,XN/2+1、YN/2+1分别为X、Y数据通路第N/2迭代结果,si为第i次迭代时的旋转方向。
X、Y数据通路执行后N/2次迭代时,X、Y数据通路根据前N/2次CORDIC迭代结果及Z数据通路输出的后N/2次CORDIC迭代的旋转方向,将X、Y数据通路的后N/2次CORDIC迭代展开,采用进位节省加法器进行并行迭代,输出最终的CORDIC迭代结果作为三角函数值。
步骤(3)对后N/2次进行并行迭代,具体实施步骤为:
(3.1)采用由进位节省加法器构成的N/2*N/2乘法器计算后N/2次CORDIC迭代展开公式(10)中的两次乘法运算,产生N/2个部分积后对产生的部分积进行压缩得到中间结果,将中间结果相加得到最后的乘法运算结果;
(3.2)利用两个进位节省加法器计算公式(10)中的两次加法运算,得到最终的CORDIC迭代结果作为三角函数值。
本实施例中,X、Y数据通路执行后32次迭代时,接收Z数据通路输出的第33~64次迭代的旋转方向,将第33~64次的迭代按照公式(10)简化为两次的乘法运算和两次加法运算。采用由进位节省加法器构成的32*32乘法器计算其中的和两次乘法运算,再通过两个加法器将两次乘法运算结果分别与X32及Y32进行相加得到X、Y数据通路最终结果X64(X32与相加)和Y64。
后32次迭代在3拍内完成,前两拍完成两次32*32乘法运算并对产生的32个部分积进行压缩,后一拍对产生的中间结果相加得到最后的结果,极大减小了迭代次数同时缩短迭代所需的周期。采用进位节省加法器来进行两次的乘法运算,并对产生的部分积进行压缩,将产生的中间结果相加得到最后的迭代结果,降低了由加法器带来的延迟。
乘法运算的步骤一般分为两个步骤:部分积的产生和部分积的求和,而部分积求和可以通过部分积压缩再相加来提高部分积的求和效率。
本实施例中32*32乘法运算包括三个步骤:部分积的产生,部分积压缩及中间结果相加。采用无符号乘法产生32个部分积后,将32个部分积进行压缩得到中间结果,中间结果相加即得到最后的乘法运算结果。如图7所示,本实施例执行并行迭代时部分积产生原理,采用无符号乘法产生32个部分积,部分积的求补计算是先把部分积求反再加1,将+1用“1”代替放在下一个部分积的尾部,而下一个部分积相对左移一位,正好将求补+1与当前部分积的最低位对齐。无符号乘法中符号扩展方法为:假设所有的部分积都是负的,在部分积前补1,然后我们再假设其中的部分积不是负的,将高几位的1就要重新转换为0同时通过在将高几位的1的最后一位1上再加1实现全部位的转换。
本实施例中,32*32乘法运算中的乘法部分积压缩采用CSA4-2压缩树结构,如图8所示,本实施例执行并行迭代时乘法部分积压缩原理,采用CSA(4:2)压缩树结构,一共有4级。第一级由8个(4:2)CSA进位节省加法器构成,输入32个部分积P1~P32,每个(4:2)CSA进位节省加法器输出两个结果carry和sum,则经过第一级压缩后得到16个中间数,即分别对应8个(4:2)CSA进位节省加法器的输出carry1_1、sum1_1;carry1_2、sum1_2,......,carry1_8、sum1_8;第二级由4个(4:2)CSA进位节省加法器构成,将8个(4:2)CSA输出的16个中间数压缩为8个,分别为carry2_1、sum2_1,......,carry4_1、sum4_1;同样的方式第三级2个(4:2)CSA进位节省加法器将8个中间数压缩至4个carry3_1、sum3_1和carry3_2、sum3_2,经过第四级压缩后只剩下两个结果carry和sum。
本实施例中,执行并行迭代时利用采用CSA累加部件执行两次加法操作,将两次乘法运算结果分别与X32及Y32进行相加得到X64和Y64。基本结构采用面积和功耗相对较优的CSA(4:2)压缩器,整体压缩结构采用4-2压缩树结构。
采用以上方法,只需要11拍就能能够实现64位精度的三角函数的CORDIC迭代计算,其中前半部分迭代压缩8拍,后半部并行迭代3拍,极大减少了迭代次数、缩短迭代周期;采用进位节省加法器实现前半部分的迭代压缩及后半部分并行迭代,使得延迟与位数无关,有效减少了由于加法器带来的延时,且可以实现同时迭代多次,从而提高CORDIC计算速度、减少迭代的时间及硬件开销。
如图9所示,本发明基于进位节省加法器的低延时CORDIC三角函数实现的装置结构,包括:初始化模块1、旋转方向预测模块2、迭代压缩模块3和并行迭代模块。其中,横向虚线表示处于同一级执行的模块。初始化模块1,输入角度值并对X、Y和Z数据通路进行初始化,输出各数据通路的初始化数据,数据精度为N位;旋转方向预测模块2,Z数据通路接收输出的Z数据通路初始化数据,预测N次CORDIC迭代的旋转方向,输出给X、Y数据通路;迭代压缩模块3,X、Y数据通路接收X、Y数据通路的初始化数据及Z数据通路输出的前N/2次CORDIC迭代的旋转方向,将前N/2次CORDIC迭代压缩为N/8级,每级采用进位节省加法器在一拍内完成4次迭代,得到前N/2次CORDIC迭代结果;并行迭代模块,根据前N/2次CORDIC迭代结果及Z数据通路输出的后N/2次CORDIC迭代的旋转方向,将X、Y数据通路的后N/2次CORDIC迭代展开,采用进位节省加法器进行并行迭代,输出最终的CORDIC迭代结果作为三角函数值。并行迭代模块包括乘法器模块4和加法器,迭代压缩模块3和并行迭代单元均采用进位节省加法器。
初始化模块1对X、Y和Z数据通路赋初值时,令Y0=0,Z0=输入角度θ,X0=1/K=0.607252935008881280,|Z|≤1.7433,并进行初始化得到初始化数据X1,Y1和Z1,输出旋转方向预测模块2、迭代压缩模块3和并行迭代模块。
本实施例中,旋转方向预测模块2包括校正迭代模块、数据存储模块、前(N-log23)/3次旋转方向预测模块21和后2N/3次旋转方向预测模块22。校正迭代模块,在迭代索引i<(N-log23)/3时,增加第k次校正迭代,计算第k次迭代的剩余角度其中k为增加的校正迭代的次数且k<3i+1;数据存储模块,在执行校正迭代模块之前,提前计算出的Z数据通路中的加减运算并制表保存;前(N-log23)/3次旋转方向预测模块21,对前(N-log23)/3次CORDIC迭代的旋转方向进行分段预测,将Z数据通路前(N-log23)/3次迭代按校正迭代位置划分成多个小段,从输入的初始角度开始预测本段旋转方向,由本段校正迭代计算得到的剩余角度预测下一小段的旋转方向,依此类推,直到得到前(N-log23)/3次迭代的旋转方向;后2N/3次旋转方向预测模块22,根据第(N-log23)/3次迭代的结果直接预测得到后续2N/3次迭代的旋转方向。
本实施例中,前(N-log23)/3次旋转方向预测模块21包括5个分段的符号预测子单元SignPre1~Sign Pre5,第一个符号预测单元Sign Pre1接收初始化模块1输出的角度Z1,由转换规则得到第1次~第4次迭代的旋转方向,同时由校正迭代模块计算第4次迭代后的剩余角度Z4。校正迭代模块执行前,由数据存储模块提前计算出计算Z4所需的Z数据通路中的加减运算并制表保存,校正迭代模块根据数据存储模块中的数据计算第4次迭代后的剩余角度Z4。同理,第二个符号预测单元Sign Pre2根据剩余角度Z4及预测规则预测得到第5、6、7及8次的旋转方向,同时同时由校正迭代单元计算第8次迭代后的剩余角度Z8;依次类推,第三个符号预测单元Sign Pre3预测得到第9、10、11、12次的旋转方向及第12次迭代后的剩余角度Z12;第四个符号预测单元Sign Pre4预测得到第13、14、15、16次的旋转方向及第16次迭代后的剩余角度Z16;第五个符号预测单元Sign Pre5预测得到第17、18、19、20次的旋转方向及第20次迭代后的剩余角度Z20。由剩余角度Z20可以计算出第21次迭代后的剩余角度Z21,由剩余角度Z21及预测规则可以直接预测出后21~64次迭代的旋转方向。
本实施例中,迭代压缩模块3分为8级迭代压缩子单元31,每级为4次迭代,分别为迭代压缩子单元Rot(1-4)、Rot(5-8)...Rot(29-32),由旋转方向预测单元2提供迭代时所需的旋转方向。初始模块1输出的X、Y通道的初始化信息X1、Y1输入第1级迭代压缩子模块Rot(1-4),由第一个迭代压缩子模块Rot(1-4)按照迭代方程(1)进行4次迭代后输入给第2级迭代压缩子模块Rot(5-8),以此类推,经过第8级迭代压缩子模块Rot(29-32)后得到第32次的迭代结果,输入给后续的乘法器模块4。
本实施例中,X、Y数据通路的后N/2次的迭代按照公式(1)仅进行两次的(N/2)*(N/2)乘法及加法运算,并行迭代模块由乘法器模块23及加法器构成,乘法器模块23包括两个(N/2)*(N/2)乘法器,可以显著减少电路的级数,提高计算性能。
上述只是本发明的较佳实施例,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。任何熟悉本领域的技术人员,在不脱离本发明技术方案范围的情况下,都可利用上述揭示的技术内容对本发明技术方案做出许多可能的变动和修饰,或修改为等同变化的等效实施例。因此,凡是未脱离本发明技术方案的内容,依据本发明技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均应落在本发明技术方案保护的范围内。
Claims (10)
1.一种基于进位节省加法器的低延时CORDIC三角函数实现的方法,其特征在于,步骤为:
(1)输入角度值并对X、Y和Z数据通路进行初始化,输出各数据通路的初始化数据,三角函数的数据精度为N位;
(2)Z数据通路接收输出的Z数据通路初始化数据,预测N次CORDIC迭代的旋转方向,输出给X、Y数据通路;X、Y数据通路接收X、Y数据通路的初始化数据及Z数据通路输出的前N/2次CORDIC迭代的旋转方向,将前N/2次CORDIC迭代压缩为N/8级,每级迭代压缩过程采用进位节省加法器在一拍内完成4次迭代,得到前N/2次CORDIC迭代结果;
(3)X、Y数据通路根据前N/2次CORDIC迭代结果及Z数据通路输出的后N/2次CORDIC迭代的旋转方向,将X、Y数据通路的后N/2次CORDIC迭代展开,采用进位节省加法器进行并行迭代,输出最终的CORDIC迭代结果作为三角函数值。
2.根据权利要求1所述的基于进位节省加法器的低延时CORDIC三角函数实现的方法,其特征在于,所述步骤(2)中旋转方向预测具体实施步骤为:
(2.1)迭代索引i<(N-log23)/3时,增加第k次校正迭代,计算第k次迭代的剩余角度,其中k为增加的校正迭代的次数且k<3i+1;执行校正迭代之前,提前计算出校正迭代时Z数据通路中的加减运算,并制表保存;
(2.2)将Z数据通路的前(N-log23)/3次迭代按校正迭代位置划分成多个小段,从输入的初始角度开始依次预测,由本段的校正迭代计算得到的剩余角度预测下一小段的旋转方向,直到得到前(N-log23)/3次迭代的旋转方向;
(2.3)根据第(N-log23)/3次迭代的结果直接预测得到后续2N/3次迭代的旋转方向。
3.根据权利要求1或2所述的基于进位节省加法器的低延时CORDIC三角函数实现的方法,其特征在于,步骤(2)中所述进位节省加法器为N位的CSA 4-2加法器。
4.根据权利要求1所述的基于进位节省加法器的低延时CORDIC三角函数实现的方法,其特征在于,所述步骤(3)具体实施步骤为:
(3.1)采用由进位节省加法器构成的N/2*N/2乘法器计算下式中的两次乘法运算,产生N/2个部分积后对产生的部分积进行压缩得到中间结果,将中间结果相加得到最后的乘法运算结果;
其中XN+1、YN+1为X、Y数据通路第N次迭代后结果,XN/2+1、YN/2+1分别为X、Y数据通路第N/2次迭代后结果,si为第i次迭代时的旋转方向;
(3.2)利用两个进位节省加法器计算上式中的两次加法运算,得到最终的CORDIC迭代结果作为三角函数值。
5.根据权利要求4所述的基于进位节省加法器的低延时CORDIC三角函数实现的方法,其特征在于:所述步骤(3.1)中N/2*N/2乘法运算采用无符号乘法;
所述无符号乘法对部分积的求补计算方法为:将部分积求反再加1,将+1用1代替放在下一个部分积的尾部;下一个部分积相对左移一位,将求补+1与当前部分积的最低位对齐;
所述无符号乘法符号扩展的方法为:首先假设所有的部分积都是负的,在部分积前面补1;再假设其中的部分积为非负,高位的1重新转换为0,通过在高位为1中的最后一位1上再加1实现全部位的转换。
6.根据权利要求4所述的基于进位节省加法器的低延时CORDIC三角函数实现的方法,其特征在于:所述步骤(3.1)中部分积压缩采用CSA4-2压缩树结构。
7.一种基于进位节省加法器的低延时CORDIC三角函数实现的装置,其特征在于,包括:
初始化模块(1),用来对X、Y和Z数据通路赋初值并进行初始化,输出各数据通路的初始化数据,数据精度为N位;
旋转方向预测模块(2),用来在Z数据通路接收输出的Z数据通路初始化数据,预测N次CORDIC迭代的旋转方向,输出给X、Y数据通路;
迭代压缩模块(3),用来在X、Y数据通路接收X、Y数据通路的初始化数据及Z数据通路输出的前N/2次CORDIC迭代的旋转方向,将前N/2次CORDIC迭代压缩为N/8级,每级采用进位节省加法器在一拍内完成4次迭代,得到前N/2次CORDIC迭代结果;
并行迭代模块,用来根据前N/2次CORDIC迭代结果及Z数据通路输出的后N/2次CORDIC迭代的旋转方向,将X、Y数据通路的后N/2次CORDIC迭代展开,采用进位节省加法器进行并行迭代,输出最终的CORDIC迭代结果作为三角函数值。
8.根据权利要求7所述基于进位节省加法器的低延时CORDIC三角函数实现的装置,其特征在于,所述旋转方向预测模块(2)包括:
校正迭代模块,用来在迭代索引i<(N-log23)/3时,增加第k次校正迭代,计算第k次迭代的剩余角度,其中k为增加的校正迭代的次数且k<3i+1;
数据存储模块,用来在校正迭代模块前提前计算出校正迭代模块中的Z数据通路中的加减运算,并制表保存;
前(N-log23)/3次旋转方向预测模块(21),用来将Z数据通路按校正迭代位置划分成多个小段,从输入的初始角度开始预测本段旋转方向,由本段校正迭代计算得到的剩余角度预测下一小段的旋转方向,依此类推,直到得到前(N-log23)/3次迭代的旋转方向;
后2N/3次旋转方向预测模块(22),用来根据第(N-log23)/3次迭代的结果直接预测得到后续2N/3次迭代的旋转方向。
9.根据权利要求7所述的基于进位节省加法器的低延时CORDIC三角函数实现的装置,其特征在于:所述并行迭代模块包括两个由进位节省加法器构成的N/2*N/2乘法器和两个进位节省加法器;所述两个N/2*N/2乘法器用来计算下式中的两次乘法运算,产生N/2个部分积后对产生的部分积进行压缩得到中间结果,将中间结果相加得到最后的乘法运算结果;所述两个进位节省加法器用来计算下式中的两次加法运算,得到最终的CORDIC迭代结果作为三角函数值;
其中XN+1、YN+1为X、Y数据通路第N次迭代后结果,XN/2+1、YN/2+1分别为X、Y数据通路第N/2次迭代后结果,si为第i次迭代时的旋转方向。
10.根据权利要求9所述的基于进位节省加法器的低延时CORDIC三角函数实现的装置,其特征在于:所述N/2*N/2乘法器采用无符号乘法器,包括部分积的求补计算模块和符号扩展模块;所述部分积的求补计算模块把部分积求反再加1,将+1用1代替放在下一个部分积的尾部;下一个部分积相对左移一位,将求补+1与当前部分积的最低位对齐;
所述符号扩展模块用来首先假设所有的部分积都是负的,在部分积前面补1;再假设其中的部分积为非负,高位的1重新转换为0,通过在高位为1中的最后一位1上再加1实现全部位的转换。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310444469.XA CN103677737B (zh) | 2013-09-26 | 2013-09-26 | 基于进位节省加法器的低延时cordic三角函数实现的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310444469.XA CN103677737B (zh) | 2013-09-26 | 2013-09-26 | 基于进位节省加法器的低延时cordic三角函数实现的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103677737A CN103677737A (zh) | 2014-03-26 |
CN103677737B true CN103677737B (zh) | 2016-08-17 |
Family
ID=50315419
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310444469.XA Active CN103677737B (zh) | 2013-09-26 | 2013-09-26 | 基于进位节省加法器的低延时cordic三角函数实现的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103677737B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104135457B (zh) * | 2014-07-25 | 2017-05-24 | 河海大学 | 基于改进的cordic算法的数字鉴相方法及装置 |
CN106202890B (zh) * | 2016-06-30 | 2020-01-21 | 中国人民解放军国防科学技术大学 | 基于CORDIC和Taylor算法相结合的全流水浮点三角函数装置 |
CN106155627B (zh) * | 2016-06-30 | 2019-01-22 | 中国人民解放军国防科学技术大学 | 基于t_cordic算法的低开销迭代三角函数装置 |
CN108229668B (zh) * | 2017-09-29 | 2020-07-07 | 北京市商汤科技开发有限公司 | 基于深度学习的运算实现方法、装置和电子设备 |
CN108416311B (zh) * | 2018-03-14 | 2022-04-19 | 电子科技大学 | 一种基于可编程门阵列和坐标旋转处理的方位角获取方法 |
CN108733349B (zh) * | 2018-07-27 | 2023-05-05 | 珠海一微半导体股份有限公司 | 一种基于定点数的三角函数运算电路 |
CN109857986A (zh) * | 2019-02-01 | 2019-06-07 | 电子科技大学 | 基于概率计算的低开销cordic算法实现方法及装置 |
CN113138749B (zh) * | 2021-04-09 | 2023-09-26 | 中科亿海微电子科技(苏州)有限公司 | 基于cordic算法的三角函数计算装置及方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101630243B (zh) * | 2009-08-14 | 2011-01-05 | 西北工业大学 | 超越函数装置以及用该装置实现超越函数的方法 |
US8194855B2 (en) * | 2003-06-30 | 2012-06-05 | Oracle America, Inc. | Method and apparatus for implementing processor instructions for accelerating public-key cryptography |
-
2013
- 2013-09-26 CN CN201310444469.XA patent/CN103677737B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8194855B2 (en) * | 2003-06-30 | 2012-06-05 | Oracle America, Inc. | Method and apparatus for implementing processor instructions for accelerating public-key cryptography |
CN101630243B (zh) * | 2009-08-14 | 2011-01-05 | 西北工业大学 | 超越函数装置以及用该装置实现超越函数的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103677737A (zh) | 2014-03-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103677737B (zh) | 基于进位节省加法器的低延时cordic三角函数实现的方法及装置 | |
CN109062540B (zh) | 一种基于cordic算法的可重构浮点运算装置 | |
CN103677738B (zh) | 基于混合模式cordic算法的低延时基本超越函数实现方法及装置 | |
CN102722352B (zh) | 一种Booth乘法器 | |
CN106155627B (zh) | 基于t_cordic算法的低开销迭代三角函数装置 | |
CN109146067B (zh) | 一种基于FPGA的Policy卷积神经网络加速器 | |
CN101174200A (zh) | 一种浮点乘加融合单元的五级流水线结构 | |
CN106202890A (zh) | 基于CORDIC和Taylor算法相结合的全流水浮点三角函数装置 | |
Oudjida et al. | Radix-$2^{r} $ arithmetic for multiplication by a constant | |
CN113741858B (zh) | 存内乘加计算方法、装置、芯片和计算设备 | |
US11922133B2 (en) | Processor and method for processing mask data | |
US10628124B2 (en) | Stochastic rounding logic | |
CN100511125C (zh) | 一种cordic算法的实现装置 | |
Xue et al. | Design and implementation of an efficient modified CORDIC algorithm | |
Hsiao et al. | A memory-efficient and high-speed sine/cosine generator based on parallel CORDIC rotations | |
CN111061992A (zh) | 一种基于抛物线的函数拟合方法及其装置 | |
CN107423026B (zh) | 一种正余弦函数计算的实现方法及装置 | |
CN107102841A (zh) | 一种坐标变换并行计算方法和装置 | |
CN112783469A (zh) | 一种用于执行浮点指数运算的方法及装置 | |
Rudagi et al. | Comparative analysis of radix-2, radix-4, radix-8 CORDIC processors | |
Daud et al. | Hybrid modified booth encoded algorithm-carry save adder fast multiplier | |
CN104615404A (zh) | 一种基于查表操作的高速浮点除法部件装置 | |
Hertz et al. | Parabolic synthesis methodology implemented on the sine function | |
CN113791753A (zh) | 一种基于fpga的支持快速除法的可编程dsp | |
CN112783470A (zh) | 一种用于执行浮点对数运算的装置和方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | 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 |