基于FPGA的DDS信号发生器设计,生成频率可调的正弦波、三角波、锯齿波和方波

一、需求概述

采用EGo1 FPGA开发板,基于DDS原理,通过拨码开关选择输出的波形为正弦波(2'b00)、三角波(2'b01)、锯齿波(2'b10)或者矩形波(2'b11),并且可以通过按键调高或调低频率,调节频率范围为10Hz~1MHz。

开发环境为Vivado 2018.3,采用Verilog HDL编写,并进行波形仿真,最终下板验证。

二、DDS设计原理

DDS(Direct Digital Synthesizer, 即直接数字频率合成),因其低功耗、高分辨率、变频迅速等优势,已被广泛应用于遥感、雷达、导航等多个领域。

DDS主要由相位控制字、频率控制字、相位累加器、ROM查找表、DAC、等构成,其中相位控制字与频率控制字支持外部实时动态调控。其工作原理为:系统时钟驱动其内部的相位累加器进行相位增量运算,将ROM查找表输出的多位二进制数据经D/A转换输出模拟电信号,从而产生不同频率波形,同时保持频率改变过程中的相位连续性,DDS结构示意图如图1所示。

图1 DDS结构示意图(N、M表示位宽)

相位累加器作为硬件系统核心单元,由N位全加器与N位累加计数器组成,每次时钟上升沿到来时,累加器计数值会递增,经过2^N个时钟周期完成1个周期的信号输出。假设累加器输入的时钟频率为f_clk,此时相位累加器能够产生信号频率精度为f_clk/2^N,若想实现信号的输出频率为f_out,需在此基础上乘以频率控制字F_WORD,计算公式为:

f_out = F_WORD * f_clk / 2^N

相位控制字的位宽M与ROM的地址位宽一致,将相位累加器N的高M位截断,作为后续ROM的地址输入,而相位控制字直接叠加到这个地址信号中,假设p_out为调节的相位,P_WORD为相位控制字,对应的相位变化关系如下:

p_out = P_WORD 2Π / 2^M

ROM查找表中存储了"相位-幅度"对照表,即查找表中每个地址,都对应了一个完成波形从0到2Π的一个值。本实验采用相位截断法,截取32bits位宽相位累加器的高8为有效相位值作为ROM的查询相位地址。相位累加器截断输出相位作为ROM查找表的地址输入,并根据地址输出相应的幅值。

因此,通过查找表可以实现高精度的波形生成,正弦波、三角波、锯齿波和方波的ROM查找表分别用于存储对应的波形数据点,通过调整频率控制字的值,可以改变输出信号的频率;通过改变相位控制字的值,可以改变输出信号的相位。

三、系统搭建

EGo1开发板的实物如图2所示,是依元素科技基于Xilinx Artix-7 FPGA研发的便携式数模混合基础教学平台,拥有丰富的外设:VGA接口、音频接口、USB-UART/JTAG接口、USB转PS2接口、2个4位数码管、16个LED灯、8个拨码开关、1个8位DSP开关、5个按键、1个模拟电压输入、1个DAC输出接口、SRAM存储器、SPI FLASH存储器、蓝牙模块和1个通用扩展接口。

EGo1开发板板载的FPGA芯片型号为Xilinx Artix-7系列XC7A35T-1CSG324,具有33280个逻辑单元、41600个寄存器、1800kb的BRAM和90个DSP等逻辑资源,可以实现较复杂的数字逻辑设计。

图2 EGo1开发板实物图

由于EGo1开发板中板载了一个8位的DAC数模转换芯片DAC0832,DAC输出的模拟信号连接到接口J2上,所以仅需要一个EGo1开发板接口完成本设计。EGo1开发板上的DAC0832电路原理图如图3所示。

图3 DAC0832电路原理图

四、模块设计与仿真

(注意事项:使用Vivado打开.v文件查看代码时,可能会出现乱码的情况,使用Notepad++打开即可。)

本设计的整体模块框图如图4所示,各个模块的介绍如下:

(1)波形选择模块:根据拨码开关来选择对应的波形:正弦波(2'b00)、三角波(2'b01)、锯齿波(2'b10)或者矩形波(2'b11)

(2)频率控制模块:根据频率控制按键来调整频率,(增大或减小频率),计算对应的频率字输出到DDS控制模块

(3)正弦波、三角波、锯齿波和方波ROM:用于存储正弦波和三角波的波形数据文件,DDS控制模块输出地址给ROM,然后得到对应地址下ROM中的数据

(4)DDS控制模块:根据DDS生成对应频率的波形

(5)DA转换模块:驱动DAC0832完成数字信号转模拟信号,输出到对应管脚,最后可以用示波器观察

图4 DDS波形发生器整体模块框图

系统整体仿真波形如图5所示,分别为正弦波、三角波、锯齿波和方波(由于Vivado进行模拟波形显示时,会自动把离散数字点用直线连起来了,所以 0 / 255 的方波在显示上看起来像三角波;数据本身完全正确,这是显示方式导致的假象,不是设计问题)。

图5 系统整体仿真波形

将dac_data以无符号十进制数的格式进行显示,如图6所示,可以看出,方波的数据正确,仿真验证通过。

图6 数据以无符号十进制表示结果

五、上板验证

对工程进行全编译,工程总结界面如图7所示。

图7 工程总结界面

将bit流文件下载到EGo1开发板,并用示波器观察DAC输出的模拟波形,具体操作如图8所示。

图8 开发板操作示意图

初始时,各个波形的频率均设置为1000Hz,正弦波、三角波、锯齿波和方波的波形如图9-12所示。

图9 正弦波波形

图10 三角波波形

图11 锯齿波波形

图12 方波波形

将波形切换至正弦波显示,分别增大频率和减小频率,结果如图13和图14所示,频率分别为1.02kHz和977Hz。

图13 增大频率显示结果

图14 减小频率显示结果

频率增大到2kHz和减小到511Hz的结果如图15和图16所示,下板验证通过。

图15 频率增大到2kHz

图16 频率减小到511Hz

六、获取方法

获取方法:加入知识星球------FPGA设计入门与提高

相关推荐
第二层皮-合肥6 小时前
Vivado 自动生成的 AXI‑Lite 从机 IP 的操作步骤
fpga开发
blue_ice .8 小时前
Verilog DDS 数字信号发生器:DAC 输出模拟波形与 ADC 回采观测
开发语言·单片机·嵌入式硬件·fpga开发
Eloudy13 小时前
基于 PTP 的 FPGA→RoCE→CPU 单向延迟测量实验方案
gpu·fpga
薛定谔的bug~13 小时前
【vivado】10G ibert 工程
fpga开发
博览鸿蒙13 小时前
新手怎么挑一块靠谱的FPGA开发板?
fpga开发·fpga·fpga开发板
威嵌神州15 小时前
VxWorks6.9 BSP 适配:飞腾 D2000/FT2000/4 平台、驱动开发
驱动开发·嵌入式硬件·fpga开发·系统架构
FPGA小迷弟1 天前
【无标题】
fpga开发·dsp开发·fpga·sdr·无线电
szxinmai主板定制专家1 天前
【工控实战】RK3568/RK3588 8路隔离CAN/CANFD完整解决方案|多路总线并行通信、车载/工控量产落地
人工智能·fpga开发·zynq·mpsoc·半导体设备
郝旭帅电子设计团队2 天前
Xilinx FPGA的BANK标号命令规则
fpga开发·郝旭帅电子设计团队·郝旭帅
威嵌神州2 天前
天脉 3 开发环境与 BSP 适配:IDE license、驱动开发、飞腾平台
ide·驱动开发·嵌入式硬件·fpga开发