DDS(Direct Digital Synthesis,直接数字频率合成),用作信号发生器,在Quartus中也称为NCO(Numerically Controlled Oscillator,数控振荡器),是软件无线电的重要组成部分。
本次使用Vivado调用DDS的IP进行仿真,尝试了各种配置方式的差异,设计了单通道信号发生器(固定频率),并采用Verilog查表方法实现DDS 、AM调制和解调、DSB调制和解调以及可编程控制信号发生器(FM和相位调制)。
使用系统参数和硬件参数分别进行配置,比较**标准模式**和光栅化模式的差异,并比较相同配置在不同时钟下的差异。
新建工程,新建原理图BlockDesign,调用DDS的IP核,默认输出信号时域波形和相位信息。
三种模式可选(相位发生器+正弦/余弦波形发生器、仅相位发生器、仅正弦/余弦波形发生器);
100MHz工作时钟,即100MHz采样率。
设置为1,单通道模式,该通道的采样频率等于采样时钟100MHz,设置为多通道时,每个通道的采样率为工作时钟/通道数,如4通道100MHz时钟,每通道采样率25MHz。
Standard标准模式(常用),光栅化网格模式。在这两种情况下,输出频率、频率分辨率、相位增量和其他参数的计算方式不同。详细信息请参见Xilinx PG141的第14~18页。
当标准模式和光栅化模式实现指定频率和幅度的信号时,输出没有太大差异。两者都可以满足要求。一般使用Standard进行配置比较方便。
主要区别:
标准模式下计算的相位增量可能是小数。然而,在FPGA中,必须对相位进行截断和舍入,从而导致相位误差。在噪声要求较高的情况下,可采用8处噪声整形配置进行补偿。使用相位抖动(Phase Dithering)或泰勒级数校正(Taylor Series Correct)来补偿相位误差;
在光栅化模式配置中,相位增量必须是整数,没有截断效应,并且在标准模式下没有时基抖动。
(1) 系统参数
(2)硬件参数
系统参数配置为6、7、8,其中:
SFDR(SpuriousFree Dynamic Range,寄生动态范围),对应幅度,对应M_AXIS_DATA通道,SFDR越大,用于表示幅度的数据位宽越大;
计算输出位宽,如下图所示。当使用SFDR=96 dB 并在位置8 配置噪声整形位None 或Dithering 时,输出位宽为96/6=16 位,四舍五入为16 位;使用SFDR=95 dB,95/6=15.83,四舍五入为16 位。
对应相位的增量配置和位宽,对应M_AXIS_PHASE通道。频率分辨率越小,用于表示相位的数据位宽就越大;
当
4 配置为标准模式时,将使用噪声整形。
Auto根据设计的SFDR参数自动选择是否使用整形;
无不成型;
Phase Dithering相位抖动,在使用相位截断技术时,会产生随机噪声,使量化误差变得随机;
泰勒级数校正泰勒级数校正;
当4配置为Rasterized时,没有相位误差,只能配置None。
对于几乎所有应用程序,首选实现是抖动DDS。
对于绝大多数应用,具有相位抖动补偿功能的DDS 是首选。
相位抖动用于改善SFDR,但代价是增加本底噪声。
第6点和第7点的配置会影响输出数据的位宽,这可以在原理图中反映出来,也可以在“Summary”页面上查看。如图所示,在100MHz工作时钟下,点1表示频率应为0.4Hz。分辨率,需要输出28位宽的相位(有效位宽)。从AXI_Stream 接口输出时,以8 位宽度步进,因此28 位有效位宽的相位信息通过将高位补零达到32 位宽度。 m_axis_phase_tdata[27:0]是有效的相位信息;图2表示要达到45dB的输出信噪比,输出的sin和cos波形数据各需要8位,总共需要16位,其中高8位m_axis_data_tdata[15:8]表示sin 。低8位代表cos; 3 位表示按照上述配置的输出延迟有3 个时钟周期,需要1 个18 Kbit BRAM。
该模式下直接配置输出位宽,但具体输出对应的SFDR和频率分辨率会反映在Summary中,也可以自己计算。
Fixed是固定相位增量,在DDS运行过程中不能改变,即对应一个不可变的频率;
可编程是可编程的。选择后会出现配置界面。 DDS运行过程中可以随时写入频率控制字来改变输出波形的频率,用于偶尔改变频率;
频率变化频繁的应采用流媒体,或者FM调频;
不支持任何一个;
固定固定相位偏移;
可编程的可编程配置(偶尔改变);
流媒体经常被改变并应用于相位调制;
Sine 只输出sin波形; Cosine输出cos波形;两者的位宽都是第一页设置的数据位宽。 Sine和Cosine同时输出sin和cos波形,其中高位代表sin,低位代表cos。总的数据位宽加倍;
正弦和余弦波形默认使用有符号数。勾选相应选项后,正负颠倒;
Full Range:全精度(全范围),对于通信应用来说,需要最大幅度,但当幅度值由于自动增益控制不是那么重要时,输出幅度接近1;
Unit Cycle:单位圆,用于需要高DDS 输出幅度值的应用,例如生成FFT 旋转因子。当使用单位圆时,DDS输出幅度为半满量程(即取值范围为01000.(+0.5).110000.(-0.5))。
选中后,包含相位输出通道。不勾选时,仅输出幅度信息M_AXIS_DATA;
自动由所需的具体资源确定。资源较小时选用DROM,资源较多时选用BROM; DistributeROM选择分布式ROM(DROM),Block ROM选择块ROM资源(BROM);
Area优先area以尽可能节省资源使用(LUT、FF等),Speed优先以尽可能提高性能;
尽量少用Minimal节省资源,尽量用Maximal提高性能;
在单通道模式下,总线配置仅包括输出信号的可选Ready。在多通道模式下,通道可以选择包含tlast 等信号。
选择向两个输出通道添加就绪信号(可选)。根据AXI_Stream总线协议的规则,后续接收模块输入就绪信号(高电平),表示已准备好接收DDS输出。该DDS 仅在以下情况下才能输出:
配置每个通道的输出频率。第一页仅使用1个通道,因此此处只能配置一个通道。直接以MHz为单位配置输出频率,如0.02MHz;
在使用资源较多时默认使用Block ROM,并使用区域优先Area策略;单通道采样频率=时钟频率,100MHz,输出波形为16位,高8位为sin,低8位为cos。
根据上述配置,配置输出频率为2 MHz的DDS。
对输出的16 位波形数据进行分频。高8位代表sin sine信号,低8位代表cos cosine信号。相位呈锯齿状。注意,如果输出通道包含就绪信号,根据AXI_Stream总线的要求,外部信号需要准备好。信号,DDS只有ready有效时才会输出,仿真时可以一直给高电平。
线[7:0] sin_wave;线[7:0] cos_wave;线[7:0] sin_wave_2;线[7:0] cos_wave_2;分配sin_wave=M_AXIS_DATA_0_tdata[15:8];分配cos_wave=M_AXIS_DATA_0_tdata[7:0];分配sin_wave_2=M_AXIS_DATA_1_tdata[15:8];分配cos_wave_2=M_AXIS_DATA_1_tdata[7:0];