DDS 信号发生器 FPGA 设计 Verilog Quartus
名称:DDS 信号发生器 FPGA 设计 Verilog Quartus
软件:Quartus
语言:Verilog
开发板/平台:Cyclone IV FPGA开发板
功能介绍
本设计实现了一个基于 FPGA 的 DDS 信号发生器,使用 Verilog 编写,工程环境为 Quartus。系统通过 DDS 地址累加方式读取不同波形 ROM 数据,能够输出正弦波、方波和三角波三类常用测试波形,适合用于学习数字波形合成、查表法波形生成以及 FPGA 与 DAC 接口控制。 设计提供 3 路按键输入,分别用于波形选择、频率控制和幅值控制。波形选择模块在正弦波、方波、三角波之间切换;频率控制模块通过频率控制字改变 ROM 地址递进速度,从而改变输出波形频率;幅值控制模块对 ROM 输出数据进行幅度调节,实现输出幅度变化。 输出端面向 TLV5618 DAC 接口,顶层提供 DAC_CS_N、DAC_DIN、DAC_SCLK 三个控制信号,可将 FPGA 内部生成的数字波形数据送入 DAC 进行模拟波形输出。整体结构清晰,既包含 DDS 核心思想,也包含按键消抖、参数控制、波形选择和串行 DAC 驱动,适合作为 FPGA DDS 实验、课程设计或二次开发参考。运行环境
开发语言:Verilog 开发软件:Quartus 目标平台:Cyclone IV FPGA 开发板 主要外设接口:TLV5618 DAC 接口 顶层模块:DDS_top设计思路
系统采用典型 DDS 设计思路:先由频率控制模块产生 ROM 地址,再根据当前波形选择信号读取对应的波形查找表,最后将波形数据经过幅值控制后送入 DAC 驱动模块输出。波形查找表包括正弦波 ROM、方波 ROM 和三角波 ROM,地址宽度为 10 位,输出数据宽度为 8 位。 按键输入先经过 key_jitter 消抖处理,避免机械按键抖动对控制状态造成误触发。消抖后的按键脉冲分别送入波形选择、频率选择和幅值选择模块,使系统可以在运行过程中切换输出波形并调整输出参数。 频率控制部分通过 frequency 控制字影响地址累加速度,控制字越大,ROM 地址变化越快,输出波形频率越高。幅值控制部分使用 amplitude 与波形 ROM 输出数据相乘,形成 16 位波形数据,再送入 DAC_test 模块进行 TLV5618 串行时序输出。 顶层 DDS_top 将按键控制、ROM 查表、频率累加、波形选择、幅值调节和 DAC 输出连接在一起,模块边界明确,便于理解 DDS 的数据流和控制流,也方便替换 ROM 数据或扩展更多输出波形。模块结构
顶层模块:DDS_top,负责连接按键输入、波形 ROM、频率控制、幅值控制、波形选择和 DAC 输出接口。 主要子模块包括:key_jitter 按键消抖模块,w_sel 波形选择模块,fre_sel 频率控制字选择模块,ampl_sel 幅值控制模块,Frequency_ctrl 频率累加/地址生成模块,wave_sel 波形数据选择模块,sin_ROM 正弦波 ROM,fangbo_ROM 方波 ROM,sanjiao_ROM 三角波 ROM,DAC_test TLV5618 DAC 驱动模块。 系统数据流为:按键控制参数更新,Frequency_ctrl 生成 ROM 地址,三个 ROM 输出不同波形采样值,wave_sel 根据 wave_select 选择一路波形数据,幅值控制后送入 DAC_test,最终通过 DAC_CS_N、DAC_DIN、DAC_SCLK 输出到 TLV5618。开发板验证
工程包含 Cyclone IV FPGA 开发板对应的 Quartus 管脚约束文件,可用于实际开发板引脚分配和下载验证。顶层接口包含 50MHz 时钟输入、3 路按键输入以及 TLV5618 DAC 控制信号,约束和工程结构面向板级运行组织,适合在 Cyclone IV FPGA 开发板上进行 DDS 波形输出实验。仿真图/仿真说明/设计文档图片
配有仿真图文档图片,可用于查看设计相关的仿真波形展示。仿真说明部分可辅助理解 DDS 波形生成、波形选择以及输出控制逻辑。
部分代码
以下展示顶层模块 DDS_top 的部分代码,完整源码请下载压缩包查看。
module DDS_top(
input clk_50M,
input key1_in,//wave_select
input key2_in,//frequency
input key3_in,//amplitude
output DAC_CS_N, //TLV5618的CS_N接口
output DAC_DIN, //TLV5618的DIN接口
output DAC_SCLK //TLV5618的SCLK接口
);
wire [9:0] addra;
wire [7:0] douta_fangbo;
wire [7:0] douta_sanjiao;
wire [7:0] douta_sin;
wire [1:0] wave_select;//01输出sin,10输出方波,11输出三角波
wire [7:0] frequency;//频率控制字,控制输出波形频率,值越大,频率越大
wire [7:0] amplitude;//幅值控制,值越大,幅值越大
wire [15:0] wave;//输出波形
wire key1;//wave_select
wire key2;//frequency
wire key3;//amplitude
//按键消抖
key_jitter i1_key_jitter(
. clkin(clk_50M),
. key_in(key1_in),//输入
. key_negedge(key1)//消抖后按键下降沿
);
//按键消抖
key_jitter i2_key_jitter(
. clkin(clk_50M),
. key_in(key2_in),//输入
. key_negedge(key2)//消抖后按键下降沿
);
//按键消抖
key_jitter i3_key_jitter(
. clkin(clk_50M),
. key_in(key3_in),//输入
. key_negedge(key3)//消抖后按键下降沿
);
//波形选择
w_sel i_w_sel(
. clk(clk_50M),
. key(key1),
. wave_select(wave_select)//01输出sin,10输出方波,11输出三角波
);
//幅值控制
ampl_sel i_ampl_sel(
. clk(clk_50M),
. key(key2),
. amplitude(amplitude)//幅值控制,值越大,幅值越大
);
//频率控制
fre_sel i_fre_sel(
. clk(clk_50M),
. key(key3),
. frequency(frequency)///频率控制字,控制输出波形频率,值越大,频率越大
);
//方波ROM
fangbo_ROM i_fangbo_ROM (
.clock(clk_50M), // input wire clka
.address(addra), // input wire [9 : 0] addra
.q(douta_fangbo) // output wire [7 : 0] douta
);
//三角波ROM
sanjiao_ROM i_sanjiao_ROM (
.clock(clk_50M), // input wire clka
.address(addra), // input wire [9 : 0] addra
.q(douta_sanjiao) // output wire [7 : 0] douta
);
//sin波ROM
sin_ROM i_sin_ROM (
.clock(clk_50M), // input wire clka
.address(addra), // input wire [9 : 0] addra
.q(douta_sin) // output wire [7 : 0] douta
);
//频率累加器
Frequency_ctrl i_Frequency_ctrl(
. clk_50M(clk_50M),
. frequency(frequency),//频率控制字
. addra(addra)//输出地址
);
//波形选择控制
wire [7:0] wave_rom;
wave_sel i_wave_sel(
. clk_50M(clk_50M),
. wave_select(wave_select),//01输出sin,10输出方波,11输出三角波
. douta_fangbo(douta_fangbo),//方波
. douta_sanjiao(douta_sanjiao),//三角
. douta_sin(douta_sin), //正弦
. wave(wave_rom)//输出波形
);
assign wave=amplitude*wave_rom;
DAC_test i_DAC_test(
.Clk(clk_50M), //模块时钟50M
.Rst_n(key1_in), //模块复位
.DAC_DATA(wave),
.DAC_CS_N(DAC_CS_N), //TLV5618的CS_N接口
.DAC_DIN(DAC_DIN), //TLV5618的DIN接口
.DAC_SCLK(DAC_SCLK) //TLV5618的SCLK接口
);
endmodule
代码文件(付费下载)
📥
付费后此处显示完整工程压缩包下载链接。
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » DDS 信号发生器 FPGA 设计 Verilog Quartus
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » DDS 信号发生器 FPGA 设计 Verilog Quartus