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