DDS FSK 正弦波发生器 Verilog Quartus

名称:DDS FSK 正弦波发生器 Verilog Quartus

软件:Quartus

语言:Verilog

功能介绍

本工程实现了一个基于 DDS 的 FSK 调制正弦波发生器,使用 Verilog 编写并在 Quartus 工程环境下完成编译。设计通过输入 FSK_data 控制输出不同频率的 8 位正弦波,可用于学习 DDS 频率合成、相位累加器、ROM 查表输出以及 FSK 数字调制的基本实现方法。 顶层模块 DDS_top 接收 50MHz 时钟和 FSK 调制控制信号,输出 8 位 sin_wave 数字正弦波数据。系统内部根据 FSK_data 选择不同频率控制字,驱动频率控制模块产生 ROM 地址,再从正弦 ROM 中读取对应幅值,实现频率随调制信号切换的正弦波输出。 工程包含 Quartus 项目文件、Verilog 源码、正弦 ROM 初始化数据和 ModelSim 仿真相关文件,适合用于 FPGA 数字信号处理课程设计、DDS 原理实验、FSK 调制演示以及相关二次开发。

运行环境

开发软件:Quartus。 硬件描述语言:Verilog。 仿真环境:ModelSim 相关仿真文件已配置,包含 DDS_top_run_msim_rtl_verilog.do、仿真工作库文件和仿真转录记录。 工程对象:DDS_top.qpf / DDS_top.qsf Quartus 工程,包含可编译输出文件和 .sof 配置文件。

设计思路

本设计采用 DDS 直接数字频率合成思路实现 FSK 调制输出。系统以 50MHz 时钟作为基准,通过频率控制字 FTW 控制相位累加器的地址步进速度,再由正弦 ROM 按地址读取 8 位幅值数据输出,从而得到对应频率的数字正弦波。 FSK_data 作为调制控制信号,用于在两组频率控制字之间切换。当 FSK_data 为高电平时,FTW 取 1000;当 FSK_data 为低电平时,FTW 取 500。根据代码中的计算关系 f=50M*FTW/2^16,两种控制字分别对应约 762939Hz 和 381469Hz 的正弦输出,实现二频移键控的基本调制效果。 正弦波数据由 8 位、65536 深度的 ROM 查表产生,相位累加器输出 16 位 ROM 地址。这样的结构便于理解 DDS 的核心工作流程,也方便后续扩展为更多频点、可配置频率控制字或其他调制方式。

模块结构

工程主要由 DDS_top、Frequency_ctrl 和 sin_ROM 等模块组成。 DDS_top:顶层模块,连接时钟、FSK_data 调制输入、频率控制字选择、相位累加器和正弦 ROM 输出。 Frequency_ctrl:频率控制/相位累加器模块,根据输入频率控制字产生 16 位 ROM 地址,控制正弦表读取速度。 sin_ROM:正弦查找表 ROM,使用 sin_8x65536.mif 初始化数据,按地址输出 8 位正弦波幅值。 辅助生成模块包括 sin_ROM_decode、sin_ROM_mux、sin_ROM_altsyncram 等,与 Quartus ROM 存储结构相关。

演示视频

配套演示视频展示了 DDS FSK 正弦波输出效果,可用于直观查看工程运行现象和输出波形变化过程。

仿真图/仿真说明/设计文档图片

设计文档内容覆盖工程文件、程序文件、ROM、程序编译、RTL 图、Testbench、仿真图、整体仿真图、频率累加器模块仿真图和 DDS 模块仿真图。仿真部分可用于查看顶层 DDS 输出、频率累加器地址变化以及不同 FSK_data 控制下的输出频率切换过程。

DDS FSK 正弦波发生器 Verilog Quartus 设计文档图片 image13.png

DDS FSK 正弦波发生器 Verilog Quartus 设计文档图片 image12.png

DDS FSK 正弦波发生器 Verilog Quartus 设计文档图片 image11.png

DDS FSK 正弦波发生器 Verilog Quartus 设计文档图片 image1.png

DDS FSK 正弦波发生器 Verilog Quartus 设计文档图片 image2.png

DDS FSK 正弦波发生器 Verilog Quartus 设计文档图片 image3.png

DDS FSK 正弦波发生器 Verilog Quartus 设计文档图片 image5.png

DDS FSK 正弦波发生器 Verilog Quartus 设计文档图片 image6.png

DDS FSK 正弦波发生器 Verilog Quartus 设计文档图片 image7.png

DDS FSK 正弦波发生器 Verilog Quartus 设计文档图片 image8.png

DDS FSK 正弦波发生器 Verilog Quartus 设计文档图片 image10.png

DDS FSK 正弦波发生器 Verilog Quartus 设计文档图片 image9.png

DDS FSK 正弦波发生器 Verilog Quartus 设计文档图片 image4.png

部分代码

以下展示顶层模块 DDS_top 的部分代码,完整源码请下载压缩包查看。

module DDS_top(
    input clk_50M,//时钟频率50MHz
	 input FSK_data,//FSK调制信号,控制输出不同频率的正弦波
    output [7:0] sin_wave//输出sin波形
    );
	 
//波形 ROM 地址位数 n=16
wire [15:0] addra;
wire [15:0] FTW;//频率控制字,值越大,输出频率越大
assign FTW=(FSK_data==1)?16'd1000:16'd500;//1000对应762939Hz,500对应381469Hz;

//对应输出频率f=50M*FTW/2^16

//sin波ROM
sin_ROM i_sin_ROM (
  .clock(clk_50M),    // input wire clka
  .address(addra),  // input wire [15 : 0] addra
  .q(sin_wave)  // output wire [7 : 0] douta
);

//相位累加器
Frequency_ctrl i_Frequency_ctrl(
. clk_50M(clk_50M),
. frequency(FTW),//频率控制字,值越大,输出频率越大
. addra(addra)//输出地址
    );

	 
	 
endmodule

代码文件(付费下载)

📥 付费后此处显示完整工程压缩包下载链接。
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » DDS FSK 正弦波发生器 Verilog Quartus

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

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