FPGA基于ACM2108的DDS设计

FPGA基于ACM2108的DDS设计

这次设计一个DDS信号发生器。该设计的特点有:

  • 双通道的DA输出,可以调节频率、相位、和波形(正弦波、方波、三角波)。
  • 拥有相位重置的功能,能够同时重置两个输出波形的相位。
    本次采用的是小梅哥的ACM2108模块。该模块有两个通道的ADC和两个通道的DAC。
    image
    本次设计的前置是DDS基本模块,具体可点击链接查看。DDS基本模块在加入了装有正弦波数据的ROM的基础上,再添加三角波和方波的数据的ROM,从而能够切换输出的波形。
    通过调用VIO这个IP核,设置输出信号的频率、相位和波形。
    然后通过LIA这个IP核,去观察数据波形。
    image

一、模块代码

`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即可设置为正常显示的波形。
image
image
以下是上板后的结果:
image
image
image
程序上板后,可以输出频率和相位可调的正弦波、方波、三角波。

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » FPGA基于ACM2108的DDS设计