旅游seo整站优化,商业网络,高端品牌网站建设服务,孝感网站建设专家DDS(Direct Digital Synthesizer)即数字合成器,是一种新型的频率合成技术,具有相对带宽大,频率转换时间短、分辨率高和相位连续性好等优点。较容易实现频率、相位以及幅度的数控调制,广泛应用于通信领域。 相位累加器是由N位加法器与N位寄存器构成,每个时钟周期的上升沿,加法器…DDS(Direct Digital Synthesizer)即数字合成器,是一种新型的频率合成技术,具有相对带宽大,频率转换时间短、分辨率高和相位连续性好等优点。较容易实现频率、相位以及幅度的数控调制,广泛应用于通信领域。 相位累加器是由N位加法器与N位寄存器构成,每个时钟周期的上升沿,加法器就将频率控制字与累加寄存器输出的相位数据相加,相加的结果又反馈至累加器的数据输入端,以使加法器在下一个时钟脉冲作用下继续与频率控制字相加。这样,相位累加器在时钟的作用下,不断对频率控制字进行线性相位累加。即在每一个时钟脉冲输入时,相位累加器便把频率控制字累加一次。
相位累加器的输出数据就是合成信号的相位。相位累加器的溢出频率,就是相位累加器的输出数据,作为波形存储器的相位采样地址,这样就可以把存储在波形存储器里的波形采样值经查表找出,完成相位到幅度的转换。波形储存器送到D/A转换器,再由D/A转换器将数字信号转换成模拟信号输出。 分析建模 然后我们来编写DDS逻辑程序
首先先创建ROM IP核 分别存放正弦波 方波 三角波数据
如下是正弦波的创建步骤 三角波方波创建步骤如以上正弦波类似
然后编写程序
module DDS_AD9767(Clk,Reset_n,Mode_Sel,Fword,Pword,Data);input Clk;input Reset_n;input [1:0]Mode_Sel;input [31:0]Fword;input [11:0]Pword;output reg [13:0]Data;//频率控制字同步寄存器reg [31:0]Fword_r;always(posedge Clk)Fword_r Fword;//相位控制字同步寄存器reg [31:0]Pword_r;always(posedge Clk)Pword_r Pword; //相位累加器reg[31:0]Freq_ACC;always(posedge Clk or negedge Reset_n)if(!Reset_n)Freq_ACC 0;elseFreq_ACC Freq_ACC Fword_r;//波形数据变地址wire [11:0]Rom_Addr;assign Rom_Addr Freq_ACC[31:20] Pword_r;wire [13:0]Data_sine,Data_square,Data_triangular;rom_sine rom_sine (.clka(Clk), // input wire clka.addra(Rom_Addr), // input wire [11 : 0] addra.douta(Data_sine) // output wire [13 : 0] douta);rom_square rom_square (.clka(Clk), // input wire clka.addra(Rom_Addr), // input wire [11 : 0] addra.douta(Data_square) // output wire [13 : 0] douta); rom_triangular rom_triangular (.clka(Clk), // input wire clka.addra(Rom_Addr), // input wire [11 : 0] addra.douta(Data_triangular) // output wire [13 : 0] douta); always(*)case(Mode_Sel)0:Data Data_sine;1:Data Data_square;2:Data Data_triangular;3:Data 8192; endcase
endmodule编写测试文件
timescale 1ns / 1psmodule DDS_AD9767_tb;reg Clk;reg Reset_n;reg [1:0]Mode_SelA,Mode_SelB;reg [31:0]FwordA,FwordB;reg [11:0]PwordA,PwordB;wire [13:0]DataA,DataB;DDS_AD9767 DDS_AD9767A(.Clk(Clk),.Reset_n(Reset_n),.Mode_Sel(Mode_SelA),.Fword(FwordA),.Pword(PwordA),.Data(DataA));DDS_AD9767 DDS_AD9767B(.Clk(Clk),.Reset_n(Reset_n),.Mode_Sel(Mode_SelB),.Fword(FwordB),.Pword(PwordB),.Data(DataB)); initial Clk 1;always #10 Clk ~Clk;initial beginReset_n 0;FwordA 65536;PwordA 0;FwordB 65536;PwordB 1024;Mode_SelA 2B00;Mode_SelB 2B00;#201;Reset_n 1;#5000000;FwordA 65536*1024;PwordA 0;FwordB 65536*1024;PwordB 2048; #1000000;$stop; end endmodule仿真波形如下
将仿真波形调为模拟量输出