《电子技术应用》
您所在的位置:首页 > 可编程逻辑 > 设计应用 > 基于CORDIC算法的NCO实现
基于CORDIC算法的NCO实现
来源:电子技术应用2011年第1期
冯 亮1,肖 辉1,姚振东2
(1.中国科学院大气物理研究所,北京100029;2.成都信息工程学院 电子工程学院,四川 成都61
摘要: 介绍了CORDIC算法的原理,给出了为满足某一技术指标而设计的NCO的分析过程,给出了软件仿真波形和硬件实现波形的对比。
关键词: SoPC NCO CORDIC FPGA CycloneIII
中图分类号: TN74
文献标识码: B
文章编号: 0258-7998(2011)01-0062-03
NCO design based on CORDIC algorithm
Feng Liang1,Xiao Hui1,Yao Zhendong2
1.Institute of Atmospheric Physics, Chinese Academy of Sciences, Beijing 100029,China; 2.Electronic Engineering College, Chengdu University of Information Technology, Chengdu 610225,China
Abstract: This paper derives the principle of CORDIC algorithm precisely and an analysis process of the design is given in order to design some technical specification NCO. Lastly, it is proved the realization of the design to compare the wave by software simulation with the wave that the hardware generated.
Key words : NCO;CORDIC;FPGA


    数控振荡器(NCO)广泛应用于各种雷达系统和无线收发系统中,其实现方法主要有查表法和坐标旋转算法。查表法会消耗大量的ROM资源,这样不仅增大了能耗,而且增加了芯片的面积;CORDIC算法很好地解决了查表法的问题,而且CORDIC算法由于只采用加法和移位运算,因此很适合在FPGA中实现。

    用图2对上述的旋转过程作解释,旋转开始的初始值是位置①,最终的目标是位置⑤。

    第一次,位置①与位置⑤之间的夹角z1>0,因此,逆时针旋转一个正切值恰好是2-1的角度,完成了第一次旋转。
    
2 NCO的实现
    CORDIC算法实现的NCO基本结构如图3所示。当有数字中频输入信号时,输出的是数字混频信号,当没有数字中频信号时,输出的是正余弦信号。

    设相位累加器的位宽为n,则NCO的相位分辨率为[1][3]:
  
    确定相位累加器位数后,就可以用Cordic算法设计NCO了。在实现过程中,首先需要建立旋转角度集tan-1(2-i)的查找表,为了保持足够的精度,用下面的表示方法,在硬件里表示直角坐标系的4个区间很容易,在设计中应该注意数字表示法的运用,适当选取二进制和十进制的对应关系,将使整体设计变的更简单。用25 bit表示从0°~360°,二进制l bit代表十进制为:
    360°/225=0.000 010 728 8°。
    正弦、余弦函数旋转变量为[2]:
    当i=0时,arctan(1)=45°= 25'b0_01000000_00000000_
00000000
    当i=1时,arctan(1/2)≈26°=25'b0_00100100_11111010_
01001111
    当i=2时,arctan(1/4)≈14°=25'b0_00010011_11101001_
00111110  
    当i=3时,arctan(1/8)≈7°=25'b0_00001001_11110100_
10011111
    当i=4时,arctan(1/16)≈4°=25'b0_00000101_10110000_
01011011
    当i=5时,arctan(1/32)≈2°=25'b0_00000010_11011000_
00101101
    当i=6时,arctan(1/64)≈1°=25'b0_00000001_01101100_
00010110
    …
    在具体实现时,由于正弦、余弦函数输出值小于1,可定义10 bit二进制数表示输出值-1~+l。为了提高运算速率,采用了8级流水线的方式,QuartusII软件生成的模块如图4所示。各信号的定义见表1。

    本设计雷达中频信号为30 MHz,设定采样频率fs=48 MHz,则本振频率fc=18 MHz,采样频率约是本振频率的3倍,如果按采样频率对本振信号进行采样,大约每3个点就循环出现一次,用Matlab仿真的结果如图5所示。

    低成本CycloneIII FPGA是Altera Cyclone系列的第三代产品。Cyclone III FPGA系列前所未有地同时实现了低功耗、低成本和高性能,进一步扩展了FPGA在成本敏感大批量领域中的应用。本设计中选用CycloneIII系列的FPGA芯片。
    CycloneIII EP3C25采用了1.2 V内核,65 nm工艺,由QuartusII 7.2以上版本软件支持,可以重复编程,通过JTAG接口或者EPROM加载程序,内部有PLL、高速I/O接口和乘法器等模块,主要内部资源参见表2。

    封装的不同,EP3C25的引脚数和可用用户IO数也不相同,详见表3。

    本设计选用240引脚的PQFP封装FPGA芯片EF3C25Q240C8N。
    图6所示波形是采用CORDIC算法在硬件上实现NCO,通过QuartusII软件内嵌的逻辑分析仪SignalTapII观测到的I路信号。与图5比较可看出,采用CORDIC算法在硬件上实现NCO获得成功。

    CORDIC算法解决了查表法实现NCO面临的问题,而且具有很高的分辨率。本设计用Altera公司CycloneIII EP3C25 FPGA芯片,在硬件上实现NCO,同时为了提高其运算速率,采用了8级流水线结构,提高了系统的性能。
参考文献
[1] 姜宇柏,游思晴.软件无线电原理[M].北京:机械工业出版社,2007.
[2] Uwe Meyer-Baese著.数字信号处理的FPGA实现[M]. 刘凌,译.北京:清华大学出版社,2006.
[3] 胡广书.数字信号处理[M].北京:清华大学出版社,1997.
[4] CycloneIII Device handbook,Volume 1.

此内容为AET网站原创,未经授权禁止转载。