- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
基于VHDL的直接数字频率合成器设计与实现
20世纪60年代末,伴随数字集成电路与微电子技术的发展出现了直接数字频率合成器(DDS),它与传统的频率合成技术相比较,具有极高的频率分辨率与稳定度、转换时间短、输出信号的频率、相位、幅度可控等诸多优点,易于实现调频、调相、调幅等多种信号,因而得到广泛应用。本文从DDS的电路结构与具体参数的设计出发,详细论述了DDS的VHDL语言实现过程,给出了频率控制字长为24位的完整的VHDL,代码。
1 DDS的工作原理
目前,比较广泛使用的一种DDS设计方案是查找法,如图1所示,其基本工作原理是通过频率控制字的累加与相位控制字相加形成访问波形表的地址,然后通过地址映射,输出波形的幅度信息给DAC电路,再通过DAC中的LPF,得到相应的波形信号。
以正弦信号合成为例,设输出信号的频率为fo,在不考虑初相位的条件下,其瞬时相位:θ=2πfot,一个Tclk内,相位的变化总量为:
实际当中,确定相位量化字长N的大小,并不是任意的,它既取决于上面两个因素,也与量化信噪比有关。文献[7]给出了较为详细的讨论。如正弦波合成时,相位量化的信噪比与幅度量化的信噪引起的总信噪比估计为:
其中D为正弦信号振幅量化字长。
相位量化字长N越大,所需的查表法空间越大,因此设计DDS时,要合理选择N,D的大小。当N,D取定后,应根据波形特点,进一步采用ROM压缩技术减小所需单元的数量。如合成正弦信号时,可根据信号的对称性,仅存储0~π/2的幅度值,这样可以将ROM大小压缩为原来的1/4。
2 VHDL语言实现
程序设计包含三个部分:数据输入、相位累加和ROM查找,分别由三个进程实现。data_in进程:在WR=0并CLK=1时,写频率控制字;phase_add进程:在CLK上升沿,做相位累加,并取累加结果的高12位的低10位用于ROM表的地址,其最高位与次高位分别送s_1和s_2用来正弦相位区间控制;lookfor_rom进程:在CLK上升沿,按照phase_add进程提供的地址寻址,并对寻址结构按s_1和s_2所划分的四个象限进行数据处理,并将处理的结果输出。相位控制的具体操作如表1所示。
下面程序为正弦DDS的VHDL实现。相位量化字长为24 b,振幅量化字长采用10 b。完整的程序代码如下:
程序中的component dds_rom元件可通过Max+Plus II的File菜单中的MegaWizard Plug-in Manager创建一个LPM_ROM,名为dds_rom.vhl,该元件创建前,需按照图2所示的mif文件格式创建一正弦波形数据文件(如名为:sin_data.mif),该数据文件存有正弦1/4周期波形数据。
由于波形数据文件中数据较多,可通过C语言编程生成数据,生成正弦波形采样数据文件的C程序代码如下:
将这个C语言程序存为singen.c,编译链接后生成singen.exe,即可在DOS命令行下执行:
就可以生成.mif文件中的波形数据。
3 结 语
文中有关代码均是通过Max+Plus Ⅱ10.2编译通过的,读者可稍加修改就可以用于自己的实际系统设计。相位累加器可采用流水线型超前进位加法器实现,同时可增加同步相位取模器以改善DDS的性能,或采用CORDIC算法代替波形ROM的使用。
作者:赵林军
(1.西安电子科技大学 陕西 西安 710071;2.陕西理工学院 陕西 汉中 723003)
来源:《现代电子技术》
上一篇:解决串行接口中的信号完整性问题
下一篇:IP网络路由器的设备安全与设备测试