名称:DDS正弦波发生器通过模数转换芯片DAC121输出verilog代码(代码在文末下载)
软件:VIVADO
语言:Verilog
代码功能:
DDS正弦波发生器设计:
1、使用DDS方法设计正弦波发生器。
2、可以通过按键调整频率和幅值。
3、波形通过数模转换芯片DAC121输出。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在Basys3开发板验证,开发板如下,其他开发板可以修改管脚适配:
演示视频:
模数转换芯片DAC121资料:
dac121s101.pdf
设计文档:
1. 工程文件
2. 程序文件
3. 管脚分配
4. Testbench
5. 仿真图
部分代码展示:
module?DDS_sin(
????input?clk,//100M
????input?[4:0]?FM_swtich,//调频按键
????input?[2:0]?AM_switch,//调幅按键
????output?DA_SCLK,//10M
????output?DA_SYNC_n,
????output?DA_DIN
????);
reg?[7:0]?frequency_ctrl=8'd0;
reg?[2:0]?range_ctrl=8'd0;
always@(posedge?clk)
begin
????frequency_ctrl<={3'd0,FM_swtich};//频率控制字
????range_ctrl<=AM_switch;//幅度控制
end
wire?m_axis_data_tvalid;
wire?[15:0]?m_axis_data_tdata;
wire?[9:0]?sin_wave;
assign?sin_wave=m_axis_data_tdata[9:0]?+?10'd512;//DDS输出正弦波
//分频到1MHz
reg?[15:0]?div_cnt=16'd0;
reg?clk_1MHz=0;
always@(posedge?clk)
????if(div_cnt>=16'd100)begin
????????div_cnt<=16'd0;
????????clk_1MHz<=~clk_1MHz;
????????end
????else?begin
????????div_cnt<=div_cnt+16'd1;
????????clk_1MHz<=clk_1MHz;
????????end
//调用DDS?IP核
dds_10bit?i_dds_10bit?(
??.aclk(clk_1MHz),????????????????????????????????//?input?wire?aclk
??.s_axis_phase_tvalid(1'b1),??//?input?wire?s_axis_phase_tvalid
??.s_axis_phase_tdata(frequency_ctrl),????//?input?wire?[7?:?0]?s_axis_phase_tdata
??.m_axis_data_tvalid(m_axis_data_tvalid),????//?output?wire?m_axis_data_tvalid
??.m_axis_data_tdata(m_axis_data_tdata)??????//?output?wire?[15?:?0]?m_axis_data_tdata
);
wire?[11:0]?wave_DA;
assign?wave_DA=sin_wave[9:1]?*?range_ctrl;//调幅
//调用DA控制模块
dac121?i_dac121(
.?i_C100MHz(clk),
.?i_Reset(1'b0),
.?data_in(wave_DA),
.?DA_SCLK(DA_SCLK),//10M
.?DA_SYNC_n(DA_SYNC_n),
.?DA_DIN(DA_DIN)
????);
endmodule
阅读全文
1101