名稱:DDS正弦波發(fā)生器通過模數(shù)轉換芯片DAC121輸出verilog代碼(代碼在文末下載)
軟件:VIVADO
語言:Verilog
代碼功能:
DDS正弦波發(fā)生器設計:
1、使用DDS方法設計正弦波發(fā)生器。
2、可以通過按鍵調(diào)整頻率和幅值。
3、波形通過數(shù)模轉換芯片DAC121輸出。
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
本代碼已在Basys3開發(fā)板驗證,開發(fā)板如下,其他開發(fā)板可以修改管腳適配:
演示視頻:
模數(shù)轉換芯片DAC121資料:
dac121s101.pdf
設計文檔:
1. 工程文件
2. 程序文件
3. 管腳分配
4. Testbench
5. 仿真圖
部分代碼展示:
module?DDS_sin( ????input?clk,//100M ????input?[4:0]?FM_swtich,//調(diào)頻按鍵 ????input?[2:0]?AM_switch,//調(diào)幅按鍵 ????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 //調(diào)用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;//調(diào)幅 //調(diào)用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
閱讀全文