概述
DDS说白了就是一个简陋的ROM地址控制器,通过控制地址,以映射数据,仅此而已。
体现在数学公式Sin(x+a)上,ROM就是Sin()函数,地址就是x+a。
分析
以下先列出FPGA代码,再对其原理加以说明。
假设:ROM地址位宽为8,ROM数据为一个完整正弦波。
reg [15:0]cnt=0;
always @(posedge clk) cnt <= cnt + frequency;
wire [7:0] RomAddr = cnt[15:8] + phase;
众所周知,这玩意只能调频和调相,调频靠frequency,调相靠phase。
以[7:0]
做翘点,也就是2^8。
frequency等于2^8则ROM地址以clk周期的速率更新,一时钟加一地址,连续输出地址;
frequency大于2^8,ROM地址依旧以clk周期的速率更新,不过是跳着输出;
frequency小于2^8,ROM地址多个clk周期的速率更新,多次输出同一地址;
phase可正可负,左加右减。