一、DDS是什么?
Direct Digital Synthesis 直接数字频率合成。是一种信号发生器,可以产生各种波形,且其产生的波形处于调制状态可随时修改。
二、DDS原理图。
如图可以看出主要有四部分:①相位累加器;②相位调制器;③波形数据表ROM;④D/A转换器。
有三个输入端:系统时钟CLK;频率字输入(后面用K表示);相位字输入(后面用P表示)。一个输出端:信号输出。
三、先强调几个概念有助于后面理解。
(1) 在相位累加器和相位调制器之前的两个累加寄存器的作用是,使频率字和相位字输入的时候不会影响到相位累加器和相位调制器的运行。
(2) 相位累加器位数为N,相位调制器位数为M。
(3) 相位调制器的位数与ROM地址线位数相同,即输出时按照相位调制器输出的值对照ROM地址,输出该地址对应数据。
(4) N一般大于M,所以N使用时将高M位传入相位调制器,低N-M位用于K值计数。
(5) 波形数据已存于ROM内。
四、DDS原理详解。
DDS系统运行流程为:K值输入暂存于累加寄存器,在相位累加器中不断累加直到计满低N-M位后溢出,将高M位传入相位调制器,相位调制器接到P值再在此基础上加上P值(P值为定值的时候输出波形的形状不变,相位平移P值),此时根据相位调制器输出的M位值查找对应ROM地址,输出地址对应数据。
设输入K=1,N=32,M=12,ROM地址线12位,ROM数据线8位,P值暂不考虑。
数据传输如下:
(1)相位累加器
N-M=20,即N低20位用来K值自加,直至累加到2^20后溢出到高12位。共需要累加2^20/1次。
即得到一个进位所需时间T=Tclk*(2^(N-M)/K)。(Tclk为系统时钟周期)
(2)相位调制器
接到相位累加器高12位数据,与P相加后寻址。12位计满(相位调制器计满)需要2^12次进位。经过2^12次进位后将储存在ROM内的波形完全读出,所以:
输出周期Tout=T*2^M=Tclk*2^(N-M)*2^M/K=Tclk*2^N/K
输出频率Fout=1/Tout=K/Tclk*2^N=K*Fclk/2^N
PS:最后说一下P值
假如ROM内存储的是sin信号,但是想输出cos信号的时候,只需要将每个输出点的相位向右平移四分之三个地址即可,假如地址线位数是12,地址共有2^12=4096个,4096*3/4=3072。即P=3072时可实现该功能。
参考
【1】野火升腾Pro《FPGA Verilog开发实战指南》;
【2】小梅哥FPGA,DDS原理详解与实现