FIR的FPGA实现及其Quartus_与MATLAB仿真

  • 格式:pdf
  • 大小:122.06 KB
  • 文档页数:4
关键词 :FIR 数字滤波器 , 现场可编程门阵列 ( FPGA) , Quartus Ⅱ, MATLAB , 联合仿真 中图分类号 :TN911
0 引 言
数字滤波的作用是从接收信号中提取需要的信息 并抑制干扰 ( 噪声) 。数字滤波器根据单位冲击响应 h ( n) 的时间特性分为无限冲击响应 ( IIR) 数字滤波器 和有限冲击响ቤተ መጻሕፍቲ ባይዱ ( FIR) 数字滤波器两种[1] 。FIR 数字 滤波器的实现形式分为直接型 、级联型和频率取样型 3 种 。本文介绍如何利用 Altera 公司 Stratix 系列现场 可编程门阵列 ( FPGA) 芯片内部的 ROM 实现一种查找 表结构的直接型 FIR 数字滤波器 。
王旭东 ,等 :FIR 的 FPGA 实现及其 Quartus Ⅱ与 MATLAB 仿真
·信号处理技术·
按以上格式要求 ,在 MATLAB 中将仿真输入数据 以文件输出的方式输出并保存为 3 . vec 格式文件 ,即 可导入 Quartus Ⅱ中进行仿真 。 3. 2 验证 Quartus Ⅱ中的输出结果
示 ,输出数据的值以十六进制表示 ;信号的排列顺序与 3 . vwf 波形文件中的顺序一致 。
以数 据 文 件 输 入 的 方 式 将 此 3 . tbl 文 件 中 的 Quartus Ⅱ仿真输出信号的数值导入 MATLAB 中 ,并进 行频谱分析 ,即可验证 FIR 数字滤波器设计正确与否 , 并可分析其性能优劣 。
算速度 、节省逻辑单元 ,可将卷积运算转换成加减法运
算[2] 。下面以 4 阶 、2 位数据精度 FIR 数字滤波器加
以 说 明 。设 FIR 数 字 滤 波 器 的 系 数 为 : h ( 1 ) = 0 1 ,
h (2) = 11 , h (3) = 10 , h (4) = 11 ;输入数据为 : x (1) =
11 , x (2) = 00 , x (3) = 10 , x (4) = 01 ;则 FIR 数字滤波器
的输出为 :
收稿日期 : 2004201206 ; 修回日期 : 2004202220
y (4) = [ x (1) h (1) ] + [ x (2) h (2) ] + [ x (3) h (3) ] + [ x (4) h (4) ]
一个整体 pattern / / 信号起始 0 > 0 / / 大于号 “( > ”) 前的数值代表时间标尺 “, > ”后的
3. 1 产生仿真向量文件
值为信号数值
在 MATLAB 中生成 Quartus Ⅱ仿真所需的输入文 件 3 . vec 。Quartus Ⅱ仿 真 文 件 可 以 有 两 种 格 式 , 即
本文的输入数据是频率分别为 23 Hz 和 58 Hz 的 正弦波 ,FIR 低通滤波器的截止频率为 40 Hz 。输入数 据的时域及经理想 FIR 低通滤波器后的频域理论值 (MATLAB 输出结果) 与 FPGA 实现的 FIR 低通滤波的 结果 (Quartus Ⅱ输出) 的对比如图 5~图 6 所示 。
图 3 顶层模块
3 Quartus Ⅱ与 MATLAB 联合仿真
STOP 54400 ; / / 仿真终止时间 RADIX DEC ; / / DEC 表示采用十进制数据格式
在将设计文件加载到 FPGA 之前 ,为了验证设计 的正确性 ,必须对设计进行全面充分的仿真 。Altera 公 司提供的 Quartus Ⅱ软件除了具有强大的编译综合功 能外 ,还提供了一定的波形仿真功能[4] 。其输入和输 出均以波形的形式给出 ,难以对结果进行定量分析 。 下面着重介绍利用 MathWorks 公司强大的数值计算与 分析软件 MATLAB 及 Quartus Ⅱ实现联合仿真 ,可大大 加强 Quartus Ⅱ的仿真功能 ,提高设计效率 。
INTERVAL 10 ; / / 下面 4 行是一个整体 , INTERVAL 后的 数值为 0 、1 重复周期的时间
inputs g- clk ; / / 输入信号标识 pattern / / 信号开始 0 1 ; / / 信号数值 inputs xin[12. . 1 ] ; / / 从此行至下一个 inputs 前的多行为
3 . tbl 文件如下 :
图 4 仿真结果的波形
PATTERN 0. 0 > 0 = 00000 170. 0 > 1 = 00000 1360. 0 > 0 = 00041 54230. 0 > 1 = 3EC5E 54740. 0 > X = X
;
其格式与 3 . vec 文件类似 ,不同的是输入和输出 信号的数值被“ = ”号分隔开了 ;时间标尺以十进制表
340 > 4052 / / 负数必须以补码形式表示 680 > 1555 / / 中间各行结尾不能加分号
3 . vwf 格式和 3 . vec 格式 。前者是在 Quartus Ⅱ中通 过波形编辑器生成的 。当仿真输入数据复杂时 ,用波 形输入的方法将难以胜任 ,特别是在数字信号处理领 域 ,大多数仿真输入数据都要叠加噪声 ,采用波形文件 的输入方式是不现实的 。后者是有一定格式要求的文 本文件输入方式 ,可以利用任何文本编辑器产生 ,只要 符合 Quartus Ⅱ对仿真文件的格式要求即可 。为了加 强数据处理能力 ,本文选用 MATLAB 软件对 3 . vec 文
·49 ·
© 1994-2009 China Academic Journal Electronic Publishing House. All rights reserved.
·信号处理技术·
电子工程师
2004 年 5 月
图 2 系统原理框图
当 FIR 数字滤波器阶数增大时 ,ROM 的存储容量
( EDA) 功能 、提高 FPGA 设计效率具有普遍意义 。
参 考 文 献
[1 ] 俞卞章. 数字信号处理. 西安 :西北工业大学出版社 , 1993 [2 ] 赵雅兴. FPGA 原理 、设计与应用. 天津 :天津大学出版社 ,
1999 [3 ] Kevin Skahill. 可编程逻辑系统的 VHDL 设计技术. 朱明程 ,
其运算过程为 :
由此运算过程可看出 :运算过程中第 1 行 4 个数 据横向相加得 P1 = 01 + 00 + 00 + 11 = 100 ;第 2 行 4 个 数据横向相加得 P2 = 01 + 00 + 10 + 00 = 011 。将两个 数据错位相加后得结果 1010 。而 4 个乘法的纵向结果 相加得 011 + 000 + 100 + 011 = 1010 ,与 P1 、P2 的错位 相加结果一致 。通过观察发现 ,第 1 行中间结果是 x ( n) 的各最低比特位与 h ( n) 相乘的结果 。因 x ( n) 是 数字信号 ,其最低位为 0 或 1 , 所以与 h ( n) 相乘的结 果非 0 ,即为 h ( n) 。同理 , 第 2 行中间结果是由 x ( n) 的各倒数第 2 比特位与 h ( n) 相乘得到的 。上例中 ,由 所有 x ( n) ( x (1) , x (2) , x (3) , x (4) ) 的最低比特位构 成的值为 1001 ,则 P1 = h (1) + h (4) 。X ( n) 的所有倒 数第 2 比特位构成的值为 1010 , 则 P2 = h (1) + h (3) 。 再将 P1 与 P2 错 1 位相加 ,即可得到卷积结果 ,从而实 现了将卷积运算转换成加法运算 。
以 2 的指数形式增长 。因此 ,本文采用一个 ROM 块分 时查表的方法来降低对 ROM 存储容量的要求 。用原 理图与甚高速集成电路硬件描述语言 (VHSI2VHDL) 相 结合的输入方式[3] ,在 Quartus Ⅱ中进行设计 ,其顶层 模块如图 3 所示 。
采用 16 阶 FIR 数字滤波器 ,系统由控制 、输入数 据移位 、地址发生器 、ROM、运算等模块组成 。FIR 数 字滤波器系数以及由这些系数演算出的 ROM 初始化 数据文件 3 . mif 通过 MATLAB 计算并生成 。
【摘 要】 利用 Altera 公司的 Stratix 系列芯片内部的 ROM 实现了一种基于查找表结构的有限冲 击响应 ( FIR) 数字滤波器 ,从而将卷积运算变换成一种查表后的加法运算 ,提高了运算速度 ,节省了逻 辑单元 ;并且利用 Altera 公司的 FPGA 开发软件 Quartus Ⅱ与 MathWorks 公司的 MATLAB 软件实现电子 设计自动化 ( EDA) 应用中的联合仿真 ,从而提高了现场可编程门阵列 ( FPGA) 设计的效率 ,使得 Quartus Ⅱ的波形仿真功能更加强大 ;利用最新版本的 Quartus Ⅱ3. 0 还可以将波形文件转换成 Testbench 文件 导入到专业仿真软件例如 ModelSim 中进行仿真 。
OUTPUTS z[18. . 1 ] ; / / 输出信号标识
·50 ·
© 1994-2009 China Academic Journal Electronic Publishing House. All rights reserved.
第 30 卷第 5 期
2 用 FPGA 实现 FIR 数字滤波器
对应于上例 ,滤波器的阶数为 4 ,若建立一张 24 = 16个存储单元的表 ,其地址位宽度为4 ,由 x (1) 、 x ( 2) 、x ( 3) 、x ( 4) 的同一位置的比特位构成 。利用 Stratix 器件中的 ROM 建立这样的查找表是很容易的 , 只要将 ROM 的初始数据写到 3 . mif 文件中 ,在 Quartus Ⅱ中将其指向对应的 ROM 即可 。系统的原理性框图 如图 2 所示 。