第二章 FPGA 工作原理
图2.7 b?2时IIR滤波器的冲激响应
fsfs?。从图在图2.5中,根据正弦信号频谱特性,输出信号的频率为0.25?282.7中,可以清楚地看出来,这时的输出信号是一个正弦波。
2.2.2 基于查表法(LUT)的DDS
一个典型的基于查表法(LUT)的DDS系统核心部分由相位累加器和波形存储器两部分构成[15]。基于查表法(LUT)的DDS硬件结构如图2.8所示。在图2.8中,相位累加器的位宽为 n bit,步进值为K,波形存储器的深度N为2n,宽度为L bit。LUT中依相位顺序存储一个周期的波形数据。
n n L 图2.8 基于DDS硬件结构
假定相位累加器的位宽为4bit,那么LUT深度N为16,此时其内部所存数据如表2.1所示。这种对应关系完整地体现在图2.9中。
相位累加器 波形存储器 - 13 -
第二章 FPGA 工作原理
表2.1 相位累加器位宽为4bit时LUT存储的数据 地址 0000 0001 0011 ? 1111
数据 sin(0) sin(2π/16) sin(2π·2/16) ? sin(2π·15/16)
图2.9 相位累加器位宽为4bit时LUT地址与存储数据的对应关系
利用Matlab可生成所需存储的数据。首先根据LUT的宽度L确定量化因子,然后根据LUT的深度产生一个周期的波形数据,最后通过floor函数完成浮点到定点数据的转换。
相位累加器的步进值K决定了DDS的输出频率。K与LUT的深度N、输出频率 fd 、抽样频率 fs 满足式(2.8)所示的关系式。
fsfd?K? (2-8a)
NK?fdfsN (2-8b)
由式(2-8)可知,fs / N 即为频率分辨率。根据抽样定理,可以得出,输出频率的最大值为 fs / 2 。K又可称为频率控制字,改变K即可改变输出频率,如图2.10所示。
- 14 -
第二章 FPGA 工作原理
在图2.10中,左半部分对应的频率控制字小于右半部分对应的频率控制字,从而导致右半部分相位累加器输出波形较为“陡峭”(斜率大),LUT输出频率高。这是因为K增大,使得系统可以在较短时间内读完LUT中的所有数据(一个周期的波形)。
相位累加器输出波形 相位累加器输出波形
LUT输出波形 LUT输出波形
图2.10 频率控制字K对相位累加器和LUT输出波形的影响
根据式(2-8),在LUT深度N为256且采样频率 fs 为100MHz的情况下,若要求输出频率 fd 为25MHz,则频率控制字K为64。由于LUT的地址位宽为8bit(这取决于LUT的深度),那么采用8bit表示整型数据64是没有问题的。但是,如果要求输出频率为24MHz,则此时频率控制字K为61.44,而8bit只可用来表示数据的整数部分,如果以61近似,那么输出频率就变为23.8MHz了,显然这造成了误差。为此,可将频率控制字K的位宽扩大,使其由两部分即整数部分和小数部分构成。这样形成的细化相位累加器如图2.11所示。
n+b D
K n+b n 地址
+
图2.11 细化的相位累加器
在图2.11中,相位累加器的步进值K的位宽为(n+b)bit,由n bit整数部分和 b bit
- 15 -
第二章 FPGA 工作原理
小数部分构成,输出选取其中的高n bit部分即整数部分作为LUT的地址。仍以前述为例,假定此时相位累加器的步进值位宽为12bit,其中,整数部分为8bit,小数部分为4bit,从而,61.44可由61.4375近似表示,输出频率即变为23.99902MHz,误差有了明显的减小。细化后的DDS整体结构如图2.12所示。
K n+b 相位累加器 n LUT L
图2.12 细化后的DDS整体结构
在大多数应用场合,需要输出正交的正、余弦信号,此时可采用一个双端口ROM存储如图2.9所示的正弦数据,外加两个具有不同起始地址的相位累加器共同完成此需求,如图2.13所示。
地址 sin
相位累加器 [起始地址→sin(π/2)] 相位累加器 [起始地址→sin(0)] LUT 地址 cos
图2.13 产生正交的正、余弦信号的DDS整体结构
与图2.8相比,图2.13中的相位累加器的起始地址有所变化。第一个相位累加器的起始地址保持不变仍为0,而第二个相位累加器的起始地址则指向了sin(π/2)所对应的地址空间,其目的正是为了保证输出与正弦相正交的余弦信号。图2.13中双端口的ROM是指一个存储空间两个读地址。显然,此方案使得整体结构紧凑,有效地节省了存储空间。当然,还可利用正弦信号的对称性进一步缩减存储空间。
表2.2 三个要素对DDS性能及占用FPGA资源的影响 参 数 相位累加器整数部分字长n 相位累加器小数部分字长b LUT的宽度L
对性能的影响 n越大频率分辨率越高,输出频率越精确 b越大意味着步进值可以更精确地表示 L越大意味着输出信号幅度更精确 对资源的影响 n越大意味着更大的LUT,需要占用更多的存储资源 b越大意味着需要设计更复杂的相位累加器 L越大意味着需要更大的存储空间 - 16 -