DDS源程序就这么简单,想输出多少频率的信号就输出多少频率的信号。
至于灵和运用,还需要学习DDS的原理。
DDS原理每本教程讲的都大致一样,这里就不提出来了,对照原理看程序应该很明了的。
`timescale 1ns / 10ps
//DDS 信号发生器,一个时钟对应一个输出值,输出值根据频率的要求在正弦波中查找//R=fclk/(2^N) %DDS分辨率,由累加器位数决定,
//FrequencyKey=floor(fout/R)
module DDS_SC( //singal carrier
input CLK_IN,
input RESET,
input [27:0] FRE_Key, //频率控制字:FRE_Key= 2^28*f_out/f_in
input [27:0] PH_Key, //相位控制字
output reg [1:0] SC_OUT //singal carrier output
);
reg [27:0] pha_acc; //28bits Phase accumulator 268435456
//信号发生器查找表
reg [1:0] rom_add; //CA信号查找表地址,可以取更多位数,然后根据需要取高位。
wire [1:0] rom_out; //CA信号查找表对应值
assign rom_out = rom_add;
// 产生信号
always@(posedge RESET or posedge CLK_IN)
begin
if(RESET)
begin
pha_acc<=PH_Key; //初始相位
SC_OUT<=0;
end
else
begin
pha_acc<=pha_acc+FRE_Key;
rom_add<=pha_acc[27:26];
SC_OUT<=rom_out;
end
end
endmodule