To better understand the processing of this module, consider the following. The modulated phase value is a 0 to 2p value quantized to 8 bits 2p/28. The quantized value for p/2, p, 3p/2, and 2p are 0x3F, 0x7F, 0xBF, and 0xFF. The amplitude values for 0 to p/2 is stored in the ROM table. The amplitude values for p/2 to p are the ROM table output in the reverse order. The amplitude values for p to 3p/2 are the same output as the amplitude value from 0 to p/2 with the output from the ROM table inverted. Finally the amplitude value for 3p/2 to 2p are the same as for p to 3p/2 with the ROM table accessed in reverse.
This module manages the address values to the ROM table and the amplitude outputs to form the complete period of the sine wave form. The first process of generating the sine wave function is the addressing of the ROM table such that phase angles p/2 to p and 3p/2 to 2p are addressed in the reverse order. Reverse addressing is accomplished by simply inverting the ROM table address input vector. The phase modulated address input is inverted when the MODPHASE[6] is one and is then registered in the phaseadd register. The phase address is used to address the ROM sine table with the output registered in the qwavesin_ff register. To construct the negative amplitude values of the sine wave form, the MSB of the modulate phase word input is registered twice in modphase_msb1_ff and modphase_msb2_ff, compensating for the two cycle latency of the phaseadd and qwavesin_ff registers. The delayed MSB bit is used to invert the ROM table output when one. The altered ROM table output and the invert of the delayed modulated phase word MSB are finally registered in by the dac_ff register and then assigned to the DACOUT output port.
Sine ROM Table (romtab.v)
This module is the sine wave form ROM table. This table converts the phase word input to a sine amplitude output. To conserve area, only ? of the symmetrical sine wave form is stored in the ROM. The sine values stored in this table are the 0 to p/2 unsigned values quantized to 8 bits. Thus, the ROM table requires a 6 bit phase address input and outputs a 7 bit amplitude output. The sinlup module processes the phase and amplitude values to produce a complete sine period.
Dan Morelli has over 9 years of design and management experience. His areas of expertise include spread spectrum communications (involving GPS, TDRSS, and 802.11), PC chip set and system architecture, cell library development (for ECL devices) and ASIC development. He has been published and has multiple patents awarded and pending. Dan currently works for Accelent Systems Inc., an electronic design consulting company, where he is a founder and the VP of Engineering.
35
在一个快速逻辑FPGA中的调制直接数字频率合成器
DDS(直接数字频率合成)总的介绍
在探讨许多复杂的相位连续的调制技术中,对模拟电路中输出波形的控制已经越来越困难。在这些设计中,使用非线性数字式设计除去电路板需要的调整额外输出和温度。一个适合这个目标的数字式设计就是直接数字频率合成器(DDS)。一个DDS系统仅仅使用一个恒定参考时钟输入和将该时钟分解为指定的量化数位频率输出或者对参考时钟频率取样。这种形式是频率控制使得DDS系统成为需要精确频率扫描比如雷达尖叫声或者快速频率计量器的理想系统。根据数字输入控制字以控制输出频率,DDS系统可以用来当作一个允许精确频率连续改变相位的锁相环(PLL)。根据后面的说明,我们知道DDS系统还可以使用输入数字相位控制字来控制输出载波的相位。用数字式控制载波相位,很容易产生一个高频谱密度的相位调制载波。
本文主旨是给读者一个基本的DDS设计和寄生输出响应的知识。本文将展示一个运行于45MHz的快速现场可编辑逻辑器件。
一个基本的DDS系统包括一个数字振荡器(NCO)用来产生输出载波,和一个数模转换器(DAC)用来将从NCO过来的数字式正弦曲线字产生一个抽样的模拟载波。当DAC的输出是根据参考时钟频率的抽样时,通常用一个圆滑波形的低通滤波器来消除混叠成分。图1是一个典型的DDS系统设计图表。根据输入的参考时钟抽样经过NCO来产生输出载波。NCO的基本构成是一个相位累加器和一个正弦ROM查找表。通过增加NCO的载波相位调制的输出能力可以提高DDS系统的设计。图2是一个详细的展示可变相位调制器的典型NCO设计图表。
图1 典型的DDS系统 图2 典型的NCO设计
为了更好的理解NCO设计的各种功能,首先考虑仅包括一个相位累加器和一个正弦ROM查找表的基本NCO设计。与欧拉公式(Euler’s formula)图解比较就能最好地理解这两个表的NCO设计的功能。欧拉公式的图解如图3所示,是一个单位向量绕着实轴和虚平面的中心以W rad/s的速度转圈。
这个频率控制字是最后一个抽样相位值通过一个N位加法器的连续地累加而成。加法器的输出是参考抽样时钟通过一个N位寄存器的抽样。当累加器达到N位最大值的时候,累加器翻转然后继续。画出抽样累加器的值对时间的关系正如图3所示的一个锯齿波。
图3 欧拉公式图解
然后相位累加器的抽样输出用来在一个正弦量化值表里进行查找。抽样相位到正弦量化的转化可以看作是真实的或者虚拟的成分及时地影射。因为相位累加器的比特位数决定了频率调整的步进,一个典型的相位累加器的大小是24到32位。由于正弦
36
ROM表的大小是跟寻址范围直接成比例的,因此,不是所有相位累加器的24或32位都用来作为正弦ROM表的地址。仅是相位累加器的高Y(Y〈N〉位是用来作为正弦ROM表的地址,Y通常不必要等于正弦ROM表的输出量位D。
因为一个NCO输出的一个基于一个数字表示的相位和正弦波量化形式的载波,所以设计者可以完全的控制输出载波的频率,相位和幅度。通过加入一个相位端口和一个相位加法器到一个基本的NCO设计中,NCO的输出载波当M等于相位端口数和M小于或等于Y(用来作为正弦ROM表的地址位数)时可以被M矩阵相位调制。假如系统设计需要幅度调制如QAM,可以加入一个量化端口来调整正弦ROM表的输出。注意到这个端口没有在图2里表示出来以及这个特色没有在简单的快速逻辑FPGA设计中论证。最后,频率是调制是一个基本的NCO设计给出的。因为频率控制字是跟抽样时钟是同步装载到DDS的,频率的转化是相位连续的。
虽然DDS系统给设计者完全地控制复杂的调制合成,但是在一个非线性数字格式的正弦相位和量级的表示却是复杂的新设计。在取样任何的连续时间信号时,必须考虑取样原理和量子化误差。
为了理解DDS系统中取样理论的效果,最好看一下时间和频率域的DDS合成过程。就象上面规定的,通过以指定的速率累积的形式由NCO产生一个正弦波然后用一个相位的值来定位一个正弦调制ROM表的值。因此,NCO本质上用一个正弦波和用NCO的上升或下降沿输出参考取样时钟对其取样。图4表示在时间和频率域里NCO的处理。注意到这个表示并非量子化假设。
基于频率控制字的装载,NCO在一个时期内提供一批幅度的输出值。这个正弦曲线的频率域表示在指定的频率里是一个推动的作用。NCO在NCO参考时钟速率下输出这个正弦曲线的离散数字取样。在时间域里,NCO输出是一个取样时钟边缘闸门乘于正弦波形式产生的一个推动序列正弦振幅的作用。在频率域里,参考时钟的取样产生一系列在K倍的NCO时钟频率脉冲(当K=...-1,2,1,2....)。当在时间域里取样时钟乘于正弦曲线,正弦曲线频率域成分和取样时钟需要卷积来产生NCO输出频率域表示的NCO输出。
频率域的结果是在正弦曲线基本频率的脉冲作用和别的脉冲作用发生在K倍的NCO时钟频率加上或减去基本频率。基本的和别的成分发生在:
K*Fclk - Fout K*Fclk + Fout
当K = ... -1, 0 , 1, 2 ..... 和 K = 0是NCO正弦曲线基本频率。 Fout是指定的NCO正弦曲线输出频率 Fclk是NCO参考时钟频率 图4 NCO输出的时域和频域表示
DDS系统中的DAC提取NCO的输出值并转化他们的值为模拟电压。图4显示出时
37
间和频率域DAC过程开始于NCO的输出的表示。DAC输出是一个抽样和保持那些NCO数字幅度控制字和转换那些值为一个模拟电压和保持那些值为一个抽样时钟周期的电路。DAC过程的时域结构是NCO抽样输出值和一个抽样周期脉冲的卷积。抽样脉冲的频率域结构是一个sin(x)/x功能和在抽样时钟频率的第一个零。因为时域是卷积的,频率域就是相当于相乘。这个乘法过程使得NCO输出有一个sin(x)/x包络。这个在DAC输出的衰减在下面计算出来而且一个抽样输出频谱如图5所示:
Atten(F) = 20log[(sin(pF/Fclk)/pF/Fclk)] 当F是输出频率
Fclk是抽样时钟频率
图5 DAC输出的时域和频域表示
根据取样理论,实际的值量子化为数字形式必须考虑一个DDS系统的性能分析。一个DDS系统的假的响应是主要由两个量子化参量确定的。这些参量是相位累加器的相位量子化和ROM正弦曲线表和DAC的量子化量级。
如上所示,相位累加器只有高Y比特是用来寻址ROM表。值得注意的是,仅用高Y位引入一个相位截短。当一个频率控制字包含一个非零的值在低(N-Y-1:0)位是装载到DDS系统的,低非零位累加到高Y位和使得产生一个相位截短。相位的截短出现的频率可以根据以下计算:
Ftrunc = FW(N-Y-1:0)/2N-Y * Fclk.
一个相位的截短会周期性(以Ftrunc速率)相位调制输出载波提前2p/28来补偿频率控制字间隔多于/2Y。相位的跳转由相位截短位累加在基波周围产生突刺。 这些突刺位于基频的正和负截短频率,突刺的大小是20log(2Y)dBc。一个相位截短突刺输出的例子如图5所示。
在一个典型的NCO设计里,正弦ROM表会保持一个1/4正弦波(0,Pi/2)的量级。ROM表是通过把所有可能的相位值地址和映射到实际正弦波大小的近似D比特来产生的。因此,最大的输出误差为?-? LSB(假设当突刺为-20log(2D)dBc的最坏情况时)。
类似于NCO的ROM表,一个DAC也同样是这样量子化数字值为模拟值的。一个DAC输出的模拟电压取决于输入的数字值。当设计NCO正弦ROM表时,一种方法是根据经验好于通过理解ROM表和DAC之间的交互作用而在DAC线性得出一些数据。DAC的量化曲线数字输入对应模拟输出的DAC量化曲线可以看作是理想线性的。微分线性和积分线性这两个线性参数通常是用来衡量DAC性能。
微分线性是指输出的步进大小为比特到比特。一个DAC必须编码一个最大的1LSB微分线性。当输入码增加,DAC的输出必须相应增加。假如DAC电压的增加不是对应于一个增加的输入数字值,可以说DAC是缺码的。因此,一个有大于1LSB微分线性的10比特DAC可以精确到9或者更小的比特。精确输出的比特数量会导致DDS当dl是微分线性的比特数量时的虚假的性能-20log(2dl)。
38
积分线性是一个DAC的总的线性性能对一个理想的线性直线的一个衡量。那条直线图当DC偏置可能是DAC的最大或者最小时可以看作“最好的直线”,或者那条直线可以穿过输出的最大和最小值的结束点。超出输出范围时一个DAC会有一个特有的弯曲特性曲线。根据曲线的形状和对称度(半个DAC输出的周期对称),就可以产生DDS基本输出频率的输出“和”。当这些“和”接近和超过Nyquist频率,Fclk/2,这些“和”就成为样本之下和反映到重要的边带,0到Fclk/2。这个问题可以通过设置NCO的输出到Fclk/4加上一个轻微的偏移量来说明。第三谐波将倒减去3折轻微的偏移量基波和二次谐波相交Nyquist频率的2折偏移量,留下一个反射图象在边缘。一个典型的频率建立的过程如图5。
另外DAC将产生谐波失真的性质是任意输出波形的对称的分解,例如一个不同的上升和下降时间。这些性质通常可以由电路板的DAC的外部元件来修正,例如一个RF变压器,电路板设计问题,衰减点等。
基于DDS系统的复杂性,工程师应该考虑使用独立的装置来进行设计数字控制的振荡器,数字到模拟的转化器,和低通滤波器。这些方法可以允许在系统的许多点对信号进行观察,至今在最终方案中仍是足够简洁的应用。二者选其一,离散的实现可以作为一个单片混合ASIC信号的原型制作工具。
笔者在DAC设计方面采用了一种Harris H15721评估板。NCO作为DDS设计的主要部分,和一个随机的发生器来测试信号调制,是65%一个快速FPGA设计的执行方案。这个QL16x24的4000门的FPGA,是由于其是一个高性能,易用,和强大的开发工具。 这个NCO的设计包括以下:
在位CLA加法原理图的Verilog开发 捕获和生成网络表到Verilog 32位频率控制字输入 基于8位的32相位累加器 8位相位调制控制字 8位正弦ROM查找表
设计大多数用Verilog语言描述,通过Verilog快速逻辑的巨大的网络表库的修正的8位提前进位加法器。整个设计环节不会超过4天(2天描述设计以及1天半确定硬件原型)。一个45MHz的设计在仿真软件上的第一次运行,一切工作得很出色。
论文所用来说明DDS性能参量的图是通过测试配置来提供的。
如下的图1-1标明了NCO设计的外部IO接口。每个信号的功能如下表所示。
39