基于FPGA的CORDIC算法设计
--源码仿真以及实际的工程验证
KevinWan
CORDIC算法
坐标旋转数字计算机(CORDIC:Coordinate Rotation Digitial Computer)由Volder.J 1959年提出的,1971年J.S.Walther提出统一CORDIC算法,把圆周旋转,双曲旋转和直线旋转统一到一个CORDIC迭代方程里,为统一硬件实现多功能提供了前提。在硬件设计中,浮点三角函数、指数函数、对数函数等超越函数都是一种非常耗时和占用资源的运算,而CORDIC算法从运算本身入手,将这些复杂的超越函数分解为简单的加法和移位运算,而且该算法是一种规则的算法,可以很容易在硬件上实现,目前CORDIC算法已经被成功地运用于FFT、DCT等数字信号处理等领域。
而采用CORDIC算法来实现NCO时,则无需使用乘法器,它只需要一个最小的查找表(LUT),利用简单的移位和相加运算,即可产生高精度的正余弦波形,尤其适合于FPGA的实现。
本设计采用Verilog来设计,通过Modelsim和Matlab仿真,实际工程上运用。
Cordic模块输出的Sin和Cos时域波形(Modelsim中的仿真波形)
输出数据得到的频域特性(仿真数据通过matlab仿真出的频谱)
部分源代码如下:
实际运用只需要更改PHA_WORD即可,他是100KHZ的整数倍,比如需要输出1MHZ的正余弦信号,即赋值为PHA_WORD=10即可。
内外:如果输出的频率变化不大的话,也可以采用查表的方式产生NCO,这样只需要Memory,需要较少的LE资源即可实现NCO。
用户1863804 2015-12-30 08:56
用户1822227 2015-5-8 22:06