前记:师夷长技以自强
1.基本概念
NCO: numerically controlled oscillators 数控振荡器,可以合成一个时间和只域上离散的正弦波,常作为通信系统的正弦载波发生器。
在Quartus II中,nco是以ip核的形式提供的,只需要简单配置几个参数即可。
2.使用简介
对于Quartus II 13.0版本,打开ip核的向导的方式是Tools->MegaWizard Plug-In Manager,然后搜索nco即可在DSP目录下找到,弹出的界面如下
其中只需三步即可完成nco的配置和生成,其中Step3只是一个生成命令,Step2是选择是否生成仿真模型和网标文件,Step1是配置参数的,下面主要说明Step1中的一些参数。
在产生波形的方案中有四种选择,Small ROM是只存储部分的正弦波形到rom中,Large Rom是存储完整的正弦表到rom中,CORDIC是一种直角坐标系下旋转的方法,Multiplier-Based是基于乘法器的方法。前面两个都是基于查找表的,后面两个都涉及数学运算。不同的波形产生方案所产生的波形的质量是不同的,它们的谐波分量可以在频率响应图谱中找到。
相位累加器精度和角度精度可以类比于DDS的框图,但是nco的框图毕竟不同,欲深究可以查看手册。还有nco默认采用100MHz的输入时钟,而系统的clk为50MHz,这里是采用片上PLL解决的,具体使用细节在下一篇文章中会介绍。
这个界面基本上是一些输入输出的控制,为了使频率和相位是可控的,需要勾选图中的两个复选框,并设置频率控制字和相位控制字的宽度。nco是可以多通道输出的,一般情况下使用单通道的正弦和余弦同时输出即可。
这个界面是fpga片上资源的使用情况,与第一个界面中选择的波形产生方案有关。
注:笔者在点击Step3时,在“Generating Megacore function top-level”这里卡了很久,经上网查询后得知需要在进程管理中杀掉quartus_map.exe进程,然后生成才能继续,也算是一个小插曲吧。
3.仿真
需要注意的是nco生成的目录应该工程文件所在的目录,否则仿真的时候会报找不到某些模块的错误。仿真的操作也很简单,只需添加nco_tb.v仿真文件即可。
在DDS中有一条公式
然而在nco中确是
这里,已经把nco_tb.b中的phi 修改为 32'b0。