基于FPGA的FIR滤波器设计资料.pdf
本科生毕业论文(设计)题目:基于 FPGA 的 FIR 滤波器设计 学 院 电子信息工程学院 学科门类 工 学 专 业 电子信息工程 学 号 姓 名 指导教师 2015 年 05 月 06 日 摘 要 随着数字技术的发展,数字滤波器广泛应用于语音与图像处理、模式识别、雷达信号处理、频谱分析等领域,它具有精度高、灵活性大等突出特点,而现场可编程门阵列器件(FPGA)有着规整的内部逻辑阵列和丰富的连线资源,特别适合于数字信号处理任务,通过FPGA实现FIR数字滤波具有实时性高、处理速度快、精度高的特点。本文研究的是基于FPGA实现一个16阶的FIR数字低通滤波器的设计。本次设计首先利用MATLAB中滤波器设计工具FDAtool工具设计FIR滤波器系数,再利用Matlab中的Simulink库文件下的DSP Builder库中的各个模块搭建FIR滤波器系统,然后在Simulink里进行了仿真,并编译生成VHDL语言,再通过Quartus II软件对生成的VHDL程序进行编译和仿真,并利用Matlab对仿真结果进行了分析,证明所设计的FIR滤波器功能的正确性,最后通过硬件实现时。本次硬件设计中,采用Altera公司的FPGA器件作为核心器件,此外,由于整个系统的输入输出全部是数字信号,因此需要添加AD(模数)转换模块和DA(数模)转换模块。关键词:FPGA;FIR滤波器;FDAtool;Simulink;VHDL Abstract With the rapid development of digital technology,digital filter had widely used in voice and image processing and model recognizing and radar signal processing and frequency analysis filed and so on.It is very precise and flexible.There are regular logical array and rich wire resource in FPGA.It is very suitable for digital signal processing.And it is very good for designing digital filter by using FPGA.In this paper,this design is the 16 order FIR low-pass filter based on FPGA.First,we use FDAtool to design the value of filter.Then,we build up the filter system by using DSP Builder.And then we simulate this system to verify it s validity.During the hardware design,what we use core device is from Altera company.In addition,we need add AD and DA model for the system because the input and output of this system is digital signal.Key Words:FPGA;FIR filter;FDAtool;Simulink;VHDL 目 录 摘要.I Abstract.II 1.引言.1 1.1 研究背景及意义.1 1.2 国内外研究现状.1 1.3 本论文的研究内容及主要工作.2 2.FIR 数字滤波器设计.2 2.1 数字滤波器基础.2 2.1.1 FIR 滤波器简介.2 2.1.2 FIR 数字滤波器的结构.3 2.2 FIR 数字滤波器设计方法.4 2.2.1 窗函数法.4 2.2.2 频率采样法.5 2.2.3 等波纹最佳逼近法.6 3.基于 FPGA 的 FIR 滤波器设计.7 3.1 基于 Matlab 的 FIR 数字低通滤波器抽头系数的提取.7 3.1.1 基于 Matlab 的 FIR 滤波器系数计算.7 3.2 DSP Builder 搭建 FIR 模型.12 3.2.1 DSP Builder 及其设计流程.12 3.2 利用 DSP Builder 设计 FIR 滤波器.12 3.2.1 简单 3 阶常系数 FIR 滤波器的设计.13 3.2.2 16 阶 FIR 滤波器的设计.16 4.FIR 滤波器的硬件实现.19 4.1 系统硬件.19 4.2 硬件调试.23 4.3 数据误差分析.25 5.总结.26 参考文献.27 致谢.28 1.引言 滤波技术是非常重要的一门技术,它在信号的分析和处理过程中都是必不可少的部分。而当今由于数字信号的发展,使得滤波技术更是得到进一步发展,也就产生了数字滤波器,数字滤波器是现代信号处理研究和发展不可或缺的因素,数字滤波器相对模拟滤波器精度高,灵活性大,可靠性好等优点1。此外,由于数字信号的发展,它不仅能够处理数字信号,而且能够处理模拟信号。在处理模拟信号时,可以通过 AD 和 DA 转换,在信号形式上进行匹配,也就达到了数字滤波器对模拟信号的滤波的功能。1.1 研究背景及意义 在现代通信信号处理领域中,随着各种精密计算和快速计算的发展对信号处理的实时性、快速性的要求越来越高。以往的模拟滤波器无法克服电压漂移、温度漂移和噪声等问题,从而带来了许多误差和不稳定因素。而数字滤波器具有稳定性高、精度高、设计灵活、实现方便等突出优点。随着数字技术的发展,数字滤波器广泛应用于语音与图像处理、模式识别、雷达信号处理、频谱分析等领域,它有精度高、灵活性大等突出特点。FPGA 元器件在高速并行处理和数据传输中有独特优势,FPGA 正在前端信号处理中越来越多地代替 ASIC 和 DSP。我们需要的就是这种设计周期短,功能密度高,重组时间短的元器件2。1.2 国内外研究现状 在国内外的研究中,FIR 滤波器设计中的乘法算法有并行乘法、串行乘法和采用分布式算法的乘法3。其中,分布式算法既可以全并行实现,又可以全串行实现,还可以串并行结合实现,因此是当今研究的主要方法。实现 FIR 滤波器,主要有软件实现和硬件两种方法来实现。软件实现方法也就是在计算机上通过编程来实现,这种方式简单,可移植性高。硬件实现即是设计专门的数字滤波硬件来实现滤波,可以使用 DSP 处理器实现,也可以采用固定功能的专用信号处理器来实现。但是在当今,由于大规模集成电路的发展,使可编程的集成电路成为一种新的方案,采用现场可编程门阵列 FPGA 来实现 FIR 数字滤波器,可以利用 FPGA 设计的产品具有规模小、速度快、重量轻、可靠性高、成本低等优点,既能兼顾 ASIC 器件的实时性、又具有 DSP 处理器的灵活性。1.3 本论文的研究内容及主要工作 本论文研究的是 FIR 低通数字滤波器的研究与设计以及硬件实现的方法,具体内容分为五节:第一部分引言主要介绍了本课题的背景及研究意义、国内外现状。第二部分主要介绍了 FIR 数字滤波器的简介以及线性相位 FIR 滤波器的结构和设计方法。第三部分首先介绍如何利用 Matlab 制定设计指标,提取 16 阶 FIR 低通数字滤波器的抽头数并进行量化,然后利用 DSP Builder 设计滤波器模型,最后生成 VHDL 语言并利用Quartus II 软件进行综合系统仿真和验证。第四部分主要介绍 AD(模数)和 DA(数模)转换部分电路和原理,以及如何利用硬件实现 FIR 滤波器。第五部分总结本次设计。2.FIR 数字滤波器设计 2.1 数字滤波器基础 所谓数字滤波器,是指输入、输出均为数字信号,通过数值运算来滤除某些频率成分的数字滤波器件或者程序。数字滤波器按照不同的分类方法有许多种类,但总的可以分为两大类:经典滤波器和现代滤波器。本文做研究的属于经典滤波器范畴,经典滤波器从滤波特性上可分为低通、高通、带通、带阻等滤波器。数字滤波器从实现的网络结构或者从单位脉冲响应长度分类,可以分为无限长单位脉冲响应(IIR)滤波器和有限长单位脉冲响应(FIR)滤波器4。2.1.1 FIR 滤波器简介 FIR 是 Finite Impulse Response 是缩写,是指有限长脉冲响应,也即指经过 FIR 系统的单位脉冲响应是一个有限长的序列,H(z)为该数字滤波系统的单位脉冲响应 h(n)的 Z 变换,即:nnznhzH)()((2-1)若 h(n)为无限长序列,则得到的数字滤波器为 IIR 数字滤波器,又称递归滤波器;反之,若 h(n)为有限长序列,则得到的数字滤波器为 FIR 滤波器,也称非递归滤波器。一个线形时不变因果滤波器可表示为:10)()(NnnznhzH (2-2)其中 N 为 h(n)的长度,即滤波器的长度。FIR 滤波器可以把相位特性设计成线性,因此,FIR 数字滤波器在信号无失真传输、数据通信、图像传输与处理、语音信号处理等有线性相位要求的领域应用广泛。2.1.2 FIR 数字滤波器的结构 由于 FIR 数字滤波器实现算法的不同,我们可以把 FIR 滤波器的结构划分为直接型、级联型、频率采样型和快速卷积型四种基本形式6。(1)直接型 按照)(zH或者卷积公式直接可以画出结构图如图 2-1 所示,这种结构我们称之为直接型结构网络或者卷积型结构。这是一种最简单的 FIR 滤波器结构,即方便理解,也方便搭建其模型。h(0)h(1)h(2)h(N-2)h(N-1)1z1z1zy(n)图 2-1 直接型结构(2)级联型 对)(zH进行因式分解,并将共轭成对的零点放在一起,形成一个系数为实数的二阶形式。FIR 数字滤波器的级联型结构如图 2-2 所示。其系统函数)(zH可以表示为:LlzazahzH1212111)1()0()((2-3)x(n)1z1z1z1z1z1z112112221L2Lh(0)y(n)图 2-2 级联型结构 级联型的最大特点是可以分别独立调整每个子系统的零点之值,当需要精确控制滤波器的零点位置时,往往采用这种结构。2.2 FIR 数字滤波器设计方法 FIR 数字滤波器的设计方法主要有三种:窗函数法、频率采样法和等波纹逼近法6。2.2.1 窗函数法 一个理想低通滤波器的幅频特性如图 2-3 所示。)(jwdeH的表达式为:1,()0,cjwdcwwHeww (2-4)w)(jwdeHcwcw 图 2-3 理想低通滤波器频谱图 对)(jwdeH进行离散时间傅里叶逆变换,得:dweeHnhjwnjwdd)(21)(ccwwcjwnnnwdwe)sin(21 (2-5)由于该系统是非因果的,为了能够得到一个可实现的系统,可以将)(nhd截取一部分,并顺序右移,使之成为一个因果的有限长序列。这种方法就好比在时域打开一个窗口一样,因而称为窗函数法。常见的时窗函数有矩形窗、汉宁窗、汉明窗、布莱克曼窗、凯塞窗等7,常见的六种窗函数特性如表 2-1 所示。表 2-1 六种窗函数参数表的比较 窗函数 窗谱性能指标 加窗后滤波器性能指标 旁瓣峰值/db 主瓣宽度/(2/N)过滤宽度/(2/N)阻带最小衰减/db 矩形窗-13 2 0.9-21 巴特列特-25 4 2.1-25 汉宁窗-31 4 3.1-44 海明窗-41 4 3.3-53 布拉克曼窗-57 6 5.5-74 凯泽窗-57 5-80 2.2.2 频率采样法 频率采样法是一种基于频率域抽样来逼近所要设计的FIR 滤波器的频率特性的一种方法9。频率设计法的基本设计流程如图 2-4 所示。)(jwdeH确定2/()()jNddHeHk()()dh nIDFT Hn()()H zZT h n抽样N点离散傅里叶逆变换 图 2-4 频率设计法流程 为了保证)(zH具有线性相位条件,其单位采样响应)(nh是实序列,且满足条件)1()(nNhnh。对于)(nh偶对称的情况来说,线性相位条件如下:)()()(wjgjwdewHeH (2-6)wNw)1(21)((2-7)令Nkw/2代入式(2-6)、(2-7),得到)()()(kjgdekHkH (2-8)式中,NkwggwHkH/2|)()(,Nkwwk/2|)()(,)()(kNHkHgg,N 为奇数 )()(kNHkHgg,N 为偶数。过渡带的采样点个数m与所设计的滤波器的阻带最小衰减s有关,具体如表2-2所示。此外过渡带的带宽与采样点数 m 之间的关系为:NmB/)1(2 (2-9)表 2-2 过渡带采样点数与阻带最小衰减的关系 m 1 2 3 4 s/dB 20 44-54 65-75 85-95 2.2.3 等波纹最佳逼近法 等波纹最佳逼近法是根据最大误差最小化的设计原则。等波纹逼近法所设计的 FIR 滤波器的幅度特性在通带和阻带范围内是等波纹的,且可以分别独立控制通带和阻带的波纹幅度,并且在滤波器长度给定的情况下,加权的幅度波纹误差最小10。定义加权幅度误差函数为:)()()()(wHwHwWwed (2-10)式中)(wW为幅度误差加权函数,用来控制不同频带的幅度逼近误差。一般地,在要求逼近精度高的频带,)(wW取值大,而要求逼近误差精度低的频带,)(wW取值小。对于 FIR数字低通滤波器,常取:wwkwwkwWpp,0,/)(12 (2-11)式中,1和2分别为滤波器设计指标中通带和阻带的振荡波纹幅度,k 为正的系数。滤波器的通带最大衰减p和阻带最小衰减s与通带和阻带的振荡波纹幅度1和2的换算关系为:11011020/20/1pp (2-12)20/210s (2-13)在等波纹逼近法的设计中,如果能够找到滤波器的系数)(nh使得在通带,0pw和阻带 ,sw频带内的最大绝对值幅度误差)(we为最小,就能够很好的实现滤波器的设计,而找到该系数的算法就是基于交替定理的雷米兹交替算法。3.基于 FPGA 的 FIR 滤波器设计 本章为全文的核心内容,首先确定基于 Matlab 的 FIR 数字低通滤波器的指标系数,再利用 DSP Builder 搭建 FIR 滤波器结构,编译生成 VHDL 硬件语言进行仿真,最后实现硬件系统以及硬件测试。使用 FPGA 器件设计数字电路,不仅使得电路简化,而且可以减少所设计系统的体积,增加系统的可靠性,从而较少开发费用。它们无需花费大量时间和精力,避免了投资风险,成为电子器件行业中发展最快的一个系列11。3.1 基于 Matlab 的 FIR 数字低通滤波器抽头系数的提取 FIR 滤波器的系数也即 FIR 滤波器系统的冲击响应系数,想要得到 FIR 滤波器系数可以利用 Matlab 中的 FDAtool 工具进行设计,然后搭建 MatlabFIR 滤波器系统进行仿真。3.1.1 基于 Matlab 的 FIR 滤波器系数计算 在 Matlab 命令编辑窗口输入 FdAtool 指令,再点回车即可打开 Filter Design&Analysis Tool 窗口。Fdatoold 的界面有两大部分,一部分是 Design filter,这部分可以设置滤波器的各种参数,另一部分是滤波器的特性区,这部分可以显示滤波器的各种特性图12。Design filter 部分主要分为:(1)Response Type(响应类型)选项:Response Type 选项包括 Lowpass(低通)、Highpass(高通)、Bandpass(带通)、Bandstop(带阻)和特殊的滤波器。在本次设计中,该选项中选择 Lowpass 选项。(2)Design Method(设计方法)选项:Design Method选项包括 IIR 滤波器和 FIR 滤波器,本次设计的是 FIR 滤波器,而设计该滤波器使用方法是窗函数法,因此,我们选择 FIR 滤波器的 Window 窗函数法进行设计。选定窗函数法后,会在右侧出现 Options 区域,这部分区域是用来设置窗函数的相关参数,其中窗函数的类型选择 Kaiser 窗,并设置 Beta 为:0.5。(3)Filter Order(滤波器阶数)选项:Filter Order 选项是定义滤波器的阶数,包括 Specify order 和 Minimum order。Specify order 是指滤波器的阶数(specify ordern-1,n 为滤波器阶数),本次设计是 16 阶滤波器,所以选定 Specify order 并填入 15。(4)Frequency Specifications(频率定义)选项:Frequency Specifications 选项主要包括采样频率 Fs 和通带频率以及截止频率。由于我们所设计的是低通滤波器,因此我们不需要通带频率这个参数,这里的采样频率 Fs 我们填为 80KHz,截止频率填为 Fc=5KHz。图 3-1 FDAtool 工具 上述的参数设计结束后,点击 Design Filter 按钮,就可以把我们所需要的 FIR 滤波器的参数计算出来。并且在 FDAtool 特性区可以看到所设计的滤波器的响应特性,如幅频响应(如图 3-2)、相频响应(如图 3-3)、冲激响应(如图 3-4)等等其他响应特性图。该滤波器各特性图如下:图 3-2 幅频响应曲线 图 3-3 相频响应曲线 图 3-4 冲激响应 然后,我们可以把刚刚设计好的滤波器系数进行导出,我们选择 Export 打开 Export对话框(如图 3-5),然后可将设计好的滤波器系数导出来,我们可以通过 Command Window查看该系数。图 3-5 冲激系数及其输出对话框 在 Command Window 命令编辑区输入 Num 可得到 FDAtool 工具的计算结果,结果如 图 3-6 所示。图 3-6 输出在 Matlab 的冲激系数 由于 FDAtool 工具导出的系数是很小的数,不方便我们处理,因此,我们将改系数进行放大,并进行整数化操作。操作后可得到滤波器整数化的系数为7 23 41 60 77 92 103 109 109 103 92 77 60 41 23 7,如图 3-7 所示:图 3-7 整数化后的冲激系数 3.2 DSP Builder 搭建 FIR 模型 3.2.1 DSP Builder及其设计流程 DSP Builder 是一个系统级(或算法级)设计工具,它架构在多个软件工具之上,并把系统级和 RTL 级两个设计领域的设计工具连接起来,最大程度地发挥了两种工具的优势。由于在 FPGA 上设计一个 DSP 模块的复杂性,设计的性能(包括面积、速度、可靠性、设计周期)对于不同的应用目标将有不同的要求,涉及的软件工具也不仅仅是Simulink 和Quartus II,DSP Builder 针对不同情况提供了两套设计流程,即自动流程和手动流程。图3-8 是利用 DSP Builder 进行 DSP 设计的流程框图13。图 3-8 DSP Builder 设计流程 3.2 利用 DSP Builder设计 FIR 滤波器 使用 DSP Builder 可以方便地在图形化环境中设计 FIR 数字滤波器,而且滤波器系数的计算可以借助 Matlab 强大的计算能力和现成的滤波器设计工具来完成。3.2.1 简单 3 阶常系数 FIR 滤波器的设计 在此用以下示例来说明利用 DSP Builder 设计滤波器的整个设计过程14。假定一个 3 阶的 FIR 滤波器,其可以表示为:h(n)Cq(h(0)x(n)h(1)x(n1)h(2)x(n2)h(3)x(n3)其中:h(0)=63,h(1)=127,h(2)=127,h(3)=63,是量化时附加的因子。这里采用直接 I 型来实现该 FIR 滤波器。设计好的 3 阶直接 I 型 FIR 滤波器模型图可以参见图 3-9。图 3-9 3 阶 FIR 滤波器 图中模块的参数作如下设置:xin 模块:(Altbus)库:Altera DSP Builder 中 Bus Manipulation 库 参数“Bus Type”设为“signed Integer”参数“Node Type”设为“Input port”参数“number of bits”设为“8”yout 模块:(Altbus)库:Altera DSP Builder 中 Bus Manipulation 库 参数“Bus Type”设为“signed Integer”参数“Node Type”设为“Output port”参数“number of bits”设为“8”Parallel Adder Subtractor 模块:(Parallel Adder Subtractor)库:Altera DSP Builder 中 Arithmetic 库“Add(+)Sub(-)”设为“+”Delay1、Delay2、Delay3 模块:(Delay)库:Altera DSP Builder 中 Storage 库 参数“Depth”设为“1”参数“Clock Phase Selection”设为“1”h0 模块:(Gain)库:Altera DSP Builder 中 Arithemtic 库 参数“Gain Value”设为“63”参数“Map Gain Value to Bus Type”设为“Signed Integer”参数“Gate Value number of bits”设为“8”参数“Number of Pipeline Levels”设为“0”h1 模块:(Gain)参数“Gain Value”设为“127”其余同 h0 模块 h2 模块:(Gain)参数“Gain Value”设为“127”其余同 h0 模块 h3 模块:(Gain)参数“Gain Value”设为“63”其余同 h0 模块 由于 FIR 滤波器的系数已经给定,是一个常数,从图中看到,DSP Builder 中可以用Gain(增益)模块来实现的运算,用延时 Delay 模块来实现输入信号序列的延时。设计完 3 阶 FIR 滤波器模型,就可以添加 Simulink 模块进行仿真了,如图 3-10 所示。图 3-10 带仿真模块的 3 阶 FIR 滤波器 新增的仿真模块的参数作如下设置:Chirp Signal 模块:(Chirp Signal)库:Simulink 中 Sources 库 参数“Initial Frequency(Hz)”设为“0.1”参数“Target time”设为“10”参数“Frequency at target time(Hz)”设为“1”参数“Interpret vectors parameters as 1-D”选中 Gain 模块:(Gain)库:Simulink 中 Math Operations 库 参数“Gain”设为“127”参数“Multiplication”设为“Element wise(K.*u)”Scope 模块:(Scope)库:Simulink 中 sinks 库 参数“Number of Axes”为“2”其中,Chirp Signal 模块为线性调频信号发生模块,生成一个线性调频信号 0.1Hz1Hz。在该模型仿真中,使用默认的仿真参数。仿真结果如图 3-11 所示。显然,一个线性调频信号通过 3 阶 FIR 滤波器后幅度发生了变化,频率较高部分的幅度被衰减了。图 3-11 FIR 滤波器仿真结果 3.2.2 16 阶 FIR 滤波器的设计 按照上节滤波器的设计流程,本节可设计 16 阶 FIR 滤波器,根据前面利用 Matlab 中的 FDAtool 工具得到的 FIR 滤波器系数进行设计,设计图如图 3-12 所示。Signal CompilerScope+r+Parallel Adder Subtractoro19:0Outputi8:0Input1dr7Gain9dr109Gain8dr103Gain7dr92Gain6dr77Gain5dr60Gain4dr41Gain3dr23Gain2dr23Gain16dr41Gain15dr60Gain14dr77Gain13dr92Gain12dr103Gain11dr109Gain10dr7Gain1-K-Gainz-1Delay9z-1Delay8z-1Delay7z-1Delay6z-1Delay5z-1Delay4z-1Delay3z-1Delay2z-1Delay14z-1Delay13z-1Delay12z-1Delay11z-1Delay10z-1Delay1z-1DelayChirp Signal 图 3-12 16 阶 FIR 滤波器结构 由图可以看出,此系统是按照 FIR 滤波器的直接型结构进行搭建的,主要包括延时器、乘法器和加法器。其输入信号是一个 9 位的数字信号,经过系统之后,得到的输出信号是一个 20 位的数字信号。经过 Simulink 仿真后得到仿真结果,仿真结果图如图 3-13 所示。图 3-13 仿真结果 从仿真结果可以看出,高频的信号不能通过该系统而已经被滤除,只有低于截止频率一下的信号才可以输出,但是由于滤波的阶数有限,所以效果不是特别明显,但是基本上能够实现滤波功能。下一步将该模型编译后生成 VHDL 语言,然后在 Quartus II 软件中进行仿真。图 3-14 编译生成 VHDL 语言 打开 Quartus II 软件,调入刚刚生成的 VHDL 语言的工程,先进行编译,编译通过后,然后利用 Quartus II 中的 Simulation Waveforms 进行仿真,首先设置时钟信号为 50ns,复位 信号为高电平,输入信号为一个无符号型的序列,输出信号的为无符号型数据,存盘后进行仿真,仿真结果如图 3-15 所示。图 3-15 Quartus II 仿真结果 从上图可以看出,给定时钟信号后,给一串序列作为输人,然后就可以在得到输出,该输出信号也为一串序列,这串序列也就是卷积得到的结果。为了验证其正确性,我们利用 Matlab 进行验证,打开 Matlab 后,在其 Command Window 中利用卷积函数进行运算来验证上述结果是否正确,其卷积结果如图 3-16 所示。图 3-16 Matlab 卷积结果 从上图可以看出,利用 Matlab 中卷积函数的运算的结果和 Quartus II 对 FIR 滤波器仿真的结果是完全一样,因此,可以断定此次设计的滤波器是正确的,接下来就是要进行硬件实现。4.FIR 滤波器的硬件实现 4.1 系统硬件 前面已经设计好 FIR 滤波器系统,并且都已经仿真验证了其系统的正确性,接下来就要进行硬件电路的设计。由于我们是对模拟信号进行滤波,于是,我们添加了 AD 和 DA转换电路,这可将模拟信号进行数字化,然后再由 FIR 滤波器系统处理,得到的输出仍是数字信号,再加上 DA 转换电路就可以将该数字信号转换成模拟信号。硬件实现框图如图4-1 所示。图 4-1 硬件实现框图 硬件系统主要由 FPGA、JTAG、A/D 转换和 D/A 转换四部分组成。本次硬件部分的核心芯片 FPGA 是 Altera 公司的 Cyclone 系列的 EP1C3T144C8,AD 转换芯片选择的是TLC549,DA 转换芯片选择的是 DAC7512。各部分硬件如下:1.FPGA 芯片 图 4-2 FPGA 芯片 FPGA JATG 模拟信号 A/D转换 D/A转换 模拟信号 2.JTAG 下载 JTAG 是英文 Joint Test Action Group(联合测试行为组织)的词头字母的简写,该组织成立于 1985 年,是由几家主要的电子制造商发起制订的 PCB 和 IC 测试标准。JTAG 建议于 1990 年被 IEEE 批准为 IEEE1149.1-1990 测试访问端口和边界扫描结构标准。JTAG 主要应用于:电路的边界扫描测试和可编程芯片的在线系统编程。JTAG 下载口如图 4-3 所示。图 4-3 JTAG 下载口 3.AD 转换 本次使用的AD转换芯片TLC549有一个片内的4MHz系统时钟,该时钟与I/O CLOCK是独立工作的,该时钟用于片内的系统控制,包括提供转换时的时钟,TLC549 芯片有一个模拟输入端口,3 态的数据串行输出接口可以方便的和微处理器或外围设备连接。TLC549 只需要使用时钟(I/O CLOCK)和芯片选择信号(CS)来控制数据,转换输出是8 位串行输出,最大的时钟(I/O CLOCK)输入为 1.1MHz。在图上能看到 I/O CLOCK 那有一段标注为“Dont Care”,该段是转换时间段,在该段时间内的时钟就是由内部时钟提供。图 4-4 TLC549 芯片 TLC549 转换时序如下图:TLC549 VCC REF+DATA OUT CS I/O CLOCK ANALOG IN REF-GND SOT-8 1 2 3 4 8 7 6 5 测试时钟 TCK 测试数据串行输出 TDO 测试模式选择 TMS 电源 VCC 测试数据串行输入 TDI GND 接地 VTref 电源 nSRST 目标系统复位信号 nTRST 测试系统复位信号 GND 接地 图 4-5 AD 转换时序图 4.DA 转换 DAC7512 是一种低功耗,12 位缓冲电压输出数字到模拟转换器(DAC)。其内置的精密输出放大器允许轨到轨(即最大输出可达到参考电压)输出摆幅。DAC7512 采用多功能三线串行接口,运行在高达 30MHz 的时钟速率,并与标准的 SPI,QSPI,微丝和 DSP的接口兼容。DAC7512 的 SOT-23-6 封装的引脚图如下:图 4-6 DAC7512 芯片 DAC7512 采用三线制(SYNC,SCLK 及 DIN)串行接口,其串行写操作时序如下图所示:图 4-7 DA 转换时序图 写操作开始前,SYNC 要置低。DIN的数据在串行时钟 SCLK 的下降沿依次移入DAC7512的 16位输入数据寄存器(DAC 是在下降沿的时候采数据,所以我们应该在上升沿的时候把数据发出)。输入数据寄存器格式(输入的数据被装到这个寄存器里)如下:其中第 12 位和第 13 位是模式控制位,模式如表 4-1 所示。表 4-1:DA 转换芯片模式选择 DB13 DB12 操作模式 0 0 正常模式 0 1 输出 1K 接地 1 0 输出 100K 接地 1 1 高阻 在此次设计中选择正常模式,因此 DB13 和 DB12 均为 0。DAC7512 的输入数据寄存器宽度为 16 位,其中 DB15、DB14 是空闲位,DB13、DB12是工作模式选择位、DB11DB0 是数据位。器件内部带有上电复位电路。上电后,寄存器置 0,所以 DAC7512 处于正常工作模式,模拟输出电压为0V。输入数字量与输出模拟量的对应关系如下:Vout=VDD*D/4096 其中 D 为输入数字量(DB11DB0 是数据位),4096 是 2 的 12 次方(因为数据有效位就是后 12 位),VDD就是 DAC7512 的电源电压,也是其参考电压。4.2 硬件调试 将程序编写好,设置好相关参数,然后将程序下载到 FPGA 芯片中,然后利用实验室的信号发生器和示波器进行测试。其中,由于 AD 转换芯片只能输入正值,因此,为了便于 AD 芯片转换数据,我们将信号发生器的输入信号调节为向上偏移,偏移量为输入信号幅值的一半,这样就刚刚好可以将输入信号全部变为正值。硬件测试如图 4-8 所示。图 4-8 硬件测试图 1,测试一:输如信号为 300Hz 的正弦波,幅值为 2V,向上位移 1V。如图 4-9 所示,其中左边为输入信号波形,右边为输出信号波形。图 4-9 输入 300Hz 信号及输出 从图中我们能看出,输出信号和输入信号的频率几乎相同,因此可以判定,当输入信号低于低通滤波器的截止频率时,经过滤波器系统后,可以得到原输入信号。2,测试二:输入信号为 8KHz 的正弦波,幅值 2V,向上位移 1V。如图 4-10 所示,其中左边为输入信号波形,右边为输出信号波形。图 4-10 输入 8Khz 信号及其输出 观察上图,我们发现输入信号为 8KHz 时,输出信号有明显的衰减,这就说明当输入信号大于低通滤波器的截止频率时,就会使得信号衰减。3,测试三:输入信号为 10KHz 的正弦波,幅值 2V,向上平移 1V。如图 4-11 所示,其中左边为输入信号波形,右边为输出信号波形。图 4-11 输入 10KHz 信号及其输出 观察上图,可以看出,当输入信号为 10KHz 时,几乎没有输出,这就说明输入信号远大与低通滤波器的截止频率时,该信号不会被输出。通过观察上述三组测试,可以看出当输入信号的频率低于低通滤波器的截止频率时,输入信号能正常输出;当输入信号的频率高于低通滤波器的截止频率时,输出就会开始衰减;当输入信号远大于低通滤波器的截止频率时,几乎没有输出,这说明该滤波器能正常工作,达到了滤波的功能,也就是说本次设计完成了。4.3 数据误差分析 FIR数字滤波器的滤波系数,输入输出序列值和运算过程中的中间结果,都是用有限字长的二进制表示。往往位数越长,数据的精度越高,则会使得结果偏差越大。这种偏差 主要有两种原因,一是A/D转换器的量化误差,因为A/D转换都需要对采样的模拟信号进行量化,这必然会产生误差;二是系统量化的误差,在本次设计系统中,最后的输出采用了截断处理,这也必然产生误差。5.总结 在介绍 FIR 滤波器的基本理论的基础上,本设计利用 Matlab 设计工具设计出了 16 阶FIR 低通滤波器,达到了预期的性能。对于 FIR 滤波器的硬件实现,本设计采用了 DSP Builder 工具按照 FIR 滤波器的直接型结构设计模式,搭建各个模块,并在 Altera 公司的 FPGA 器件上进行了开发,使用 Quartus II 软件进行了时序仿真,仿真结果证明所设计的 16 阶 FIR 低通滤波器功能正确,能够满足一般应用的要求,并通过硬件进一步验证了该滤波器的正确性。参考文献 1 李永刚,李锦萍.有限长单位冲激响应FIR 数字滤波器线性相位分析和结构图J.首都师范大学学报(自然科学版),2002,(02):1-90.2 梁二虎,刘文怡.基于 FPGA 的 FIR 数字滤波器硬件模块设计J.微计算机信息,2008,01-02:218-219.3 雷伏容.VHDL 电路设计M.北京:清华大学出版社,2006.4 Clive“Max”Maxfield 著,杜生海,邢闻译.FPGA 设计指南M.北京人民邮电出版社,2007.5 Uwe Meyer-Baese 著,刘凌译.数字信号处理的 FPGA 实现M.北京:清华大学出版社,2007.6 朱幼莲.线性相位 FIR 数字滤波器的 CPLD 实现J.工矿自动化,2005(1).7 丁玉美,高西全.数字信号处理M.西安:西安电子科技大学出版社,2004.8 潘松.VHDL 实用教程M.成都:电子科技大学出版社,2001.9 卢建国,张泽.FIR 线性相位数字滤波器的 CPLD 实现J.内蒙古大学学报(自然科学版),2002,(03):1-47.10单琳娜,李帅,石瑞英.模块法设计 FIR 数字滤波器的一种新方法J.高师理科学刊,2005,(02):1-145.11凌朝东,刘蓉,林旭.用 CPLD 实现的 FIR 滤波器J.华侨大学学报(自然科学版),2001,(01):45-90.12岳学东,买鹏.基于 Matlab 的 FIR 数字滤波器最优设计J.中国科技信息,2005,(08):54-94.13戴月明,张秀娟.FIR 数字滤波器优化设计方法J.山东科技大学学报(自然科学版),2002,(01):1-28.14林怀蔚,费旻,邢玮.基于 VHDL 和 Matlab 应用结合的 F