名称:AM 调制信号 DDS 生成 FPGA 设计 Verilog Vivado VHDL
软件:Vivado
语言:VHDL
功能介绍
本设计实现 AM 调制相关的 FPGA 波形生成结构,工程以 Vivado 为开发环境,核心用户逻辑模块为 am_mod。设计通过调用 Xilinx DDS Compiler IP 产生数字波形数据,并预留调制数据输出端口 am_mod_data,适合用于数字调制、DDS 波形发生器以及 FPGA 信号处理入门实验。
AM 调制的基本思路是利用载波信号与包络信号形成调幅输出。本工程中可以看到 cos_envelope 与 cos_signal 等内部信号定义,并通过 dds_compiler_0 例化获取 DDS 输出数据和相位数据,为后续完成载波、包络和调制输出组合提供基础框架。
该工程更适合作为 Vivado 下 DDS Compiler IP 调用、AM 调制结构搭建和 Verilog 顶层封装的参考。用户可以在现有模块基础上继续补充调制运算、数据位宽处理、复位控制和外设输出接口。
运行环境
开发语言:Verilog
开发软件:Vivado
工程类型:Vivado FPGA 工程,包含 DDS Compiler IP 及相关综合、仿真脚本文件。
设计思路
设计以 am_mod 作为用户逻辑入口,输入包括 100 MHz 时钟 clk_100m 和低有效复位 resetn,输出为 signed [15:0] 类型的 am_mod_data。模块内部围绕 DDS 波形生成器建立信号通路,先通过 DDS Compiler IP 生成数字正弦相关数据,再将 DDS 输出作为 AM 调制算法的基础信号来源。
DDS Compiler IP 负责完成相位累加、查表或内部数值运算等波形产生功能,并输出 m_axis_data_tdata 与 m_axis_phase_tdata 等 AXI-Stream 风格信号。这样的结构可以减少手写正弦查表和相位累加逻辑的工作量,使设计重点集中在调制数据组织和后级处理上。
从模块命名和信号定义看,设计预留了 cos_envelope 与 cos_signal 两类信号,分别对应包络或调制分量以及载波相关信号。后续 AM 调制通常可围绕这两路信号进行乘法、偏置或缩放处理,最终形成 16 位有符号调制输出,便于接入 DAC、后级滤波或仿真观察。
模块结构
主要模块:
am_mod:AM 调制顶层用户模块,提供 clk_100m、resetn 输入和 am_mod_data 输出,并例化 DDS Compiler IP。
dds_compiler_0:Vivado DDS Compiler IP,用于产生 DDS 波形数据和相位数据,提供 m_axis_data_tvalid、m_axis_data_tdata、m_axis_phase_tvalid、m_axis_phase_tdata 等输出信号。
工程还包含 DDS Compiler 相关的 VHDL IP 支撑文件、综合文件、仿真脚本与 cmodel 文件,用于 Vivado 工程综合和 IP 级仿真参考。
仿真图/仿真说明/设计文档图片
工程包含 Vivado 生成的 DDS Compiler IP 仿真脚本,覆盖 xsim、ModelSim、Questa、VCS、IES 等仿真环境,可用于对 dds_compiler_0 IP 进行仿真编译和波形观察。工程中还包含 DDS Compiler 的 bit-accurate cmodel 压缩包,可作为 DDS IP 行为参考。
部分代码
以下展示顶层模块 am_mod 的部分代码,完整源码请下载压缩包查看。
module am_mod(
input clk_100m,
input resetn,
output signed [15:0]am_mod_data
);
wire [7:0] cos_envelope;
wire signed [7:0] cos_signal;
dds_compiler_0 wave_gen (
.aclk(aclk), // input wire aclk
.m_axis_data_tvalid(m_axis_data_tvalid), // output wire m_axis_data_tvalid
.m_axis_data_tdata(m_axis_data_tdata), // output wire [7 : 0] m_axis_data_tdata
.m_axis_phase_tvalid(m_axis_phase_tvalid), // output wire m_axis_phase_tvalid
.m_axis_phase_tdata(m_axis_phase_tdata) // output wire [31 : 0] m_axis_phase_tdata
);
endmodule
代码获取:点击来源:www.hdlcode.com
72