DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 118|回复: 0
打印 上一主题 下一主题

直接数字频率合成器的PFGA实现

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-17 15:12:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
摘要:系统采用Xilinx公司生产的型号为XC3S200的FPGA芯片和Maxim公司生产的型号为MAX5885的专用D/A芯片,利用直接数字频率合成技术,通过Xilinx公司的ISE 9.2开发软件,完成DDS核心部分即相位累加器和ROM查找表的设计。可得到相位连续、频率可变的信号。经过电路设计和模块仿真,验证了设计的正确性。由于FPGA的可编程性,使得修改和优化DDS的功能非常快捷。
关键词:FPGA;直接数字频率合成;数/模转换器;ISE 9.2

0 引言
??? 1971年,美国学者Joseph Tierney等三人提出了基于全数字技术,从相位概念出发直接合成所需波形的一种新的频率合成原理,称之为直接数字频率合成器(Drect Digital Synthesis,DDS)。这是频率合成技术的一次重大革命,与第二代基于锁相环频率合成技术相比,DDS具有频率切换时间短、频率分辨率高、相位可连续变化和输出波形灵活等优点。因此,广泛应用于教学科研、通信、雷达、自动控制和电子测量等领域。随着DDS技术的不断发展完善,近几年来,其应用范围已经扩展到宇航、遥控遥测、仪器仪表等各项电子领域。
??? 虽然现在市场上有许多专用的DDS芯片,但控制方式却是相对固定的,因此不一定是所需要的。现场可编程门阵列(Field Programmable Gate Array,FPGA)器件具有速度快、集成度高和现场可编程的优点,因而在数字处理中得到广泛应用,越来越得到硬件电路设计工程师的青睐。因此,利用FPGA的这些特性,则可根据需要方便的实现各种比较复杂的调频、调相和调幅功能。

1 DDS结构原理
??? DDS是一种从相位概念出发直接合成所需波形的数字频率合成技术,主要通过查找波形表实现。由奈奎斯特抽样定理可知,当抽样频率大于被抽样频率的2倍时,通过抽样得到的数字信号可通过一个低通滤波器还原成原来的信号。
??? DDS的工作原理为:在参考时钟的驱动下,相位累加器对频率控制字进行线性累加,得到的相位码对波形存储器寻址,使之输出相应的幅度码,经过模/数转换器得到相应的阶梯波,最后再使用低通滤波器对其进行平滑,得到所需频率的平滑连续的波形,其结构如图1所示。




??? 相位累加器由N位加法器和N位累加寄存器级联构成。每经过一个时钟脉冲fclk,加法器就将频率控制字与累加寄存器输出的累加相位数据相加,把相加后的结果送至累加寄存器的数据输入端。相位累加器输出的数据就是合成信号的相位,相位累加器的溢出频率就是DDS的输出信号频率。用相位累加器输出数据作为波形存储器(ROM)的相位取样地址,这样就可以把存储在波形存储器内的波形抽样值(二进制编码)经查找表查出,完成相位到幅度的转换。
??? DDS模块的输出频率是系统工作频率、相位累加器比特数N以及频率控制字三者的一个函数,其数学关系由式(1)给出。
???


??? 它的频率分辨率,即频率的变化间隔为K/2N。
2 系统功能单元实现
?? 该系统设计是针对DDS的基本结构,以FPGA为核心,加上外围电路而实现的。
2.1 相位累加器
??? 相位累加器由8位加法器与8位寄存器级联构成。累加器将加法器在上一个时钟作用后所产生的相位数据反馈到加法器的输入端:使加法器在下一个时钟作用下继续与频率控制字data相加,实现相位累加,当相位累加器累加结果等于或大于256(当N=8时),则产生1次溢出,完成1个周期波形输出。该相位累加器采用Verilog语言设计实现。
                          
                       
                          
                               
2.2 波形存储器
??? 以相位累加器输出数据作为波形存储器的取样地址,进行波形的相位—幅码转换,即可在给定的时间上确定输出的波形的抽样幅码。N位的寻址ROM相当于把0~2π的正弦信号离散成具有2N个样值的序列。若波形存储器有D位数据位,则各样值的幅码以D位二进制数值保存在该模拟ROM中,按照不同地址输出相应相位的正弦信号的幅码数值。为了更加有效的表示波形,当然期望波形存储器输出的二进制值位数越多越好。但是查找表的设计和D/A转换器的选择是相关的,因此需要选择位数高的D/A转换器。本文设计的正弦表,具有16b输出,采样点为256。
2.3 D/A转换电路的实现
??? D/A转换单元是继波形数据产生单元之后,将数字量形式的波形幅值转换成所要求的合成频率的模拟量形式信号。DAC输出信号实际上是阶梯模拟信号,需在D/A转换后利用低通滤波器对波形进行平滑处理。在此,用Maxim公司生产的A/D换器MAX5885芯片。该芯片需要将输入时钟信号转换为差分输入,且由外部芯片MAX6161提供1.2 V的参考电压,D/A转换后的差分输出经变压器转换后即可得到所需的信号:
???



3 系统软件设计
3.1 累加控制模块的设计
??? 相位累加器主要完成相位累加,实现输出波形频率可调的功能。该模块采用Verilog HDL语言来实现,若要求DDS系统精度高,相位累加器的位数N需较大。这里取N=8,它的Verilog HDL关键代码如下:
???


??? 其中,data信号为8位的频率控制字,通过改变data的值可以实现不同频率波形的输出。
3.2 波形存储器的设计
??? 针对不同的可编程器件,ROM查找表的设计采用的方法也不相同。主要是基于IP核Single Port BlockMemory和Verilog选择语句这两种方法。使用SinglePort Block Memory的波形存储表只需要产生数据文件*.mif或*.coe,然后直接在定制Single Port BlockMemory时,添加数据文件即可。不过这种方法在FPGA支持内部嵌入式阵列块(EAB)时才可以使用;使用Verilog选择语句比较直观,但当输入数据量大的
这种方法是比较繁琐的。此次设计采用第一种方法。
??? coe文件是在编译和仿真过程中作为存储器(ROM或RAM)初始化输入的文件,即memory initializationfile。创建coe文件的方式有很多种,在这次设计中,在Matlab中采用C语言来生成coe文件。coe文件编写格式如下:
???


??? 将生成的cos.txt文件的后缀该为.coe,打开文件并将最后一行的逗号改为分号,并在文件的最开始添加下面两行:
???


??? 最后保存文件退出,并加载到Single Port BlockMemory所生成的ROM中。加载时要特别注意数据基数和数据长度的参数设置。

4 系统的功能仿真和验证分析
??? 累加控制器、ROM查找表组成一个整体,实现了一个基本的DDS系统。该设计以原子钟(33 MHz)为基准频率输入,取累加器为32位,实现输出频率为700 kHz的信号。
                          
                       
                          
                               
??? 通常相位累加器的位数N很大,实际设计中受到体积和成本的限制。为了节省ROM的容量采用相位截断的方法,一般只取累加器输出的高几位作为ROM的寻址地址。设计中取累加结果的高8位(N=8)来进行查表,也就是说余弦ROM有256个寻址地址,数据宽度为16。为了验证本系统设计的正确性,利用Modelsim软件对上述程序仿真,仿真结果如图2所示。

file:///F:/现代电子技术(计算机)/2011.05/9/a.jpg


??? 信号发生器功能验证无误,用示波器观测实验波形如图3所示,信号频谱如图4所示。

file:///F:/现代电子技术(计算机)/2011.05/9/b.jpg


file:///F:/现代电子技术(计算机)/2011.05/9/c.jpg



5 结语
??? 直接数字频率合成(DDS)技术属第三代频率合成技术,与第二代基于锁相环频率合成技术相比,利用DDS技术合成的输出波形具有良好的性能指标本。设计采用Xilinx公司Spartan-3系列的XC3S200芯片和高速16位D/A转换器MAX5885。在DDS的工作原理的基础上,介绍基于FPGA实现DDS的设计方法。??? 通过设置参数可以灵活控制输出频率和分辨率。设计出具有精度高,选择参数控制输出信号,产生一个理想的波形。从测试结果可看出,该系统工作稳定、可靠,并具有较好的参考与实用价值。
                          
                       
                          
                               
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-11-14 21:33 , 耗时 0.095235 秒, 19 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表