DDS 波形发生器 Verilog Quartus
名称:DDS 波形发生器 Verilog Quartus
软件:Quartus
语言:Verilog
开发板/平台:Cyclone IV FPGA开发板
功能介绍
本设计实现一个基于 FPGA 的 DDS 波形发生器,可生成正弦波、方波和三角波,并通过 DA 接口输出 8 位波形数据及采样时钟。用户可通过板上按键切换波形、调整频率档位,并调节方波占空比。 工程同时提供 800×480 RGB LCD 显示控制,将波形类型、频率和占空比等运行参数呈现在屏幕上。按键输入经过滤波处理后送入波形控制逻辑,显示内容与波形发生参数联动,便于在硬件运行时查看当前设置。运行环境
硬件描述语言:Verilog。开发软件:Quartus。工程面向 Cyclone IV FPGA 开发板,包含管脚分配与时序约束文件。设计思路
设计以 DDS 相位累加为核心,通过按键输入调整波形类型、输出频率档位和方波占空比。按键滤波模块将机械按键输入转换为稳定的单次脉冲,波形控制模块据此更新选择状态与相位步进参数;波形发生模块结合相位步进和查找表生成正弦波数据,同时支持方波、三角波输出,并将数字采样值送至 DA 数据接口。 显示部分将当前波形、频率档位及占空比等状态整理为 LCD 文本,并由 RGB LCD 时序模块输出屏幕控制信号和像素数据。顶层模块负责连接按键处理、波形控制、DDS 数据生成与液晶显示各部分,使操作状态和输出信号由同一套参数驱动。工程还包含仿真测试平台,可用于观察顶层及波形控制、波形生成等模块的行为。模块结构
顶层模块为 `dds_ktz_top`,负责连接按键、波形控制、DDS 输出、LED 状态及 LCD 接口。`key_filter` 完成按键滤波;`wave_ctrl` 管理波形选择、频率档位、占空比和相位步进;`wave_gen` 生成波形采样数据,`sine_lut` 提供正弦波查找表。显示链路由 `display_formatter`、`lcd_text_display` 和 `rgb_lcd_800x480` 组成,分别负责状态文本整理、字符绘制和 LCD 时序输出。开发板验证
工程提供了 Cyclone IV FPGA 开发板的管脚分配,并配有开发板与上板照片,可用于参考 DDS 信号输出及 LCD 显示的硬件连接和验证。

演示视频
演示视频展示了 DDS 波形发生器的运行效果及开发板操作过程。仿真图/仿真说明/设计文档图片
工程文档包含 RTL 结构、管脚分配、程序编译及仿真相关内容,并提供整体仿真、波形产生模块和波形控制模块的仿真图。








部分代码
以下展示顶层模块 dds_ktz_top 的部分代码,完整源码请下载压缩包查看。
module dds_ktz_top #(
parameter integer KEY_CNT_MAX = 20'd999_999
)(
input wire sys_clk,
input wire sys_rst_n,
input wire [3:0] key,
input wire touch_key,
output wire [3:0] led,
output wire da_clk,
output wire [7:0] da_data,
output wire lcd_de,
output wire lcd_hs,
output wire lcd_vs,
output wire lcd_clk,
output wire lcd_bl,
output wire lcd_rst,
output wire [15:0] lcd_rgb
);
localparam [1:0] WAVE_SIN = 2'd0;
localparam [1:0] WAVE_SQR = 2'd1;
localparam [1:0] WAVE_TRI = 2'd2;
wire key_wave_pulse;
wire key_freq_up_pulse;
wire key_freq_down_pulse;
wire key_duty_up_pulse;
wire key_duty_down_pulse;
wire [1:0] wave_sel;
wire [3:0] freq_index;
wire [6:0] duty_percent;
wire [23:0] phase_step;
wire [31:0] freq_hz_unused;
wire [127:0] line1;
wire [127:0] line2;
wire [127:0] line3;
reg [25:0] led_cnt;
reg [3:0] led_r;
key_filter #(
.CNT_MAX(KEY_CNT_MAX)
) u_key_wave (
.clk (sys_clk),
.rst_n (sys_rst_n),
.key_n (key[0]),
.key_pulse(key_wave_pulse),
.key_state()
);
key_filter #(
.CNT_MAX(KEY_CNT_MAX)
) u_key_freq_up (
.clk (sys_clk),
.rst_n (sys_rst_n),
.key_n (key[1]),
.key_pulse(key_freq_up_pulse),
.key_state()
);
key_filter #(
.CNT_MAX(KEY_CNT_MAX)
) u_key_freq_down (
.clk (sys_clk),
.rst_n (sys_rst_n),
.key_n (key[2]),
.key_pulse(key_freq_down_pulse),
.key_state()
);
key_filter #(
.CNT_MAX(KEY_CNT_MAX)
) u_key_duty_up (
.clk (sys_clk),
.rst_n (sys_rst_n),
.key_n (key[3]),
.key_pulse(key_duty_up_pulse),
.key_state()
);
key_filter #(
.CNT_MAX(KEY_CNT_MAX)
) u_touch_key_duty_down (
.clk (sys_clk),
.rst_n (sys_rst_n),
.key_n (touch_key),
.key_pulse(key_duty_down_pulse),
.key_state()
);
wave_ctrl u_wave_ctrl(
.clk (sys_clk),
.rst_n (sys_rst_n),
.key_wave_pulse (key_wave_pulse),
.key_freq_up_pulse (key_freq_up_pulse),
.key_freq_down_pulse(key_freq_down_pulse),
.key_duty_up_pulse (key_duty_up_pulse),
.key_duty_down_pulse(key_duty_down_pulse),
.wave_sel (wave_sel),
.freq_index (freq_index),
.duty_percent (duty_percent),
.phase_step (phase_step),
.freq_hz (freq_hz_unused)
);
wave_gen u_wave_gen(
.clk (sys_clk),
.rst_n (sys_rst_n),
.wave_sel (wave_sel),
.phase_step (phase_step),
.duty_percent(duty_percent),
.da_clk (da_clk),
.da_data (da_data)
);
display_formatter u_display_formatter(
.wave_sel (wave_sel),
.freq_index (freq_index),
.duty_percent(duty_percent),
// ... 以下代码略,完整源码请下载压缩包查看
代码文件(付费下载)
📥
付费后此处显示完整工程压缩包下载链接。
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » DDS 波形发生器 Verilog Quartus
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » DDS 波形发生器 Verilog Quartus