赞
踩
后续做
1、每路输出的固定波形允许选择正弦波、三角波、方波
输出波形频率调节范围1-1MHz
输出波形幅值调节范围0 - 10V
相位可调
固定波形扫频输出,允许输入扫频起始频率和截至频率
2、任意波形输出,后续做
module top_dds_1
(
//differential system clocks
input wire sys_clk , // Differential input clock 50Mhz
input wire sys_rst_n ,
//外部输入所需相位
input wire [11:0] p_word ,
//外部输入所需频率
input wire [31:0] freq_data ,
input wire freq_data_valid ,
//外部输入所需幅值
input wire [13:0] amplitude_data ,
input wire amplitude_data_vliad ,
//AD9767控制字
output wire da1_clk , //AD9767 CH1 clock
output wire da1_wrt , //AD9767 CH1 enable
output wire [13:0] da1_data , //AD9767 CH1 data output
output wire da2_clk , //AD9767 CH2 clock
output wire da2_wrt , //AD9767 CH2 enable
output wire [13:0] da2_data //AD9767 CH2 data output
);
例化时钟模块,使用PLL IP核,输入50M系统时钟,输出50M和125M时钟,这里需要注意的是,系统时钟不能同时作为子模块的输入和PLL时钟IP的输入,所以需要再输出一路50M时钟供各模块使用。
AD9767_CLK AD9767_CLK_inst(
.clk_out1(clk_125M), // output 125M
.clk_out2(clk_50M), // output 50M
// Status and control signals
.reset(1'b0), // input reset
.locked(), // output locked
.clk_in1(sys_clk) // input 50M
);
例化频率控制字模块,输入所需频率,输出频率控制字,原理是利用公式和除法器计算出存储器地址步进来控制频率
F_word_set inst_F_word_set(
.clk (clk_50M),
.rst_n (sys_rst_n),
.freq_data (freq_data),
.freq_data_valid (freq_data_valid),
.f_word (f_word),
.f_word_valid (f_word_valid)
);
例化幅值控制字,输入所需幅值,输出幅值控制字,原理是利用除法器按比例压缩输出的数据
amplitude_set amplitude_set_inst (
.clk (clk_50M),
.rst_n (sys_rst_n),
.amplitude_data (amplitude_data), //输入为14位的mV电压值
.amplitude_data_vliad (amplitude_adc_data_valid),
.amplitude_adc_data (amplitude_adc_data),
.amplitude_adc_data_valid (amplitude_adc_data_valid)
);
例化DDS模块,输入频率控制字,相位控制字,整合出需要的波形
DDS DDS_inst(
.DDS_clk (clk_125M),
.sys_rst_n (sys_rst_n),
.f_word (f_word[31:0]),
.p_word ('d0),
.amplitude_adc_data (amplitude_adc_data),
.amplitude_adc_data_valid (amplitude_adc_data_valid),
.da1_clk (da1_clk),
.da1_wrt (da1_wrt),
.da1_data (da1_data),
.da2_clk (da2_clk),
.da2_wrt (da2_wrt),
.da2_data (da2_data)
);
Q1:增加幅值控制字后出现问题
初步判断是定点数量化位宽不够
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。