b) 采用DA算法的FIR滤波器
有很多方法可计算内积,其中一种方法称为分布式算法(DA)。DA滤波器的通用模型如图1所示。基于分布式算法的计算需要一系列的查表、加法和减法运算。所有这些功能都可用FPGA实现。DA滤波器的一个有趣特性是滤波器吞吐能力不再与滤波器长度有关,而是取决于输入采样精度。图2中的线性曲线可说明这一点。如图所示,在DA FIR滤波器结构中,对于给定的输入采样精度B,采样速率保持恒定,与滤波器抽头数无关。例如,若B=12且系统时钟为100MHz,滤波器的采样速率在滤波器长度为10、20、100、200、...时均为8.333MHz。若N=200,这一有效计算速率为每0.6us完成1个MAC或每秒1.7GMAC。
c) 用并行分布式算法提高乘法速度
基于DA的计算最显然而直接的形式是位串行(bit-serial),对基本算法的扩展可消除这一潜在的吞吐能力限制。串行处理数据(即一次1位)可得到适中的计算速率。若输入变量长度为B位,则需要B个时钟周期来完成一次内积计算。提高速度可用其他几种方法获得。一种方法是将输入字段分割成L个子字段,然后并行处理这些子字段。这一方法需要L倍的存储查找表,从而导致存储需求和成本的直线上升。通过将输入变量分解为一位子字段可获得最大速度。通过这种分解,每一时钟周期就可计算出一个新的输出采样。
上述1024点FFT占用大约1,900个逻辑片,这相当于XCV300等中等密度器件资源的66%。FFT算法可充分利用并行处理能力,而且目前的FPGA提供了I/O带宽、片上存储器和逻辑等多种资源,从而使得单片FFT引擎的高度并行处理成为现实。例如,利用标准的基数为4的Cooley-Tukey FFT算法的直接划分,一个计算单元可分配到每个蝶形列(column of butterfly)中。除了相邻蝶形列间的存储器缓存外,这一方法共需5个蝶形引擎(butterfly engine)。一个1024点FFT可在1024个时钟周期内完成。若采用100MHz的时钟,变换时间为10us。如果需要,还可进一步提高并行处理能力,以获得小于10us执行时间的单片FFT方案。