全新论坛MCU智学网上线,欢迎访问新论坛!稀缺资源、技术干货、参考设计、原厂资料尽在MCU智学网
更新自动建库工具PCB Footprint Expert 2023.13 Pro / Library Expert 破解版

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

[复制链接]
1291 0

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
  1 DDS结构原理
     DDS是一种从相位概念出发直接合成所需波形的数字频率合成技术,主要通过查找波形表实现。由奈奎斯特抽样定理可知,当抽样频率大于被抽样频率的2倍时,通过抽样得到的数字信号可通过一个低通滤波器还原成原来的信号。
     DDS的工作原理为:在参考时钟的驱动下,相位累加器对频率控制字进行线性累加,得到的相位码对波形存储器寻址,使之输出相应的幅度码,经过模/数转换器得到相应的阶梯波,最后再使用低通滤波器对其进行平滑,得到所需频率的平滑连续的波形,其结构如图1所示。
    20121107053759675824938.jpg
     相位累加器由N位加法器和N位累加寄存器级联构成。每经过一个时钟脉冲fclk,加法器就将频率控制字与累加寄存器输出的累加相位数据相加,把相加后的结果送至累加寄存器的数据输入端。相位累加器输出的数据就是合成信号的相位,相位累加器的溢出频率就是DDS的输出信号频率。用相位累加器输出数据作为波形存储器(ROM)的相位取样地址,这样就可以把存储在波形存储器内的波形抽样值(二进制编码)经查找表查出,完成相位到幅度的转换。
     DDS模块的输出频率是系统工作频率、相位累加器比特数N以及频率控制字三者的一个函数,其数学关系由式(1)给出。
    20121107053759738324939.jpg
     它的频率分辨率,即频率的变化间隔为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转换后的差分输出经变压器转换后即可得到所需的信号:
    20121107053759800824940.jpg
     3 系统软件设计
     3.1 累加控制模块的设计
     相位累加器主要完成相位累加,实现输出波形频率可调的功能。该模块采用Verilog HDL语言来实现,若要求DDS系统精度高,相位累加器的位数N需较大。这里取N=8,它的Verilog HDL关键代码如下:
    20121107053759847694941.jpg
     其中,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文件编写格式如下:
    20121107053759910194942.jpg
     将生成的cos.txt文件的后缀该为.coe,打开文件并将最后一行的逗号改为分号,并在文件的最开始添加下面两行:
    20121107053759957074943.jpg
     最后保存文件退出,并加载到Single Port BlockMemory所生成的ROM中。加载时要特别注意数据基数和数据长度的参数设置。
     4 系统的功能仿真和验证分析
     累加控制器、ROM查找表组成一个整体,实现了一个基本的DDS系统。该设计以原子钟(33 MHz)为基准频率输入,取累加器为32位,实现输出频率为700 kHz的信号。
     5 结语
     直接数字频率合成(DDS)技术属第三代频率合成技术,与第二代基于锁相环频率合成技术相比,利用DDS技术合成的输出波形具有良好的性能指标本。设计采用Xilinx公司Spartan-3系列的XC3S200芯片和高速16位D/A转换器MAX5885。在DDS的工作原理的基础上,介绍基于FPGA实现DDS的设计方法。 通过设置参数可以灵活控制输出频率和分辨率。设计出具有精度高,选择参数控制输出信号,产生一个理想的波形。从测试结果可看出,该系统工作稳定、可靠,并具有较好的参考与实用价值。

举报

回复
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

打开支付宝扫一扫,最高立得1212元红包
搜索

图文热点

更多

社区学堂

更多

客服中心

QQ:187196467 服务时间:周一至周日 8:30-20:30

关注我们

关于我们
关于我们
友情链接
联系我们
帮助中心
网友中心
购买须知
支付方式
服务支持
资源下载
售后服务
定制流程
关注我们
官方微博
官方空间
官方微信
快速回复 返回顶部 返回列表