vivadoIP核DDS使用及注意

vivadoIP核DDS使用及注意

vivado當前版本2018.3

vivado提供了DDS IP核可以輸出正餘弦波形,配置方法如下

打開VIVADO,選擇IP Catalog

在這裏插入圖片描述

輸入DDS,找到DDS IP核,雙擊打開

在這裏插入圖片描述

打開IP核配置,parameter Selection選擇System Parameters

設置System Parameters參數:

Spurious Free Dynamic Range的設置,這個參數與輸出數據的寬度相關。
在這裏插入圖片描述
我需要位寬爲10位的輸出,因此Spurious Free Dynamic Range設置爲10*6=60
Frequency Resolution的設置,這個參數與輸出相位數據的寬度相關,如果想要得到16bit的寬度,channels爲1,系統輸入時鐘爲100MHz
Frequency Resolution = 100000000/2^16 = 1525.8789025
設置如圖:在這裏插入圖片描述

設置Phase Increment Programmability和Phase offset programmability爲固定模式,輸出爲正弦波

在這裏插入圖片描述

設置輸出頻率10M

在這裏插入圖片描述

查看配置好的DDS參數

在這裏插入圖片描述

編寫代碼和TESTBENCH,進行仿真

頂層程序

`timescale 1ns / 1ps
module top(
    input clk_100m,
    input rst_n,
    ///////////DAC0/////////////
    output [9:0]DAC0_D,
    output DAC0_CLK,
    output DAC0_PD   
    );
    
wire [15:0]dac_data;
wire phase_tvalid;
wire [15:0]phase_data;
wire dds_valid;

dac dac_ini(
    .clk_100m(clk_100m),
    .dac_data(dac_data),
    .DAC0_D(DAC0_D),
    .DAC0_CLK(DAC0_CLK),
    .DAC0_PD(DAC0_PD)
);

dds_compiler_0 dds_compiler_0_ini(
    .aclk(clk_100m),
    .m_axis_data_tvalid(dds_valid),
    .m_axis_phase_tvalid(phase_tvalid),
    .m_axis_phase_tdata(phase_tdata),
    .m_axis_data_tdata(dac_data)
);
endmodule

testbench

`timescale 1ns / 1ps
module top_tb(

    );

reg clk_100m;
reg rst_n;
wire [9:0]DAC0_D;
wire DAC0_CLK;
wire DAC0_PD;

initial
begin
    clk_100m = 1'b0;
    rst_n = 1'b1;
    #10
    rst_n = 1'b0;
    #500
    rst_n = 1'b1;
end

always #5 clk_100m = ~clk_100m;

top top_ini(
    .clk_100m(clk_100m),
    .rst_n(rst_n),
    .DAC0_D(DAC0_D),
    .DAC0_CLK(DAC0_CLK),
    .DAC0_PD(DAC0_PD)
);
endmodule

仿真時注意DDSIP核輸出的是有符號數,因此需要將DDS輸出的數據設置成有符號數,即將仿真數據radix爲signed decimal

在這裏插入圖片描述

注意:因爲DDSIP核輸出的是有符號數,因此雖然我們設置的是10位的位寬,但輸出數據共有16位,因爲需要高位來作補碼。在使用時只用低10位即可。

發佈了14 篇原創文章 · 獲贊 12 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章