随着现代电子技术的不断发展,在通信系统中往往需要在一定频率范围内提供一系列稳定和准确的频率信号,一般的振荡器己不能满足要求,这就需要频率合成技术。直接数字频率合成(DirectDIGITALFrequency Synthesis,DDS)是把一系列数据量形式的信号通过D/A转换器转换成模拟量形式的信号合成技术。DDS具有相对带宽宽、频率转换时间短、频率分辨率高、输出相位连续、可产生宽带正交信号及其他多种调制信号等优点,已成为现代频率合成技术中的姣姣者。目前在高频领域中,专用DDS芯片在控制方式、频率控制等方面与系统的要求差距很大,利用FPGA来设计符合自己需要的DDS系统就是一个很好的解决方法。
现场可编程门阵列(FPGA)器件具有工作速度快、集成度高、可靠性高和现场可编程等优点,并且FPGA支持系统现场修改和调试,由此设计的DDS电路简单,性能稳定,也基本能满足绝大多数通信系统的使用要求。
1 DDS的结构原理
DDS的基本原理是利用有限的离散数据,通过查表法得到信号的幅值,通过数模转换器D/A后生成连续波。DDS的原理框图如图1所示。
其中:频率控制字为fword;相位累加器的位数为N。相位累加器以步长fword做累加,产生所需的频率控制数据;把得到的频率控制数据作为地址对ROM存储器进行寻址。数据存储器(ROM)实质是一个相位/幅度转换电路,ROM中存储二进制码表示所需合成信号的相位/幅度值,相位寄存器每寻址一次ROM,就输出一个相对应的信号相位/幅度值。
理想情况下,累加器的N位全部用来寻址时,DDS的合成频率为:
式中:fword为频率控制字;N为相位累加器位数;fclk为输入时钟。当fworld=1时,得DDS的最小分辨率。如果改变频率控制字,就可以改变合成的频率的频偏。
2 DDS调频系统在FPGA中的实现
2.1 累加控制模块的设计
累加控制模块通过调用QuartusⅡ中模块化库LPM进行设计。即由加法器lpm_add_sub和乘法器lpm_mult及累加器altaccumulate模块构成。若要求DDS系统精度高,相位累加器的位数N须较大。现在大多数专用的DDS芯片的位数都在24~32位之间,这里取N=32。累加控制模块如图2所示。
ADC转换芯片处理后的8位数字信号,为了使DDS合成的频率较大,末尾补4个O作为参数化模块lpm_add_sub的12位输入datai。由于ADC信号输出的是8位二进制偏移码,与计算机处理的二进制补码形式不同,需将二进制偏移码转换成二进制补码,在这里与另一路输入信号常数2 048做减法,就能达到求补的目的,并输出12位有符号数。
12位的输出接入lpm_mult模块,lpm_mult的另一路输入为12位任意数输入。乘法器的输出直接影响累加器累加相位的速度。当乘以一个比较大的数,则频率变化加快。
同理,为了使合成频率较大,乘法器的24位输出在末尾补O成为32位数datab送到累加模块altaccumulate中。为了节省ROM容量,最后取altaccumulate输出的高10位作为ROM查找表的地址信号。累加控制模块的时序仿真如图3所示。
2.2 ROM查找表的设计
针对不同的可编程器件,ROM查找表的设计采用的方法也不相同。主要是基于lpm_rom和VHDL选择语句这两种方法。使用lpm_rom的波形存储表只需要产生数据文件*.mif,然后直接在定制lpm_rom时,添加数据文件即可。不过这种方法在FPGA支持内部嵌入式阵列块(EAB)时才可以使用;使用VHDL选择语句比较直观,但当输入数据量大的时候,这种方法是比较繁琐的。此次设计采用第一种方法。
mif文件是在编译和仿真过程中作为存储器(ROM或RAM)初始化输入的文件,即memory initializatiON file。创建mif文件的方式有很多种,在这次设计中,在Matlab中采用C语言来生成mif文件。mif文件编写格式如下:
通常相位累加器的位数N很大,实际设计中受到体积和成本的限制。为了节省ROM的容量采用相位截断的方法,一般只取累加器输出的高几位作为ROM的寻址地址。设计中取累加结果的高10(M=10)位来进行查表,也就是说正余弦ROM有210=1 024个寻址地址,数据宽度为12。如图4所示,设计了2个lpm_rom模块,分别是sin波形存储器和cos波形存储器。
3 单片机控制电路
此次选择的FPGA芯片为Altera公司的ACEXlK系列的EPlK30TTl44-2。它可以采用专用的配置器件来配置,也可以采用单片机来配置。前者价格昂贵,而且专用配置器件的ROM为一次性编程,不易实现FPGA的系统功能转换。采用单片机C8051F330D对FPGA进行被动串行(PS方式)配置,使用可多次修改的AT24C512(E2PROM)作为配置文件存储器,真正做到“现场可编程”,对提高生产率、降低生产成本均有好处。
系统的配置电路如图5所示。其电路的工作过程为:经QuartusⅡ编译生成的配置文件(.rbf),利用PC机端的控制程序,通过PC机的串行通信口,经U1存储在U2中,U1再根据系统的要求通过P0.6,P1.O,P1.1,P1.6和P1.7等5个I/O口将其存储在U2中的配置数据下载到电路中的FPGA器件U3中。PC机的控制程序在此略。
4 设计结果
累加控制器、ROM查找表组成一个整体,实现了一个基本的DDS系统。DDS系统的最后仿真结果如图6所示。
图6中的pllclk,acum,dai,daq分别代表时钟输入、累加输出及正弦波和余弦波输出。把O~2π的相位分成3FF段,取出相应的幅度值存储于ROM中。ROM中存储数据如下,相位数据(O~3FF),幅度数据(O~FFF)。从仿真图可以看出dai[11..O]输出从EFF~FFF~0~EFF变化,daq[11..O]输出从FFF~O~FFF变化。最后通过单片机配置FPGA运行,把得出的信号通过D/A转换和滤波能够得到所需的正弦波和余弦波信号。
5 结语
给出了基于FPGA的DDS设计的实现方案。通过仿真分析可以看出,DDS输出信号具有如下特点:
(1)频率稳定性好,转换时间短,分辨率高,相位变化连续。
(2)设计者只需要通过改变测试输入数据,就能够快速准确地实现不同波形并且验证正确性,使得测试工作更加全面高效,从而提高了调试效率和成功率。
(3)整个信号实现过程较为简单,实用性较强。
限于实验条件,此次设计在降低相位截断误差等方面仍有改进的空间,还可以进一步优化,限于篇幅,在此不多做介绍。