FPGA DDS 信号发生器 Verilog Quartus
名称:FPGA DDS 信号发生器 Verilog Quartus
软件:Quartus
语言:Verilog
开发板/平台:Cyclone IV FPGA开发板
功能介绍
本工程实现基于 FPGA 的 DDS 信号发生器,采用 Verilog 与 Quartus 工程组织方式,面向 Cyclone IV FPGA 开发环境。设计通过 ROM 查表产生波形采样数据,并提供 DAC 数据及时钟接口;顶层还包含 ADC 数据采集和数码管显示连接,可用于搭建信号输出与输入观测的实验平台。 工程结构涵盖 DDS 主体、波形 ROM、按键消抖、参数控制、显示格式化及 LCD1602 驱动等功能模块,适合参考 FPGA 波形发生器的模块划分、顶层接口连接和外设显示实现。随附的工程文件与管脚分配设置便于在 Quartus 中查看和配置项目。运行环境
硬件平台:Cyclone IV FPGA 开发板及高速 AD/DA 接口模块。开发软件:Quartus。设计语言:Verilog。设计思路
设计以 FPGA 为核心,通过数字查表方式生成周期波形,并将采样数据送往 DAC 输出。顶层 adda_test 使用 ROM 地址作为波形采样索引,在时钟边沿更新地址并将 ROM 数据连接到 DAC 数据端;DAC 时钟直接由系统时钟提供,形成连续的数字波形输出链路。 顶层同时采集 ADC 的 8 位输入数据,在复位释放后锁存到内部寄存器,并将数据拆分为十进制各位,交由数码管模块显示。工程还包含 DDS、波形 ROM、按键消抖、参数控制、显示格式化和 LCD 驱动等模块,可用于组织波形数据生成与人机交互相关逻辑。模块结构
工程顶层为 adda_test,连接波形 ROM、数码管显示模块,并处理 ADC 输入数据及 DAC 输出接口。DDS 相关模块包括 dds_top、dds、wave_rom,以及正弦、三角和方波 ROM;交互显示部分包括按键消抖、DDS 参数控制、显示格式化、LCD1602 顶层与驱动模块。开发板验证
工程提供了 Cyclone IV FPGA 开发板的管脚分配文件,可用于对应引脚配置与硬件验证。顶层设计连接 DAC 数据与时钟输出、ADC 数据与时钟输入,并包含数码管显示接口。演示视频
演示视频展示 DDS 信号发生器的运行过程,可结合 FPGA 输出及外接转换模块观察信号生成效果。仿真图/仿真说明/设计文档图片
提供的设计文档图片涵盖工程文件、程序编译、RTL 图、管脚分配、Testbench,以及顶层波形输出控制和 DDS 频率控制字、相位控制字、幅度控制字相关仿真图。可结合这些图示了解模块连接与控制信号关系。









部分代码
以下展示顶层模块 adda_test 的部分代码,完整源码请下载压缩包查看。
module adda_test(
input clk, //fpga clock
input rst_n,
output daclk,
output [7:0] dadata, //DA data
output adclk,
input [7:0] addata, //AD data
output ad_test,
output [5:0] sm_bit ,//数码管位选输出引脚
output [7:0] sm_seg //数码管段选输出引脚
);
reg [31:0] cnt=0;
reg [8:0] rom_addr;
reg [7:0] ad_data=0;
wire [7:0] rom_data;
wire [3:0] ge;
wire [3:0] shi;
wire [3:0] bai;
wire [3:0] qian;
wire [3:0] wan;
wire [3:0] swan;
reg [7:0] ttl_data=0;
reg ad_clk=0;
reg [15:0] ad_clk_div_cnt=0;
assign swan =ad_data/100000%10;
assign wan =ad_data/10000%10;
assign qian =ad_data/1000%10;
assign bai =ad_data/100%10;
assign shi =ad_data/10%10;
assign ge =ad_data%10;
assign dadata=rom_data; //DA output the data from ROM
assign daclk=clk;
assign adclk=clk;//ad_clk;
assign ad_test=ad_data[0]&ad_data[1]&ad_data[2]&ad_data[3]&ad_data[4]&ad_data[5]&ad_data[6]&ad_data[7];
always @(negedge clk)begin
if(ad_clk_div_cnt==16'hffff)
ad_clk_div_cnt<=0;
else
ad_clk_div_cnt<=ad_clk_div_cnt+1;
end
always @(negedge clk)begin
if(ad_clk_div_cnt==0)
ad_clk<=~ad_clk;
else
;
end
//DA output sin waveform
always @(negedge clk)begin
if(cnt==1)
cnt<=0;
else
cnt<=cnt+1;
end
always @(negedge clk)
begin
if(cnt==0)
rom_addr <= rom_addr + 1'b1 ;
else;
end
always @(posedge clk or negedge rst_n)begin
if(!rst_n)
ad_data<=0;
else //if(ad_data<addata)
ad_data <= addata ;
//else;
end
rom rom_inst (
.clock(clk), // input clka
.address(rom_addr), // input [8 : 0] addra
.q(rom_data) // output [7 : 0] douta
);
//数码管显示模块
smg Usmg(
.clk (clk ),
.rst_n (rst_n ),
.swan (swan ),
.wan (wan ),
.qian (qian ),
.bai (bai ),
.shi (shi ),
.ge (ge ),
.sm_bit (sm_bit ),
.sm_seg (sm_seg )
);
endmodule
代码文件(付费下载)
📥
付费后此处显示完整工程压缩包下载链接。
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » FPGA DDS 信号发生器 Verilog Quartus
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » FPGA DDS 信号发生器 Verilog Quartus