广告招募

当前位置:中非贸易网 > 技术中心 > 所有分类

基于VHDL的直接数字频率合成器设计与实现

2025年12月18日 08:45:51      来源:汉信(广东)通信设备股份有限公司 >> 进入该公司展台      阅读量:1

分享:

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.凡本网注明"来源:中非贸易网"的所有作品,版权均属于中非贸易网,转载请必须注明中非贸易网。违反者本网将追究相关法律责任。
2.企业发布的公司新闻、技术文章、资料下载等内容,如涉及侵权、违规遭投诉的,一律由发布企业自行承担责任,本网有权删除内容并追溯责任。
3.本网转载并注明自其它来源的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品来源,并自负版权等法律责任。 4.如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系。