基于cordic算法的nco实现

上传人:艾力 文档编号:36468037 上传时间:2018-03-29 格式:PDF 页数:6 大小:173.12KB
返回 下载 相关 举报
基于cordic算法的nco实现_第1页
第1页 / 共6页
基于cordic算法的nco实现_第2页
第2页 / 共6页
基于cordic算法的nco实现_第3页
第3页 / 共6页
基于cordic算法的nco实现_第4页
第4页 / 共6页
基于cordic算法的nco实现_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《基于cordic算法的nco实现》由会员分享,可在线阅读,更多相关《基于cordic算法的nco实现(6页珍藏版)》请在金锄头文库上搜索。

1、 基于基于 CORDIC 算法的算法的 NCO 实现实现 田力, 冯琦 (西安电子科技大学 电路设计研究所,陕西 西安 710071) 摘要摘要:NCO 在信号处理方面有着广泛的应用。而函数发生器是 NCO 中的关键部分,本文基 于 FPGA 用状态机和流水线方法实现了 CORDIC 算法,并取代了传统的 ROM 查找表法。 最后通过 Quartus II 软件给出仿真结果,验证了理论的正确性。 关键字:关键字:数字控制振荡器 CORDIC 现场可编程门阵列 The implementation of NCO based on CORDIC algorithm LI Tian, QI Feng

2、 (Institute of Electronic CAD,Xidian University,Xian 710071) ABSTRACT:Function generator is the main part of NCO which is widely used in signal processing. A new CORDIC algorithm implemented by the state machine and pipeline based on FPGA is proposed to replace the traditional look-up table ROM meth

3、od in this paper.The simulated result of Quartus II shows that the given theory is efficient. KEY WORDS: NCO CORDIC FPGA 1. 引言引言 数字控制振荡器(NCO,numerical controlled oscillator)是软件无线电、直接数据频率合成器(DDS,Direct digital synthesizer) 、快速傅立叶变换(FFT,Fast Fourier Transform)等的重要组成部分,同时也是决定其性能的主要因素之一,随着芯片集成度的提高、在信号处理

4、、数字通信领域、调制解调、变频调速、制导控制、电力电子等方面得到越来越广泛的应用。图 1 为 NCO 的基本图示。 相位控制字 相位寄存器 函数发生器 频率控制字 系统控制逻辑模块 相位累加器 相位相加器 时钟 图 1 数字控制振荡器结构图 在系统时钟的控制下,相位寄存器以频率控制字(步长)累加,相位寄存器的输出与相位控制字相加,然后输入到函数发生器,产生期望的函数样值。实现 NCO 的关键部分是相位-幅度变换电路,即图 1 中的函数发生器。传统的实现方法是使用查找表,其优点是简单,准确,但是缺点也是显而易见的,存放相位-幅度的查找表 ROM 的大小和相位精度的位数成指数关系。当精度要求很高的

5、时候需要使用外部的 ROM 来扩展,这样将会降低系统的处理速度。虽然也有人提出一些改进的查找表方式,来压缩 ROM 空间1 2,但是,随着微电子技术的发展, 使用实时计算来替代查找表的方式是一大趋势, 其能有效的提高系统的处理速度。在实时算法中,泰勒级数法和反函数求值法两种方法相比较,泰勒级数法的实现需要乘法器, 在硬件的复杂性和速度上受到一些限制; 反函数求值法在速度上要比坐标旋转数字计算机(CORDIC,COordinate Rotations DIgital Computer)算法慢。而 CORDIC 算法在硬件实现上只需要移位和加/减法即可完成复杂的计算功能,能很好地兼顾速度、精度、简

6、单、高效等方面。 2. CORDIC 原理原理 CORDIC (COordinate Rotations DIgital Computer)算法由 J. Volder 于 1959 年提出3,首先用于导航系统,使得矢量的旋转和定向运算不需要做查三角函数表、乘法、开方及反三角函数等复杂运算。 J. Walther在1974年用它研究了一种能计算出多种超越函数的统一算法4。 图 2 CORDIC 算法坐标图示 如图 2 所示,初始向量(0x,0y)旋转角度之后得到另一个向量(1x,1y) ,对于此两向量有简单的关系如下: 1000010000cossincos(tan ) cossincos(ta

7、n )xxyxy yyxyx = =+=+? ?(1) 假设初始向量经过n次旋转之后得到新向量, 并且每一次旋转的角度恰好是正切值为2的倍数,则第i次旋转的角度arctan(2 )i=,即21cos12i=+。 容易得到角度0nii iS=,其中iS表示旋转角度的方向,即iS=-1,1。 第i+1步旋转可以表示为 X Y (x0,y0) (x1,y1) 12121(2 )121(2 )12i iiiiii iiiiixxS yyyS x + +=+=+?(2) 其中21 12i+称为模校因子,对于多次旋转,当旋转次数一定时,可以收敛于一个常数,容易得到2 01 12i i =+0.6073。

8、这样,该算法每一步的公式可以简化为 11(2 ) (2 )i iiii i iiiixxS y yyS x + += =+? ?(3) 可以看出, 前面假设的旋转角度值, 在这里可以使该算法方便的转换为硬件的加减法器 和移位器。引入变量z,该变量表示进行i次旋转后与目标角度之差 1arctan(2 )i iiizzS +=? (4) 经过n次旋转以后初始向量就趋近新的向量,此时z就趋近于0,即与目标角重合。即 100100cossin cossin0nnnxxzxy yyyx= =+? ? (5) 3. CORDIC 算法实现及性能分析算法实现及性能分析 由前面可以看出,CORDIC算法的思想

9、是通过一系列迭代算法,以固定的参数角度偏摆以逼近所需的旋转角度。 该算法的实现是靠迭代来逼近需要的值, 同时可以看出由于硬件实现的限制,不能无限的迭代,否则同样会造成所需资源和处理时间的增长。因此在实际应用中需要根据系统的要求来选择迭代的次数以达到系统要求的精度。 本设计中使用参数为: 输入、输出均为16位;角度常数为16位,即角度的精度可以达到小数点后3位。 前面算法介绍中可以看到, 迭代角度初始最大为45o, 由公式arctan(2 )i=可以看出,旋转角的范围是和迭代次数 M 相关的:1100arctan(2 )arctan(2 )MM iiii =。容易得到取值为99.88 ,99.8

10、8oo。而在实际应用中,旋转角的范围一般是需要在180 ,180oo的,因此解决的方法可以是多增加两次i=0 的迭代来覆盖角的范围。另一方面,由于三角的正、余弦函数值不仅关于象限对称,而且关于/4 对称,因此在计算函数 值时只需要将需要计算的角度映射到-/4,/4中进行计算,之后根据三角函数的对称性 来选取符号输出就可以了。 如图 3 所示, 前处理单元在考虑角度的时候只需要考虑角度信号 前 3 位, 据此判断角度所在的位置; 后处理单元根据三角函数在不同象限的符号来控制输出,对应输出为原值或补值,在总体设计上能节约一部分系统资源。 图3 基于CORDIC算法的函数发生器框图 在具体的实现中,

11、 CORDIC 算法可以采用两种基本结构: 占用较少资源的状态机实现方 法和运算速度较快的流水线结构实现。 对于时间要求不高或要求较少资源实现的场合, 可以 使用状态机的实现方法,其框图如图 4 所示。 图4 状态机实现的CORDIC处理单元 CORDIC算法的状态机实现是依靠核心部分在外部状态控制逻辑单元的控制下进行迭代来实现的。初始值输入后,由于每一次的迭代都是必须通过输出反馈到输入端,因此时序状态机的设计是很重要的, 包括选择进入迭代计算的输入值和输出时的具体时序。 每个周期都计算一次新的x,y值,之后通过16个周期的迭代将计算好的值送给外部逻辑模块。由于每次迭代都使用同一个逻辑块, 因

12、此该逻辑块中的移位器须按照状态的不同对输入数据进行不同位的右移。由于迭代运算只能依次单步运算,系统运行的速度受到限制。 而流水线结构则能得到更快的处理速度, 当外部逻辑模块处理速度较高时, 为了得到较高的吞吐速率可以使用流水线结构来实现。系统框图如图5所示。 前 处 理 单 元 后 处 理 单 元 CORDIC 处理单元 X0 Y0 Z0 XN YN Z Sin(Z) Cos(Z) X 寄存器 Y 寄存器 移位 寄存器 加减法器 加减法器 移位 寄存器 Z 寄存器 加减法器 角度 常数表 状态 控制 逻辑 单元 X0 Y0 Z0 XN YN 图5 流水线实现的CORDIC处理单元 CORDIC

13、算法的流水线结构中,是通过将其迭代单元使用级联的方式连接来实现的,最 理想状态可以连续输出运算结果。 每一级的处理中都需要移位器和加减法器, 虽然需要更多 的逻辑单元来实现,但相比状态机实现的方法,并不需要额外的状态控制逻辑,流水线结构 只需要全局时钟的正确控制将前一级的输出传送到下一级的输入就可以了。 这使得算法的执 行速度基本只与输入的速度有关, 当处理的数据充满流水线的时候, 相当于完成一个数据只 需要一个时钟,其运行的效率很高。 CORDIC算法中,需要对模校因子进行校正,从而得到正确的数值。但是如果只是应用于求三角函数值的话,直接设定x为2 01 12i i =+,y为0,则在最终的

14、输出得到的就是正确的三角函数值。在本设计中,采用verilog语言对该状态机和流水线进行设计,在QuartusII软 件下采用CycloneII系列的EP2C5F256C6器件作为仿真验证平台,得到算法结果正确。从仿 真图6,图7中容易看出两者在实现上速度的差异。 图6 状态机实现的CORDIC算法仿真图 右移 0 位 加 减 法 器加 减 法 器右移 0 位 加 减 法 器arctan02 右移 1 位 加 减 法 器加 减 法 器右移 1 位 加 减 法 器arctan12右移 2 位加 减 法 器加 减 法 器右移 2 位加 减 法 器arctan22右移 15 位 加 减 法 器 加

15、减 法 器 右移 15 位 加 减 法 器 arctan152 X0 Y0 Z0 YN XN 图7 流水线实现的CORDIC算法仿真图 4. 结论结论 由于CORDIC算法本身就是一种近似算法,因此当实际应用CORDIC算法的时候,在精 度要求满足的情况下, 应按项目需求在速度和面积之间选取有效的平衡点。 随着芯片技术的 提高,CORDIC算法值得进一步研究。本文通过状态机和流水线实现了CORDIC算法,并验 证了角度预先处理的方法,在明确精度要求的情况下对不同应用环境有一定导向作用。 参考文献: 参考文献: 1 H T Nicholas,H Samuli. An Analysis of th

16、e output spectrum of direct digital frequency synthesizers in the pretence of phase accumulator truncation C.Annual frequency Control Symposium,1987,41 2董国伟,李秋明,赵强等.基于FPGA的直接数字频率合成器的设计C. 仪器仪表学报,2006,27(6):877-879 3 Jack E Volder. The CORDIC Trigonometric Computing TechniqueC.IRE Transactions on Electro

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号