基于FPGA流水线分布式算法的FIR滤波器的实现_第1页
基于FPGA流水线分布式算法的FIR滤波器的实现_第2页
基于FPGA流水线分布式算法的FIR滤波器的实现_第3页
基于FPGA流水线分布式算法的FIR滤波器的实现_第4页
基于FPGA流水线分布式算法的FIR滤波器的实现_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于FPGA流水线分布式算法的FIR滤波器的实现 摘要: 提出了一种采用现场可编码门阵列器件(FPGA)并利用窗函数法实现线性FIR数字滤波器的设计方案,并以一个十六阶低通FIR数字滤波器电路的实现为例说明了利用Xilinx公司的Virtex-E系列芯片的设计过程。对于在FPGA中实现FIR滤波器的关键乘加运算,给出了将乘加运算转化为查找表的分布式算法。设计的电路通过软件进行了验证并进行了硬件仿真,结果表明:电路工作正确可靠,能满足设计要求。 关键词: FIR滤波器 FPGA 窗函数 分布式算法 流水线 随着数字技术日益广泛的应用,以现场可编程门阵列(FPGA)为代表的ASIC器件得到了迅速普

2、及和发展,器件集成度和速度都在高速长。FPGA既具有门阵列的高逻辑密度和高可靠性,又具有可编码逻辑器件的用户可编程特性,可以减少系统设计和维护的风险,降低产品成本,缩短设计周期。 分布式算法是一种以实现乘加运算为目的的运算方法。它与传统算法实现乘加运算的不同在于执行部分积运算的先后顺序不同。简单地说,分布式算法在完成乘加功能时是通过将各输入数据每一对应位产生的部分积预先进相加形成相应部分积,然后在对各部门积进行累加形成最终结果,而传统算法是等到所有乘积产生之后再进行相加来完成乘加运算的。与传统算法相比,分布式算法可极大地减少硬件电路规模,很容易实现流水线处理,提高电路的执行速度。 FPGA有着

3、规整的内部逻辑块阵列和丰富的连线资源,特别适合细粒度和高并行度结构特点的数字信号处理任务,如FIR、FFT等。本文详细讨论利用FPGA实现FIR滤波器的设计过程,并且对设计中的关键技术分布式算法进行详细描述。 1 FIR和分布式算法 1.1 FIR的基本概念 FIR滤波器的数学表达式为: 式中,N是FIR滤波器的抽头数,x(n)表示第n时刻的输入样本;h(i)是FIR滤波器的第i级抽头系数。 普通的直接型FIR滤波器结构如图1所示。 FIR滤波器实质上是一个分节的延迟线,把每一节的输出加权累加,便得到滤波器的输出。对于FIR滤波器,幅度上只需满足以下两个条件之一,就能构成线性相位FIR滤波器。

4、 h(n)=h(N-1-n) (2) h(n)=-h(N-1-n) (3) 式(2)称为第一类线性相位的幅度条件(偶对称),式(3)称为第二类线性相位的幅度条件(奇对称)。 1.2 FIR滤波器的优化 在实际应用中,为了减少逻辑资源的占有量和提高系统的运行速度,对FIR滤波器需要进行优化处理。本文采用的优化主要有两种:一种是对表达式进行优化,另一种是在FPGA实现中利用特有的查找表进行优化。 对于线性相位因果FIR滤波器,它的系列具有中心对称特性,即h(i)=±h(N-1-i)。令s(i)=x(i) ±x(N-1-i),对于偶对称,代入式(1)可得: 根据方程(4),线性相

5、位FIR滤波器的直接型结构可以改为如图2所示的结构,从而使N次乘法减少为N/2次,加法次数增加了N/2次(N为偶数),总的运算量减少。 由于实现的是固定系数的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最

6、多使用4bit,由于系数固定,查找表实现起来很方便;高位和P2可按同样方法计算。在该结构中,部门积P1和P2可以利用Virtex-E的4输入查找表实现,所有的计算都可并行完成。由于输入为2bit,因此只用了一个加法器;对于更多位数的输入来说,将需要更多的加法器。这样就实现了将乘法器转化为回法器,减少了解逻辑资源,优化了设计。 1.3 分布式算法 分布式算法在20多年前被首次提出,但直到Xilinx发明FPGA的查找表结构以后,分布式算法才在20世纪90年代初重新受到重视,并被有效地应用在FIR滤波器的设计中。下面介绍分布式算法的原理。 式(1)可以用下式表示: 式中,hi即h(i),xi(n)

7、即x(n-i),N为滤波器的抽头数。 把数据源数据格式规定为2的补码形式,则: 式中,xib(n)为二进制数,取值为0或1;xio(n)为符号位,为1表示数据为负,为0表示数据为正。将(7)式代入(6)式可得: 由此可以看出,方括号是输入变量的一个数据位和所有滤波器抽头系数h0hi的每一位进行“与”运算并求和。而指数部分则说明了求和结果的位权,整数乘以2b就是左移b位,对此可以通过硬件连线实现,不占用逻辑资源。这样就可以通过建立查找表来实现方括号中的运算,查找表可用所有输入变量的一同一位进行寻址。 2 系统设计与实现 下面以一个16阶的线性相位FIR低通滤波器为例说明设计的过程。 2.1 设计

8、指标及参数提取 采样频率:50MHz 归一化截止频率:0.4MHz 类型:低通 输入数据宽度:8位 阶数:16阶 输出数据宽度:16位 采用汉字窗函数(Hanning)设计16阶线性相位FIR数字滤波器,并提取其特性参数。 用汉字窗(Hanning)进行设计,此16阶FIR数字低通滤波器特性参数经过换算如下: h0=h15=0000 h1=h14=0065 h2=h13=018F h3=h12=035A h4=h11=0579 h5=h10=078E h6=h9=0935 h7=h8=0A1F 2.2 系统具体实现步骤 我们知道,如果滤波器抽头数N过多,用单个查找表就不能执行全字(因为查找表位

9、宽=滤波器抽头数的数量)。在这种情况下,可以将表的地址输入位数(即滤波器抽头数N)进行降低,既利用部分表并将结果相加。如果加上流水线寄存器,这一改进并没有降低速度,但是却可以极大地减少设计规模,因为查找表的规模是随着地址空间,也就是滤波器抽头数N的增加而呈指数增加, 根据卷积和 定义16阶内积。 滤波器抽头数是16个,考虑到线性FIR滤波器的偶对称特性,只考虑8个独立滤波器抽头数,则需要一个2 8×8的表(其中指数8指的是8个滤波器抽头数, 后面的8指的是输入数据的位宽)。但是Virtex-e FPGA只能提供4输入的查找表,所以要对查找表的地址进行电路分割。将8位地址线分为高4位和

10、低4位,分别作为两个2 4×8的查找表的地址输入,从而指数倍地节省了硬件资源。 假定输入数据xn的值x0=1 10=00000001 2c,x1=-1 10=11111111 2c,x2=3 10=00000011 2c,x3=2 10=00000010 2c。(注:2c代表用二进制补码表示,最高位为符号位。) 数据校验结果:h0x0+h1x1+h2x+h3x3=2812 说明利用分布式查表算法的计算结果与直接计算结果相同,算法正确无误。 查找表(2)的查表计算结果依此类推。只是需要注意:查找表(2)的数据输入x是8位数据x4、x5、x6、x7,而不是x3、x2、x1、x0。根据系数偶对称性质。x8、x9、x10、x11查查找表(2),x12、x13、x14、x15查查找表(1)。  3 设计结果 本系统的FPGA采用Xilinx公司的Virtex-E系列中的XCV100E FPGA,使用的软件是Xilinx公司的ISE5.2i及Modelsim公司的Modelsim时序仿真工具,对FIR滤波器进行描述编程使用的是VHDL语言。 实现FIR滤波器的最上层的原理图如图4所示,输入16个8位数据data_in=1,-1,3,2,2-1,1,-1,1,-1,3,2,2,-1,1,1。 系统仿真的时序图如

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论