這次設計一個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即可設定為正常顯示的波形,


以下是上板后的結果:



程式上板后,可以輸出頻率和相位可調的正弦波、方波、三角波,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/544337.html
標籤:其他
下一篇:排列組合
