基于VerilogHDL语言的FIR数字滤波器设计与实现

FPGA/ASIC技术

205人已加入

描述

  引言

  数字滤波器是语音与图像处理、模式识别、雷达信号处理、频谱分析等应用中的一种基本的处理部件, 它能满足波器对幅度和相位特性的严格要求, 避免模拟滤波器所无法克服的电压漂移、温度漂移和噪声等问题。有限冲激响应(FIR)滤波器能在设计任意幅频特性的同时保证严格的线性相位特性。

  1 FIR 数字滤波器

  FIR 滤波器用当前和过去输入样值的加权和来形成它的输出, 如下所示的前馈差分方程所描述的。

  fir滤波器

  FIR 滤波器又称为移动均值滤波器, 因为任何时间点的输出均依赖于包含有最新的M个输入样值的一个窗。由于它的响应只依赖于有限个输入, FIR 滤波器对一个离散事件冲激有一个有限长非零响应, 即一个M阶FIR 滤波器对一个冲激的响应

  在M个时钟周期之后为零。

  FIR滤波器可用图1 所示的z 域块图来描述。

  其中每个标有z- 1 的方框都代表了有一个时钟周期延时的寄存器单元。这个图中标出了数据通道和必须由滤波器完成的操作。滤波器的每一级都保存了一个已延时的输入样值, 各级的输入连接和输出连接被称为抽头, 并且系数集合{hk}称为滤波器的抽头系数。一个M阶的滤波器有M+1 个抽头。通过移位寄存器用每个时钟边沿n( 时间下标) 处的数据流采样值乘以抽头, 并且求和得到输出yFIR[n]。滤波器的加法和乘法必须足够快, 在下一个时钟来到之前形成y[n]。并且在每一级中都必须测量它们的大小以适应他们数据通道的宽度。在要求精度的实际应用中, Lattice 结构可以减少有限字长的影响, 但增加了计算成本。一般的目标是尽可能快地滤波, 以达到高采样率。通过组合逻辑的最长信号通路包括M级加法和一级乘法运算。FIR 结构指定机器的每一个算术单元有限字长, 并且管理运算过程中数据流。

  fir滤波器

  2 FIR 数字滤波器设计的实现

  目前FIR 滤波器的实现方法有三种: 利用单片通用数字滤波器集成电路、DSP 器件和可编程逻辑器件实现。单片通用数字滤波器使用方便, 但由于字长和阶数的规格较少, 不能完全满足实际需要。使用DSP 器件实现虽然简单, 但由于程序顺序执行, 执行速度必然不快。FPGA/CPLD 有着规整的内部逻辑阵列和丰富的连线资源, 特别适合于数字信号处理任务, 相对于串行运算为主导的通用DSP 芯片来说, 其并行性和可扩展性更好。但长期以来, FPGA/CPLD 一直被用于系统逻辑或时序控制上, 很少有信号处理方面的应用, 其原因主要是因为在FPGA/CPLD 中缺乏实现乘法运算的有效结构。

  现在的FPGA 产品已经能够完全胜任这种任务了。其中Altera公司的Stratix 系列产品采用1.5V 内核, 0.13um 全铜工艺制造, 它除了具有以前Altera FPGA 芯片的所有特性外, 还有如下特点: 芯片内有三种RAM 块, 即512bit 容量的小RAM(M512) 、4KB 容量的标准RAM(M4K) 、512KB 的大容量RAM(MegaRAM) 。内嵌硬件乘法器和乘加结构的DSP 块, 适于实现高速信号处理; 采用全新的布线结构, 分为三种长度的行列布线, 在保证延时可预测的同时增加布线的灵活性; 增加片内终端匹配电阻, 提高信号完整性, 简化PCB 布线; 同时具有时钟管理和锁相环能力。

  FIR 滤波器的Verilog HDL 设计实例

  1、设计意图

  本例主要是在Stratix 器件内实现基本有限脉冲响应滤波器。

  FIR 的基本结构包括一系列的乘法和加法。FIR 的运算可用式( 1) 的方程描述, 现重写如下:

  fir滤波器

  x(n)表示输入样本序列, h(n)代表滤波器的系数, L 是抽头的数量。

  一个L=8 的FIR 设计如图2, 利用了输入的8 个样本。因此称之为8 抽头滤波器。该结构是有一个移位寄存器, 乘法器和加法器组成的, 可实现L=8 阶的FIR。其数据通道必须足够宽, 以适应乘法器和加法器的输出。这些采样值被编码为有限

  字长的形式, 然后通过M个寄存器并行移动。可见用一个MAC级连链就可以构成这种机器。每个寄存器提供一个单位样本内延迟。这些延迟输入与各自的系数相乘, 然后叠加得到输出。图2 所示为基于MAC 的8 阶FIR 数字滤波器结构。

  fir滤波器

  在该设计中有八个抽头, 各抽头有18 位输入和滤波器系数。由于一个DSP 块可以支持4 个18 位输入的分支, 所以设计需要2 个DSP 块。输入数据串行加载到DSP 块中, DSP 内部的移入/移出寄存器链用于产生延迟。滤波器系数从TriMatrix(tm)的ROM存储器中加载。

  fir滤波器

  2、Verilog HDL 代码编写风格

  HDL 代码编写应该具有很好的易读性和可重用性, 而自顶向下的分割方法可以帮助我们达到最佳的结果。HDL 代码在达到功能的情况下要尽可能的简洁, 尽量避免使用带有特殊库单元的实例, 因为这样会使得整个进程变得不可靠。在本设计中, 我们将设计划分成一个顶级文件和三个次级文件, 并且调用了QuartusII 中的MegaFunction 功能辅助完成整个设计。

  fir滤波器

  3、验证仿真

  完全可综合设计的一个优点就是同样的HDL 代码能够用于验证和综合。在使用HDL 代码之前必须要验证设计的功能,最好且最简单的方法就是利用验证工具, 其次是利用仿真工具作有目的的仿真。QuartusII 内部带有仿真器, 只要通过建立正确的Vector Waveform File( 向量波形文件) 就可以开始仿真了。图4 所示为QuartusII 内部仿真器得到的8 阶FIR 的脉冲响应波形。

  

  3 结论

  利用Verilog HDL 设计数字滤波器的最大优点就是可使设计更加灵活。比较硬件电路图设计, Verilog HDL 语言设计的参数可以很容易在Verilog 程序中更改, 通过综合工具的简化和综合即可以得到电路图, 其效率要高出利用卡诺图进行人工设计许多。而且编译过程也非常简单高效。优秀编码风格能够在综合过程中节省芯片使用的单元, 从而降低设计成本。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分