DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1352|回复: 0
打印 上一主题 下一主题

[待整理] 基于VerilogHDL的FIR数字滤波器设计与仿真

[复制链接]
跳转到指定楼层
楼主
发表于 2014-10-12 16:45:56 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
引言

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

1 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 结构指定机器的每一个算术单元有限字长, 并且管理运算过程中数据流。



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) 的方程描述, 现重写如下:


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

一个L=8 的FIR 设计如图2, 利用了输入的8 个样本。因此称之为8 抽头滤波器。该结构是有一个移位寄存器, 乘法器和加法器组成的, 可实现L=8 阶的FIR。其数据通道必须足够宽, 以适应乘法器和加法器的输出。这些采样值被编码为有限
字长的形式, 然后通过M个寄存器并行移动。可见用一个MAC级连链就可以构成这种机器。每个寄存器提供一个单位样本内延迟。这些延迟输入与各自的系数相乘, 然后叠加得到输出。图2 所示为基于MAC 的8 阶FIR 数字滤波器结构。



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



2、Verilog HDL 代码编写风格


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



3、验证仿真


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




3 结论


利用Verilog HDL 设计数字滤波器的最大优点就是可使设计更加灵活。比较硬件电路图设计, Verilog HDL 语言设计的参数可以很容易在Verilog 程序中更改, 通过综合工具的简化和综合即可以得到电路图, 其效率要高出利用卡诺图进行人工设计许多。而且编译过程也非常简单高效。优秀编码风格能够在综合过程中节省芯片使用的单元, 从而降低设计成本。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-7-31 05:49 , 耗时 0.111565 秒, 21 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表