下面以输入的频率控制字为1 200 Hz 为例进行设计。
Fre_sample, 表示系统采用时钟;Fre_cnt_word 表示频率控制字。
1)可变模计数器的设计
可变模计数器是根据频率控制字,计算出正余弦表的查表所需的地址;同时要保证产生的正余弦波的相位保持连续(有些应用场合常常要求输出的相位连续),即置于相应的余数值。在第1 个工作时钟周期读入频率控制字,第2 个工作时钟周期内计算出mod(Fre_sample,Fre_cnt_word)作为相位控制字,第3 个工作时钟周期内部计数器复位置入相位控制字,第4 个时钟周期开始以频率控制字为步长,相位控制字为初始值进行计数输出。
2)正余弦查找表的设计
正余弦查找表是根据可变模计数器的输出查表得到相应载频波形的输出。
基于FPGA 的NCO 设计的一个关键就是波形存储器ROM 相位累加器的输出地址作为ROM 的地址输入,pcb抄板经查表和运算后,ROM 输出正余弦波形的量化数据; 设计中主要是要节省存储器资源的开销,即减小ROM 存储表的空间;由于存储表的尺寸随着地址位数或数据位数的增加呈现指数级递增关系,所以在满足频率分辨率、信号性能的前提下,主要考虑较小ROM 存储表的开销;在实际的应用中,可以充分利用正余弦信号在一个周期内的对称性来减少ROM 存储表的开销, 例如正弦信号, 在一个周期内对于X 轴是对称的,基于此可以将ROM 存储表减少至原来的1 /2, 再利用半周期内的左右对称性,又可以将ROM 存储表减少至原来的1 /2,因此通过一个正弦查找表的前1 /4 周期就可以变换得到整个正弦波周期查找表,这样就节省了3 /4 的存储器资源。
正余弦表的具体设计思想如下: 取频率分辨率为df=1 Hz ; 假设频率控制字为1 200 Hz 的频率左右, 现考虑对1 200 Hz 的正余弦波形每一个周期采8 个样点,则可得采样率为fs =1 200×8=9 600 Hz.设对于每一个样点值取8 bit 量化,则每个表格共需存储9.6 kB;(如果考虑到正、余弦信号的对称性,设计时可优化为上每个表格存储1/4 个波形即可,即每个表格只需存储2.4 kB;)使用时是用步长STep 来调节输出频率, 同时保证输出的正余弦波的相位连续。如果每隔0样点取1,即step=1,输出频率为1 Hz;每隔1 点取1,即step=2,输出频率为2 Hz;……;每隔1 199 点取1,step=1 200, 输出频率为1 200 Hz.