DDS波形发生器Verilog QuartusII正点原子开发板
概要信息
代码功能
代码实现思路
上板演示
本代码已在开发板验证
代码结构(各模块一句话说明)
设计注意点与建议
关键源文件
`timescale 1ns/1ns
module dds
(
input wire sys_clk ,//系统时钟,50MHz
input wire sys_rst_n ,//复位信号,低电平有效
input wire [1:0] wave_select ,//输出波形选择,通过之前的key_trl选好了波形
input wire [31:0] FREQ_CTRL,//频率选择,通过之前的f_word_set选好频率了
output reg sin_wave_lab,
output reg squ_wave_lab,
output reg tri_wave_lab,
output reg saw_wave_lab,
output wire dac_clk,//输入DAC模块时钟
output wire [7:0] data_out //波形输出
);
//********************************************************************//
//****************** Parameter and Internal Signal *******************//
//********************************************************************//
//parameter define
parameter sin_wave =2'b11 ,//正弦波
squ_wave =2'b10 ,//方波
tri_wave =2'b01 ,//三角波
saw_wave =2'b00 ;//锯齿波
//FREQ_CTRL=32'd42949,//相位累加器单次累加值500HZ
parameter PHASE_CTRL =12'd1024 ;//相位偏移量
//reg define
reg [31:0] fre_add ;//相位累加器
reg [11:0] rom_addr_reg;//相位调制后的相位码
reg [13:0] rom_addr ;//ROM读地址
assign dac_clk=~sys_clk;
//reg sin_wave_lab=1'b1;
//reg squ_wave_lab=1'b1;
//reg tri_wave_lab=1'b1;
//reg saw_wave_lab=1'b1;
//********************************************************************//
//***************************** Main Code ****************************//
//********************************************************************//
//fre_add:相位累加器
always@(posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n==1'b0)
fre_add<=32'd0;
else
fre_add<=fre_add + FREQ_CTRL;//频率选择,通过之前的f_word_set选好频率了
//rom_addr:ROM读地址
always@(posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n==1'b0)
begin
rom_addr <=14'd0;
rom_addr_reg <=11'd0;
end
else
case(wave_select)
sin_wave://正弦波
begin
squ_wave_lab <=1'b0;
tri_wave_lab <=1'b0;
saw_wave_lab <=1'b0;
rom_addr_reg <= fre_add[31:20]+ PHASE_CTRL;//相位偏移量PHASE_CTRL
rom_addr <= rom_addr_reg;
sin_wave_lab <=1'b1;
end
squ_wave://方波
begin
sin_wave_lab <=1'b0;
tri_wave_lab <=1'b0;
saw_wave_lab <=1'b0;
rom_addr_reg <= fre_add[31:20]+ PHASE_CTRL;
rom_addr <= rom_addr_reg +14'd4096;
squ_wave_lab <=1'b1;
end
tri_wave://三角波
begin
sin_wave_lab <=1'b0;
squ_wave_lab <=1'b0;
saw_wave_lab <=1'b0;
rom_addr_reg <= fre_add[31:20]+ PHASE_CTRL;
rom_addr <= rom_addr_reg +14'd8192;
tri_wave_lab <=1'b1;
end
saw_wave://锯齿波
begin
sin_wave_lab <=1'b0;
squ_wave_lab <=1'b0;
tri_wave_lab <=1'b0;
rom_addr_reg <= fre_add[31:20]+ PHASE_CTRL;
rom_addr <= rom_addr_reg +14'd12288;
saw_wave_lab <=1'b1;
end
default://正弦波
begin
squ_wave_lab <=1'b0;
tri_wave_lab <=1'b0;
saw_wave_lab <=1'b0;
rom_addr_reg <= fre_add[31:20]+ PHASE_CTRL;
rom_addr <= rom_addr_reg;
sin_wave_lab <=1'b1;
end
endcase
//********************************************************************//
//*************************** Instantiation **************************//
//********************************************************************//
//------------------------- rom_wave_inst ------------------------
rom_wave rom_wave_inst
(
.address(rom_addr ),//ROM读地址
.clock(sys_clk ),//读时钟
.q(data_out )//读出波形数据
);
endmodule
代码下载(付费可见):
![]()
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » DDS波形发生器Verilog QuartusII正点原子开发板
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » DDS波形发生器Verilog QuartusII正点原子开发板



发表评论
模板文件不存在: ./template/plugins/comment/pc/index.htm