基于FPGA流水线分布式算法的FIR滤波器的实现
由于实现的是固定系数的FIR滤波器,所以可以用利用简化的过程(如查找表)减少设计所耗用的器件资源。
以一个8阶FIR滤波器为例来说明在FPGA实现中优化的过程。假定滤波器的输入为2bit的正整数,由(4)可以得到输出为:
y(n)=s(0)h(0)+s(1)h(1)+s(2)h(2)+s(3)h(3) (5)
这时的乘法和加法就可以并行地采用查找表实现,其结构示意图如图3所示。
在图3中,右面4个信号是输入的低位bit,左边是输入信号的高位bit。低位和P1最多使用4bit,由于系数固定,查找表实现起来很方便;高位和P2可按同样方法计算。在该结构中,部门积P1和P2可以利用Virtex-E的4输入查找表实现,所有的计算都可并行完成。由于输入为2bit,因此只用了一个加法器;对于更多位数的输入来说,将需要更多的加法器。这样就实现了将乘法器转化为回法器,减少了解逻辑资源,优化了设计。
1.3 分布式算法
分布式算法在20多年前被首次提出,但直到Xilinx发明FPGA的查找表结构以后,分布式算法才在20世纪90年代初重新受到重视,并被有效地应用在FIR滤波器的设计中。下面介绍分布式算法的原理。
式(1)可以用下式表示:
式中,hi即h(i),xi(n)即x(n-i),N为滤波器的抽头数。
把数据源数据格式规定为2的补码形式,则:
式中,xib(n)为二进制数,取值为0或1;xio(n)为符号位,为1表示数据为负,为0表示数据为正。将(7)式代入(6)式可得:
由此可以看出,方括号是输入变量的一个数据位和所有滤波器抽头系数h0~hi的每一位进行“与”运算并求和。而指数部分则说明了求和结果的位权,整数乘以2b就是左移b位,对此可以通过硬件连线实现,不占用逻辑资源。这样就可以通过建立查找表来实现方括号中的运算,查找表可用所有输入变量的一同一位进行寻址。
2 系统设计与实现
下面以一个16阶的线性相位FIR低通滤波器为例说明设计的过程。
2.1 设计指标及参数提取
2.1.1 滤波器的设计指标
《基于FPGA流水线分布式算法的FIR滤波器的实现(第2页)》