1.DDS原理直接数字频率合成技术(DDS)或者是压控振荡器,在许多数字通信系统中是重要的组成部分,工作原理是采用查找表方案,即通过查找表存储正余弦信号的采样值,数字的相位累加器生成合适的相位参数对查找表进行映射获得期望得到的输出波形。如图1是DDS的结构框图。图1DDS结构框图相位累加器是A1和D1的部分,量化器Q1是一个简单的截取功能模块,使得θ(n)的高精度相位截取成低精度的相位Θ(n)。查找表存储值的个数为:N=2^BΘ(n),Θ(n)=n*2*pi/N。2.硬件实现根据图1的DSS结构框图写出代码:moduleDDS_t1(data,we,clk,ce,reset,sine,cose);input[31:0]data;//频率控制字inputwe;//频率控制字写使能inputclk;//时钟inputce;//DDS使能inputreset;//复位output[15:0]sine;//正弦信号输出output[15:0]cose;//余弦信号输出reg[31:0]ADD_A;//正弦波产生模块的相位累加器reg[31:0]ADD_B;//余弦波产生模块的相位累加器reg[15:0]cose_DR;//余弦波的查找表地址reg[15:0]sine_DR;//正弦波的查找表地址wire[31:0]data;//频率控制字wire[9:0]ROM_A;wire[15:0]cose_D;wire[15:0]sine_D;assigncose=cose_DR;assignsine=sine_DR;assignROM_A=ADD_B[31:22];//这是一个量化的过程always@(posedgeclkorposedgereset)beginif(reset)//系统初始化时,默认的频率控制字为0ADD_A=0;elseif(we)ADD_A=data;endalways@(posedgeclkorposedgereset)beginif(reset)ADD_B=0;elseif(ce)ADD_B=ADD_B+ADD_A;//ADD_B为累加的结果end//分两路always@(posedgeclkorposedgereset)beginif(reset)cose_DR=0;elseif(ce)cose_DR=cose_D;endalways@(posedgeclkorposedgereset)beginif(reset)sine_DR=0;elseif(ce)sine_DR=sine_D;end//调用两个ROM,存储着正余弦波形一个周期的数值。rom_cosecose1(.addra(ROM_A),.clka(clk),.douta(cose_D));rom_sinesine1(.addra(ROM_A),.clka(clk),.douta(sine_D));endmodule根据代码描述,例化了两个ROM模块,在ROM里存储的是正弦和余弦的幅度值,就是说DDS产生的是两个波形,编写testbench代码验证:moduledds_testbench;//Inputsreg[31:0]data;regwe;regclk;regce;regreset;//Outputswire[15:0]sine;wire[15:0]cose;//InstantiatetheUnitUnderTest(UUT)DDS_t1uut(.data(data),.we(we),.clk(clk),.ce(ce),.reset(reset),.sine(sine),.cose(cose));initialbegin//InitializeInputsdata=0;we=0;clk=0;ce=0;reset=1;//Wait100nsforglobalresettofinish#100;reset=0;ce=1;we=1;//Addstimulusheredata=32'd100000000;endalways#5clk=~clk;endmodule