CORDIC算法硬件电路实现及改进
2014-03-21李庆锋
李庆锋
(同济大学电子科学与技术系,上海 201804)
CORDIC算法硬件电路实现及改进
李庆锋
(同济大学电子科学与技术系,上海 201804)
文章提出了一种新的基于CORDIC算法的硬件电路实现方法。首先介绍CORDIC算法及其原理,然后介绍了CORDIC算法的16级流水线结构硬件电路实现,最后介绍了一种新的改进型实现方法,可以有效在兼顾16级流水线结构的高实时性优点的同时,解决CORDIC算法本身对角度范围的限制问题,同时在某种意义上也降低了电路的复杂度。
NCO;CORDIC算法;16级流水线结构
1 引言
数字控制振荡器(NCO,Numerical Controlled Oscillator)是软件无线电、直接数字频率合成器(DDS,Direct Digital Synthesizer)、快速傅里叶变换(FFT,Fast Fourier Transform)等的重要组成部分,同时也是决定其性能的主要因素之一。NCO的作用是产生正交的正弦和余弦样本,表达式如下:
其中,fLO为本地振荡频率,fs为信号进入混频器的速率[1],通常fs=n.fLO。
一般来说,正弦波样本产生有两种方法,查表法和实时计算法。两种方法各有优缺点。查表法事先把正弦波样本值存储在ROM中,使用时根据正弦波相位及其步进值去搜取ROM中的正弦波样本值。这种方法优点是速度快,硬件电路简单。缺点是如果在正弦波样本值需要高精度、同时n很大的情况下,需要加大存储的样本值,这便增加了ROM的开销,消耗内存。另一种方法是实时计算法,这种方法理论上可以产生任意相位的正弦值,缺点是硬件电路复杂。
CORDIC算法(坐标旋转数字计算方法)是一种用于计算一些常用的基本运算函数和算术操作的循环迭代算法。其基本思想是用一系列与运算基数相关的角度的不断偏摆从而逼近所需旋转的角度。其在硬件上只需要移位和加/减法即可完成正余弦的计算,硬件电路简单,能很好地兼顾速度、精度、简单、高效等方面。
2 CORDIC算法原理
CORDIC算法由J Volder于1959年提出,首先用于导航系统,使得矢量的旋转和定向运算不需要做查三角函数表、乘法、开方及反三角函数等复杂运算。J Walther在1974年用它研究了一种能计算出多种超越函数的统一算法。
图1 CORDIC算法坐标图示
如图1所示,初始向量(x0, y0)旋转θ角度之后得到另一个向量(x1, y1),对于两向量有简单的关系如下:
推广到一般情况,第i次向第i+1次旋转。引入旋转方向Si,1代表逆时针,-1代表顺时针。同时引入剩余角度量Zi,则有:
同时Zi→0。
经过n次迭代,CORDIC算法的输出变为:
如果令x0=k=0.607 3, y0=0, Z0=θ,那么n次迭代后即有xn=cosθ, yn=sinθ。可见CORDIC算法只需移位操作,加减操作以及比较大小操作就能方便快捷地算出所需的正余弦值。
3 CORDIC算法的硬件电路实现
3.1 CORDIC算法的迭代结构流程
CORDIC算法理论上需要无数次迭代才能无限逼近真实值,但这在硬件中显然不能实现。通常方法是迭代16次,这已经能很好地逼近所求值了。一般电路实现是用16级流水线结构,如图2。
图2 CORDIC算法16级流水线结构[3]
该结构优点是运算速度快,当16级流水线完全充满的时候,每个cycle就能出一组正余弦值。但如此电路结构实现的CORDIC算法本身也存在局限性:
(2)一般在一个通信模块中会有很多地方需要用到角度的正余弦值,不可避免地需要用到多个这样的运算模块来产生所需的正余弦值。这样的16级流水线电路结构并不节省空间。
(3)该结构在计算时需要用到16组加减移位操作以及角度大小判断操作,功耗也是一个相当严重的问题。
3.2 CORDIC算法的改进型硬件结构
针对16级流水线结构的局限性,同时也考虑到其实时性的优点,本文提出了另一种电路结构,可以在兼顾16级流水线结构优点的同时,解决其局限性问题。
3.2.1 改进型结构理论基础
3.2.2 电路结构
电路结构图如图3所示。
图3 倍角计算电路图
从图3可以看出,电路是上下对称的,所以在硬件设计时只需一半,即两个乘法器和一个加法器即可。
3.2.3 实验结果与分析
设计采用FPGA测试平台测试两种模块,均采用Verilog描述语言并在QuartusII 6.0和Xilinx ISE 9.1平台上进行综合。
表1 传统与改进型CORDIC结构比较结果
这样,只需乘法器和加法器就能快速算出其余所有角度的正余弦值。这种电路结构兼顾了16级流水线结构的优点,同时也解决了其局限性问题:
(1)此种电路结构,迭代一次,即1个cycle即能出一个角度的正余弦值,满足通信系统实时性要求,计算所有的角度所需cycle数与16级流水线相当。
(2)此种电路结构不用考虑角度的范围。它仅第一次需要利用16级流水线结构算出θ0的正余弦值,之后便使用图3所示模块计算其余角度的正余弦值。
(3)如果芯片中需要多处使用16级流水线CORDIC算法计算正余弦值的,用此种电路代替,可以减少芯片面积,降低功耗,节省成本。
4 总结
由于CORDIC算法本身是一种近似的算法,因此应用CORDIC算法的时候,在满足精度要求的前提下,应按项目实际需求在速度和面积之间选取有效平衡。本文在通常的16级流水线结构上利用其计算出第一个角度的正余弦值,然后摒弃其后续计算需要对角度进行判断的缺点,利用倍角公式构造倍角计算电路,完成后续角度的正余弦计算,空闲下的16级流水线结构依旧可以从事其他初始角度的计算。这不仅降低了电路面积,同时减小了功耗。
[1] 邓小炜. 中频信道化数字接收机方案及算法研究[D]. 电子科技大学,2008.
[2] 杨宏,等. 基于FPGA的CORDIC算法的实现[J]. 西安邮电学院学报,2008(1).
[3] 田力,等. 基于CORDIC算法的NCO实现[D]. 西安电子科技大学.
Hardware Circuit Implementation and Improvement of CORDIC Algorithm
LI Qingfeng
(Electronic science and technology department, Tongji University, Shanghai 201804, China)
The article proposes a new hardware circuit realization method based on CORDIC algorithm. First, it introduces the CORDIC algorithm and its principle. Then it presents the hardware circuit implementation of the CORDIC algorithm using 16 level pipeline structure. At last it recommends a new better method, which can include the high real-time performance and at the same time solve the limits on angle range of CORDIC algorithm. And it also reduces the complexity of the circuit in a certain sense.
NCO; CORDIC algorithm; 16 level pipeline structure
TN402
A
1681-1070(2014)01-0031-03
李庆锋(1988—),男,江苏南通人,就读于上海同济大学电子科学与技术系,集成电路工程专业硕士,主要研究方向为软件无线电接收机。
2013-09-24