基于 FPGA 和 SRAM 的数控振荡器的设计与实现 佟力永,肖山竹 1 引言 数控振荡器是数字通讯中调制解调单元必不可少的部分,同时也是各种数字频率合成器和数字信号发生器的核心
随着数字通信技术的发展,对传送数据的精度和速率要求越来越高
如何得到可数控的高精度的高频载波信号是实现高速数字通信系统必须解决的问题,可编程逻辑器件和大容量存储器的发展为这一问题的解决带来了曙光
本文介绍如何用 FPGA(现场可编程逻辑门阵列)和SRAM(静态随机存储器)实现高精度数控振荡器
2 NCO 概述 NCO(Numerical Controlled Oscillator)即数控振荡器用于产生可控的正弦波或余弦波,其实现的方法目前主要有计算法和查表法等
计算法以软件编程的方式通过实时计算产生正弦波样本,该方法耗时多且只能产生频率相对较低的正弦波,而需要产生高速的正交信号时,用此方法无法实现
因此,在实际应用中一般采用最有效、最简单的查表法,即事先根据各个 NCO 正弦波相位计算好相位的正弦值,并以相位角度作为地址把该相位的正弦值数据存储在表中,然后通过相位累加产生地址信息读取当前时刻的相位值在表中对应的正弦值,从而产生所需频率的正弦波
用查表法实现 NCO 的性能指标取决于查表的深度和宽度,即取决于表示相位数据的位数(查表存储器地址线的位数)和表示正弦值数据的位数(查表存储器数据线的位数)
改善 NCO 性能最简单和最根本的方法是加大查找表的深度和宽度
目前,用查找表法实现 NCO 的普遍做法是用片内 ROM 作为查找表,由于片内资源的限制,查找表的深度和宽度一般不会很大(通常为 256×8bits),大大限制了 NCO 性能的提高,用独立的大容量 SRAM 作为查找表,把查找表从片内移到片外,可以较好解决这个问题,基于这种思想,笔者成功地用 FPGA(Xilinx 公司的 XC2V