《直接数字频率合成器DDS的设计.docx》由会员分享,可在线阅读,更多相关《直接数字频率合成器DDS的设计.docx(5页珍藏版)》请在优知文库上搜索。
1、直接数字频率合成器DDS的设计DDS的根本原理DDS技术是一种把一系列数字量形式的信号通过DAC转换成模拟量形式的信号的合成技术,它是将输出波形的一个完整的周期、幅度值都顺序地存放在波形存储器中,通过控制相位增量产生频率、相位可控制的波形。DDS电路般包括基准时钟、相位增量存放器、相位累加器、波形存储器、D/A转换器和低通滤波器(1.PF)等模块,如图1所示。相位增量存放器存放频率控制数据,相位累加器完成相位累加的功能,波形存储器存储波形数据的单周期幅值数据,D/A转换器将数字量形式的波形幅值数据转化为所要求合成频率的模拟量形式信号,低通滤波器滤除谐波分量。整个系统在统一的时钟下工作,从而保证
2、所合成信号的精确。每来一个时钟脉冲,相位增量存放器频率控制数据与累加存放器的累加相位数据相加,把相加后的结果送至累加存放器的数据输出端。这样,相位累加器在参考时钟的作用下,进行线性相位累加,当相位累加器累加满量时就会产生-一次溢出,完成一个周期性的动作,这个周期就是DDS合成信号的一个频率周期,累加器的溢出频率就是DDS输出的信号频率。相位累加器输出的数据的高位地址作为波形存储器的地址,从而进行相位到幅值的转换,即可在给定的时间上确定输出的波形幅值。图1DDS原理图波形存储器产生的所需波形的幅值的数字数据通过D/A转换器转换成模拟信号,经过低通滤波器滤除不需要的分量以便输出频谱纯洁的所需信号。
3、信号发生器的输出频率fo可表示为:fQ=MAf=M.fs/2N(1)式中,为系统时钟,V为系统分辨率,N为相位累加器位数,M为相位累加器的增量。参数确定及误差分析首先确定系统的分辨率V,最高频率/max,及最高频率/max下的最少采样点数Nmin根据需要产生的最高频率九ax以及该频率下的最少采样点数Nmm,由公式ffNfmaXNmin(2)确定系统时钟工的下限值。同时又要满足分辨率计算公式=f2”综合考虑决定工的值。选定了工的值后,那么由公式(9.3)可得2=/f,据此可确定相位累加器位数No然后由最高输出频率%=MM(4)推出M=2S,得出相位增量存放器为S位。确定波形存储器的地址位数W,本
4、系统中决定存放2Z个数据值,因此RAM地址为Z位。误差分析: 失真度:除受DZA转换器本身的噪声影响外,还与离散点数N和D/A字长有着密切关系。设q为均匀量化间隔,那么其近似数学关系为-1.100%(01)式中N为一周中输出的点数,D为量化字长,4=2o 相位舍位引起的误差:在DDS中,由于相位累加存放器的位数N大于RAM的寻址位数W,使得相位存放器的输出寻址RAM时,其N-W个位须舍去,不可防止会产生误差,该误差是DDS输出杂散的主要原因。总的信噪比是zQfnn1.4446.0(SNR)tfe=-IO1.gJ-+-,22(6) 相位量化误差:由于波形是经过一系列有限的离散采样点转化而来,因此
5、势必存在相位量化误差,通过增加采样点可减小此误差。实现器件的选择一般选用FPGA/CP1.D器件作为DDS的实现器件,对于D/A转换器的选择,首先要考虑到D/A转换器的转换速率。要实现所需的频率,D/A的转换速度要大于maNmin,然后根据D/A转换器字长所带来的误差,决定D/A的位数。由此选择D/A转换器的型号。DDS的FPGA实现设计本设计要求DDS实现的性能指标为:分辨率OO1.Hz,最高输出频率5MHz,根据上面所列公式可以算出:时钟频率为85.9MHz:累加器位数N=33;相位增量存放器为29位。如图2所示,DDS系统包括相位增量存放器、相位累加器、地址存放器、波形存储器、时钟倍频器
6、及地址发生局部等几个模块。内部所有模块均用Veri1.og语言编写,其顶层设计用原理图的方式进行模块间的连接。图2DDS内部组成模块图1)相位增量存放器图3相位增量分段存放器相位增量分段存放器的端口如图3所示。根据前面的计算可知,相位增量存放器需要29位。相位增量存放器的断口包括复位端RES,数据输入PSI(289),数据输出PSO(320).RES高电平有效,复位后,PSo输出为0。PSO输出高4位总为0。其Veri1.og程序如下:modu1.ePIR(PS1.PSO,RES);input28:0PSI;output32:01PSO;inpu1.RES;reg32:0PSO;a1.ways
7、(PSI)beginif(RES)beginPSO=O;ende1.sebegin力PSO=4b0000,PSI;endendendmodu1.e图4相位增量分段存放器仿真图图4是相位增量分段存放器仿真图,从图中可以看出,当RES为低电平,PSO跟随PS1.变化。2)相位累加器和地址存放器因为累加器需要33位,如果用一般的加法器来实现累加,那么会有非常大的进位延迟,当要求输出频率较高时,满足不了要求,因此累加局部采用流水线结构,将33位加法分为3级流水线结构,每级为11位加法,这样做可以大大减少进位延迟,满足高频率输出时的要求。图5是流水线结构加法器端口图。图5流水线结构加法器流水线加法器输入
8、为时钟C1.K、复位端RES、33位加法数据输入ina(329)和inb(32:0)输出为数据输出SUm(32:0),进位输出COU1.o实际应用时,将输出sum(32Q)与出入inb(32:0)接到一起,从而构成流水线结构的累加器。图6地址存放器地址存放器由时钟端ADe1.K,33位输入端ADAI(32:0),8位输出端ADAe)(7:0)组成,作用是存放累加器计算出的值并将累加得出的结果的高8位作为波形存储器的地址送出。图7累加器和地址存放器连接图其中ina(32:0)与相位增量缓冲存放器的输出端PSO(32:0)连接。相位累加器在参考时钟的作用下,进行线性相位累加,当相位累加器累加满量时
9、就会产生一次溢出,完成一个周期性的动作,这个周期就是DDS合成信号的一个频率周期,累加器的溢出频率就是DDS输出的信号频率。流水线加法器程序modu1.epipe(cout,sum,ina,inb,c1.k,res);output32:0sum;outputcout;input32:0ina,inb;inpute1.k,res;reg32:0tempa,tempb,sum;regfirstco,secondco,cout;reg10:0firsts;reg10:0seconda,secondb;reg2kfirsta,firstb,seconds;a1.ways(posedgee1.k)beg
10、inif(res)begintempa=0;tempb=0;ende1.sebegintempa=ina;tempb=inb;endenda1.ways(posedgee1.k)beginif(res)beginfirstco=0;firsts=O;firsta=O;firstb=O;ende1.sebeginfirstco,firsts)=tempa10:0+tempb1.10:0;firsta=tempa32:11;firstb=1.empb32:11;endenda1.ways(posedgee1.k)beginif(res)beginseconda=0;seconds=0;second
11、b=0;secondco=0;ende1.sebeginsecondco,seconds21:11)=firsta10:O+firstb1.0:0J+firstco;seconds10:O=firsts;seconda=firsta21:11;secondb=firstb21:11;endenda1.ways(posedgee1.k)beginif(res)sum=0;e1.sebegincout,sum=seconda10:0+secondb1.0:0+secondco,seconds;endendendmodu1.e地址存放器程序modu1.eADR(ADAI,ADAO,ADC1.K);i
12、nput32:0ADAI;output7:0ADA0;inputADC1.K;reg7:0ADAO;a1.ways(posedgeADC1.K)beginADAO=ADAI3225;endendmodu1.e图8流水线结构加法器仿真图3)波形存储器波形存储器实际上就是一个双口RAM,波形存储器存储的是所生成波形一周期采样256点的数据值,通过地址的改变,所输出的值就会变化,因为,地址不一定是连续变化的,所以所输出的值也不是连续的,在同样的时钟周期下,地址间隔的变化也就造成了生成波形的频率的变化。地址值每溢出一次,便完成了一个周期的输出。当改变波形存储器中波形数据时,也就改变了输出波形。图9双口
13、RAM模块双口RAM的设计采用IP核生成,端口分别为:第一口地址总线addra(79),输出数据总线dou(a(79),时钟C1.ka,第二口地址总线addrb(7:0),输入数据总线dinb(79),时钟C1.kb,写使能web。地址总线addra(7:0)与地址存放器的输出ADAO(7:0)连接,输出数据总线douta(7:0)连接输出缓冲通过FPGA的I/O口输出,作为D/A转换器的输入。当改变波形数据时,通过第二口地址总线addrb(7:0)和输入数据总线dinb(70)将波形数据输入到RAM中去。4)地址发生器图10地址发生器地址发生器的作用是,接收状态机所发出的时钟信号,每来一个脉
14、冲值加一,然后作为双口RAM输入端口的地址送到双口RAM的addrb(7:0),作为RAM的输入地址。地址发生器程序modu1.eADDRMAKER(RES,ADDRD,ADDRC1.K);output7:0ADDRD;inputADDRC1.K,RES;reg7:01ADDRD:a1.ways(negedgeADDRC1.K)beginif(RES)ADDRD=O;e1.seADDRD=ADDRD+1;endendmodu1.e5)元件例化各模块程序编写完后,经过单元测试没有问题后,要将各模块连接起来,这里通过将各模块例化,在电路图中将各模块直接连接起来。如图11所示,点击CreateSch
15、ematicSymbo1.就可将程序例化为元件,新建原理图,在元件库里可以找到例化后的元件,将之拖出连接即可。图11元件例化操作图图12系统总体组成原理图上图是将各模块连接以后的原理图,用户可通过所需自定义与外部的接口。6)数字系统仿真为了检测系统是否按照理论设计生成精确的数字波形,预先在RAM中存入256个数值,检测系统输出周期是否满足期望值。系统时钟真实周期为85.9MHZ的倒数11.6ns,令仿真时钟周期为12ns,频率控制字为16进制1DCD6500,即十进制的500000000,那么理论输出频率应为前面已经说过,地址溢出的周期即位生成数字波的周期。在图9.21、图9.22中,OUd(7:0)即地址存放器的输出,它输出值的溢出周期即可反映波形周期,从而可以比拟是否与理论值吻合,图9.21中当OUd(7:0