FPGA基于ACM2108的DDS设计
2023-04-18 15:20:26 时间
这次设计一个DDS信号发生器。该设计的特点有:
- 双通道的DA输出,可以调节幅度(通过旋转板子上的电位器)、频率、相位、和波形(正弦波、方波、三角波)。
- 拥有相位重置的功能,能够同时重置两个输出波形的相位。
本次采用的是小梅哥的ACM2108模块。该模块有两个通道的ADC和两个通道的DAC。
本次设计的前置是DDS基本模块,具体可点击链接查看。DDS基本模块在加入了装有正弦波数据的ROM的基础上,再添加三角波和方波的数据的ROM,从而能够切换输出的波形。
通过调用VIO这个IP核,设置输出信号的频率、相位和波形。
然后通过LIA这个IP核,去观察数据波形。
一、模块代码
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: GDUT
// Engineer: Lclone
//
// Create Date: 2023/02/02 22:34:21
// Design Name: DDS_ACM2108
// Module Name: DDS_ACM2108
// Project Name: DDS_ACM2108
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module DDS_ACM2108(
input Clk,
input Rst_n,
output DA_Clk_ch1,
output [7:0] DA_data_ch1,
output DA_Clk_ch2,
output [7:0] DA_data_ch2,
output AD_Clk_ch1,
input [7:0] AD_data_ch1,
output AD_Clk_ch2,
input [7:0] AD_data_ch2
);
wire Clk_125M;
wire [31:0] Fword_ch1;
wire [11:0] Pword_ch1;
wire [ 1:0] mode_sel_ch1;
wire [31:0] Fword_ch2;
wire [11:0] Pword_ch2;
wire [ 1:0] mode_sel_ch2;
reg [7:0] AD_data_ch1_reg;
reg [7:0] AD_data_ch2_reg;
wire Wave_rst_p;
always@(posedge Clk)begin
AD_data_ch1_reg <= AD_data_ch1;
AD_data_ch2_reg <= AD_data_ch2;
end
ila_0 ila_0_DA (
.clk(Clk_125M), // input wire clk
.probe0(DA_data_ch1), // input wire [7:0] probe0
.probe1(DA_data_ch2) // input wire [7:0] probe1
);
ila_1 ila_1_AD_ch1 (
.clk(Clk), // input wire clk
.probe0(AD_data_ch1) // input wire [7:0] probe0
);
ila_1 ila_1_AD_ch2 (
.clk(Clk), // input wire clk
.probe0(AD_data_ch2) // input wire [7:0] probe0
);
clk_wiz_0 clk_wiz_0_inst (
// Clock out ports
.clk_out1(Clk_125M), // output clk_out1
// Clock in ports
.clk_in1(Clk)); // input clk_in1
DDS_Cmd_VIO DDS_Cmd_VIO_inst (
.clk(Clk_125M), // input wire clk
.probe_out0(Fword_ch1), // output wire [31 : 0] probe_out0
.probe_out1(Pword_ch1), // output wire [11 : 0] probe_out1
.probe_out2(mode_sel_ch1), // output wire [1 : 0] probe_out2
.probe_out3(Fword_ch2), // output wire [31 : 0] probe_out3
.probe_out4(Pword_ch2), // output wire [11 : 0] probe_out4
.probe_out5(mode_sel_ch2), // output wire [1 : 0] probe_out5
.probe_out6(Wave_rst_p) // output wire [1 : 0] probe_out5
);
DDS_Base DDS_Base_ch1(
.Clk (Clk_125M),
.Rst_n (Rst_n & ~Wave_rst_p),
.Fword (Fword_ch1),
.Pword (Pword_ch1),
.mode_sel (mode_sel_ch1),
.DA_Clk (DA_Clk_ch1),
.Signal_data (DA_data_ch1)
);
DDS_Base DDS_Base_ch2(
.Clk (Clk_125M),
.Rst_n (Rst_n & ~Wave_rst_p),
.Fword (Fword_ch2),
.Pword (Pword_ch2),
.mode_sel (mode_sel_ch2),
.DA_Clk (DA_Clk_ch2),
.Signal_data (DA_data_ch2)
);
assign AD_Clk_ch1 = Clk;
assign AD_Clk_ch2 = Clk;
endmodule
二、上板结果
我将ACM2108的ad接口与da接口进行连接,然后通过ila观察AD和DA的波形来观察设计是否成功。
在观察方波信号的时候,vivado可能会帮我们的波形做处理,导致我们观察的方波变成三角波,这里我们在Analog Settings里将Interpolation style改为Hold即可设置为正常显示的波形。
以下是上板后的结果:
程序上板后,可以输出频率和相位可调的正弦波、方波、三角波。
相关文章
- 谷歌光纤:明年初推出5 Gbps和8 Gbps服务
- 如何采用云优先策略
- 2023年数据标记的影响:当前趋势和未来需求
- 准备好:5G 即将到来
- 企业将业务迁移到云平台时面临的七个常见挑战
- 盛业:为“工程项目”装上数智大脑
- 如何解决混合精度训练大模型的局限性问题
- 微软全球超100项智能云创新 多项云服务落户中国新数据中心
- 2022亚马逊云科技中国峰会召开 宣布多项举措赋能客户数字化探索与创新
- 微软拥抱ChatGPT后,我亲自试了试新必应的个性搜索
- 聊聊HTTP状态码完整指南,你学会了吗?
- 五分钟带您了解DSL、以太网线缆和光纤之间的区别,值得收藏!
- 混合云:改善客户体验的五种方式
- ChatGPT爆火出圈带来的AI网络安全的思考
- 语音识别如何重新定义病人护理?
- 谷歌对云计算技术的十大预测
- ChatGPT热潮下的冷思考:2025年AI能耗或超人类,AI计算需要提质增效
- 保护家庭网络三部曲
- Meta发布七大社交媒体趋势:生成式AI、AR/VR营销等入选
- 如何选择顶级托管云服务提供商