我知道,我对与电子有关的所有事情都很着迷,但不论从哪个角度看,今天的现场可编程门阵列(FPGA),都显得“鹤立鸡群”,真是非常棒的器件。如果在这个智能时代,在这个领域,想拥有一技之长的你还没有关注 FPGA,那么世界将抛弃你,时代将抛弃你。

 

DDS 是直接数字式频率合成器(Direct Digital Synthesizer)的英文缩写,是一项关键的数字化技术。与传统的频率合成器相比,DDS 具有低成本、低功耗、高分辨率和快速转换时间等优点,广泛使用在电信与电子仪器领域,是实现设备全数字化的一个关键技术。

 

 

上图所示是一个基本的 DDS 结构,主要由相位累加器、相位调制器、正弦 ROM 查找表和 D /A 构成。图中的相位累加器、相位调制器、正弦 ROM 查找表是 DDS 结构中的数字部分, 由于具有数控频率合成的功能,又合称为 NCO。

 

相位累加器是整个 DDS 系统的核心,在这里完成相位累加功能。相位累加器的输入是相位增量 B∆θ=2N X fout /fclk,故相位累加器的输入又称为频率控制字,fclk 为系统基准时钟,fout 为输出的频率。频率控制字还经过一组寄存器, 该寄存器是同步的, 使得当频率控制字改变时不会干扰相位累加器的工作。

 

相位调制器接收相位累加器的相位输出, 在这里加上一个相位偏移值, 主要用于信号的相位调制,如应用于通信方面的相移键控等, 不使用此部分时可以去掉, 或者将其设为一个常数输入。同样相位字输入也要用同步寄存器保持同步。

 

正弦 ROM 查找表,完成 fsin(B∆θ)的查找表转换,是相位到幅度的转换, 内部存有一个完整周期正弦波的数字幅度信号,输入是 ROM 的地址值, 输出送往 D /A, 转化成模拟信号。

 

在参考时钟 fclk 控制下,频率控制字 K 与相位寄存器的输出反馈在相位累加器中完成加运算,存入寄存器,作为下一次加运算的一个输入值,相位累加器输出高位数据作为波形存储器的相位抽样地址值,查找波形存储器中相对应单元的电压幅值,得到波形二进制编码,实现相位到电压幅值的转变。波形二进制编码再通过 D/A 转换器,把数字信号转换成相应的模拟信号。

fout =K X fclk/ 2N

当 K=l 时,可得 DDS 的最小分辨率为:fout =fclk/ 2N

根据采样定理,K 的最大值应小于 2N/2。

 

累加器得到的相位是怎么去寻址正弦 ROM 的,对于 N 位的相位累加器对应 2 的 N 次方数量的相位累加值,如果正弦 ROM 中存储的点数也是 2 的 N 次方的话,对存储容量和资源的要求就比较高了,实际上在寻址正弦 ROM 表时,用的是相位累加值的高位,也就是说并不是每个时钟 fc 都从正弦 ROM 表中取一个数值,而是多个时钟取一个值,这样能保证相位累加器溢出时,从正弦 ROM 表中取出正好一个正弦周期的样点。因此,相位累加器每计数 2 的 N 次方次,对应一个正弦周期。而相位累加器 1 秒钟计数 fc 次,在 k=1 时,DDS 输出的时钟频率就是频率分辨率。频率控制字 K 增加时,相位累加器溢出的频率增加,对应 DDS 输出的频率变为 K 倍的 DDS 频率分辨率。

 

深入剖析:

设定:ROM 存储点数为 1024,每个点是用 8 位二进制表示。即,ROM 地址线宽度为 10,数据线宽度为 8。

 

根据上述条件可以知道,相位调制器位宽 M=10,那么根据 DDS 原理,相位累加器位宽 N=20。那么在相位调制器中与相位控制字进行累加时,应用相位累加器的高 10 位累加。

 

而相位累加器的低十位只与频率控制字累加。为什么是这样子?

 

我们以频率控制字 K=1 为例,相位累加器的低十位一直会加 1,直到低十位溢出向高十位进位,此时 ROM 地址应该是 0,也就是说,ROM 的 0 地址中的数据被读了 1024 次,继续下去,ROM 中的 1024 个点,每个点都将会被读 1024 次,最终输出的波形频率应该是参考时钟频率的 1/1024。 fout =1 Xfclk/ 1024。反过来想,周期被扩大了 1024 。同样当频率控制字为 10 时,相位累加器的低十位一直会加 10,那么,相位累加器的低十位溢出的时间比上面会快十倍,则 ROM 中的每个点相比于上面会少读 10 次,所以最终输出频率是上述的 10 倍。fout =10 Xfclk/ 1024。这就是 DDS。

 

DDS 最终输出的正弦波的幅值,必须都是 ROM 表中的正弦幅值。之前我们说根据采样定理,频率控制字 K 的最大值应小于 2 的 N 次幂除以 2,这是有道理的,累加器数据位宽 20 位,ROM 表地址位宽 10 位,在最终 ROM 表寻址时,用的是累加器的高 10 位,而低 10 位只用来进行累加。由于我们上述说 DDS 最终输出正弦波的赋值必须是 ROM 表中的幅值,也就是说,ROM 表中的幅值必须都被用到,而不能跳过。以累加器位宽 20 位为例,它的一半是 1024,当频率控制字以超过 1024 累加时,高十位输出累加值会超过 1,也就是在寻址 ROM 表时跳过某些赋值。根据上述可以得出结论了,频率控制字 K 的最大值应小于 2 的 N 次幂除以 2。