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 频率控制字、相位控制字、幅度控制字相关仿真图。可结合这些图示了解模块连接与控制信号关系。

FPGA DDS 信号发生器 Verilog Quartus 设计文档图片 image1.png

FPGA DDS 信号发生器 Verilog Quartus 设计文档图片 image10.png

FPGA DDS 信号发生器 Verilog Quartus 设计文档图片 image2.png

FPGA DDS 信号发生器 Verilog Quartus 设计文档图片 image3.png

FPGA DDS 信号发生器 Verilog Quartus 设计文档图片 image4.png

FPGA DDS 信号发生器 Verilog Quartus 设计文档图片 image5.png

FPGA DDS 信号发生器 Verilog Quartus 设计文档图片 image6.png

FPGA DDS 信号发生器 Verilog Quartus 设计文档图片 image7.png

FPGA DDS 信号发生器 Verilog Quartus 设计文档图片 image8.png

FPGA DDS 信号发生器 Verilog Quartus 设计文档图片 image9.png

部分代码

以下展示顶层模块 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

注册为本站会员,充值100得150,详情咨询客服

目前为止共有 *** 位优秀的会员加入! 立刻加入会员