《基于FPGA的FIR数字滤波器的设计及仿真毕业设计论文(28页).doc》由会员分享,可在线阅读,更多相关《基于FPGA的FIR数字滤波器的设计及仿真毕业设计论文(28页).doc(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-基于FPGA的FIR数字滤波器的设计及仿真毕业设计论文-第 27 页1 绪论本章主要论述该课题的研究意义,目前在世界上的发展情况,以及我在这篇论文中所用到的主要的设计方法与设计工作。1.1 课题研究的意义 许多工程领域都涉及到如何能在强背景的噪声信号和干扰信号中提取到真正的信号。如:遥感和遥测系统,通信系统,雷达系统,航天系统等,这就要求有信号的滤波。滤波器的带宽等性能,处理速度的要求随着现在对高速,宽带,实时信号处理的要求越来越高,也随之提高。系统的稳定性和后续信号的处理受滤波器的性能好坏程度影响常大。11.2 国内外研究动态1.2.1 数字信号处理的发展动态一般可以用两类方法来实现FIR
2、滤波器的设计。 一类通过软件来设计实现,使用常见的电脑语言如高层次的C / C + +跟 MATLAB语言。此方法用于教学或算法仿真。但是采用软件的方法不能实现实时性。目前可以通过以下几种方式在硬件中来实现,。一种是使用可编程的主要数学单位是一个乘法累加器(MAC)的通用DSP芯片编程。实时数字信号能够实现高速的处理,是因为 MAC在一台机器时钟周期就能完成乘法累加操作,同时在硬件上还辅助与不同的流水结构和哈佛架构。然而,在应用时受到了限制,是由于硬件结构和流水结构是固定不变的。 一种是使用专用的ASIC数字信号处理芯片。这种方法是芯片尺寸小,高性能,保密性好。其缺点是一个单一功能的芯片,多是
3、针对一定的功能而设计,灵活性不够。 另一种方法是使用可编程逻辑器件(FPGA / CPLD)。 FPGA所具有得可编程逻辑的灵活性突破了流水线结构和并行处理的局限性,可以很好的实现实时信号处理功能。研发过程中它的可移植性更好,可以缩短开发周期。211 1.2.2 FIR数字滤波器的FPGA实现 使用FPGA技术设计的FIR数字滤波器在目前通常采用的是乘法器结构和分布式算法结构。 乘法器结构,有乘累加结构与并行乘法器结构两种形式。乘累加结构是最简单的一种,占用资源少,缺点是处理速度慢;并行乘法器结构比较复杂,但是如果能够加上流水结构,信号就能够实现高速的处理,但是它还是会受到处理速度和数量的限制
4、。分布式算法(DA)的,是将固定系数乘法 - 累加运算转换成了查找表的运算从而巧妙地利用了ROM查找表,避免了乘法的运算。巧妙运用查找表可以在很大程度上提高运算速度和插入流水结构。因为它只是一个简单的加法运算。 分布式算法(DA),可以分为串行分布式算法,并行分布式算法,串行与并行结合的分布式算法。串行分布式算法,它占用的资源很少,结构也相对简单,但就是还不能拥有很高的处理速度;并行的分布式并行算法拥有更加整齐的结构,主要用于需要高速处理的情况;串行与并行结合的分布式算法,占用资源大,也多用于对速度要求高的场合。在不同的情况下,各种算法的处理效果是不同的,要根据对处理速度的不同要求选择不同的算
5、法。 无论是采用哪种算法,都会用到ROM做为查找表的器件。FIR滤波器的阶数增加,就会使得ROM的数目不断的增加,所占用的资源也不断的增加,到目前为止没有一个有效的方式,可以将ROM的数量跟ROM的规模减少。2111.3 本课题研究方法和主要工作首先介绍了数字滤波器的基本概念,然后介绍了FIR滤波器的相关理论。最后从实际应用设计出发提出一个FIR滤波器设计流程,包括滤波器结构的选择、滤波器的系数计算、系数的量化等,按照此流程即能设计出满足实际性能需求的数字滤波器。根据FIR滤波器的功能模块的划分,描述了各个功能模块的具体设计,给出其仿真波形,并通过Quartus进行了仿真验证。(1) 采用8输
6、入查找表进行分布式算法,设计了一个输入8位,输出8位的256阶线性相位FIR滤波器,简化了传统的MAC设计。(2) 各模块参数独立于滤波器的结构,有较强的通用性,适于模块化设计。(3) 利用VHDL设计,可重复配置FPGA,系统易于维护和扩展。2 FPGA技术以及Xilinx Virtex IIFPGA芯片2.1 FPGA发展基本概况现场可编程门阵列FPGA是一种广泛使用的高密度可编程逻辑器件。20世纪80年代赛灵思公司推出了第一个FPGA,除了赛灵思外,Actel,Altera公司,QuickLogic公司和其他公司也生产FPGA产品。FPGA布线由单位的可编程逻辑阵列构成,用可编程I /
7、O单元阵列包围,分隔的资源构成了整个芯片。逻辑单元阵列布线通道连结在一起,以达到一定的逻辑功能。一个FPGA由丰富的快速逻辑门结构,寄存器和I / O组成。按照编程功能,有反熔丝的一次性可编程的静态存储器(SRAM)结构。赛灵思的FPGA基于静态存储单元,SRAM的查找表类型,在互连关系的模式下,也可以再次在设备中加载和修改。电源掉电后,存储的程序可能会丢失,因此每次你都要把程序配置到芯片中去。 Actel的ACT系列和QuickLogic为一次性可编程熔丝类型的PASIC系列FPGA。自1985年以来,赛灵思公司推出了第一片现场可编程逻辑器件后的有近20多年的发展过程中,FPGA的集成技术已
8、经取得了令人瞩目的发展:现场可编程逻辑器件从最初的可用的1200个门发展到25万个,再在20世纪90年代发展到几十万,甚至数百万的单FPGA芯片,现场可编程器件集成达到了一个新的水平。 2001年,赛灵思Virtex II,其容量可高达800万个系统逻辑。赛灵思Virtex II系列FPGA的Virtex,Spartan的Virtex-E,在Spartan-2后的LUT(查找表)的高端平台FPGA系列芯片,该芯片的选择RAM块的内部整合,采用18位x 18位乘法器和其他硬件资源。时钟DLL控制DCM的技术,频率高达420MHz。支持的LVDS,PCI,TTL,AGP,CMOS和其它IO接口标准
9、。后续又推出了以IBM PowerPC为基础的Virtex II结构,低端的900纳米工艺的Spartan-3,和即将推出的Virtex-4系列的具有嵌入式DSP功能的Virtex II Pro。12.2 Virtex II系列FPGA结构及特点2.2.1 Virtex-II系列FPGA概述 Virtex II FPGA是第一个基于FPGA,具有 IP浸入式结构的平台。它具有400008000000个系统逻辑门而且它的I / O带宽高达840Mb / s,它的内部时钟高达420MHz。设计人员可以更加容易地集成软件和硬件IP核;Virtex-II器件包含多达12个时钟管理器(数字时钟管理器DC
10、M),可以在允许范围内的任何频率的时钟信号产生,并提高时钟边沿配置(时钟边沿位置)的准确性,因此,下降到百分之一的错误。此外,高性能时钟管理电路,每个Virtex-II器件有16个预先设计的低偏移时钟网络(低偏移时钟网络),省去了复杂的高性能设计的时钟树分析的需要。此外,赛灵思可控阻抗技术(XCITE)使用两个外部参考电阻保持数百个I / O引脚的输入和输出阻抗匹配,不仅可以减少电路板上的电阻数量,大大降低了系统成本,还能减少的概率电路板重新绕组(重不同自旋),简化电路板布局,提高了系统的稳定性。Virtex-II还支持片上和片外时钟同步,并维持精确的50/50占空比。DCI技术的应用,可避免
11、不同的驱动力,温度,电压波动造成的差异,仍然保持一个稳定的阻抗。有加密功能,以充分保护的安全设计。应用安全三重数据加密标准(DES)算法编码加密密钥加密算法,此功能,可以提高安全性的设计,以避免设计被窃取。灵活的逻辑资源。高性能的外部存储器接口,支持CAM,QDR RAM,FCRAM,SDR / DDR等存储方式。有168个专用的18位x 18位乘法器和快速进位逻辑链。支持多输入功能,有一个内部三态总线,拥有的SelectIO技术,支持多种IO标准,支持多种编程模型。支持并口,串口。具有灵活的开发环境。211 2.2.2的Virtex-IIFPGA结构各种可编程的单位,主要用于高密度和高性能的
12、逻辑设计,Virtex-II系列FPGA可编程逻辑块(可配置逻辑块CLB)的组成,如图3-1所示,由SelectRAM块,乘法器,全局时钟缓冲器和一个可编程的IOB组成。图2-1 Virtex II系列FPGA结构图2.2.2.1 Virtex-II FPGA的可编程逻辑模块CLB每一个可编程逻辑块由四片三态缓冲器组成。每片包含多个算术逻辑门,2个存储单元,两个函数发生器(FG公司),超快速前进位链。函数发生器(FG公司)为一个十六位分布式SelectRAM存储器编程,或四输入查找表或十六位的移位寄存器。两个存储单元可以编程为电平触发锁存或边沿触发的D触发器。基本结构如图2-2所示。图2-2
13、CLB内部结构图2.2.2.2 Virtex II FPGA的时钟资源Virtex II FPGA具有十六个时钟输入引脚,底部有八个,另外八个在位于中间的逻辑阵列芯片上的顶部。适当的配备与之相对应的十六个全局时钟复用器缓冲区。分配给每个全局时钟缓冲器时钟引脚时钟信号,可由全局时钟缓冲器来支持差分对驱动程序,直接驱动到每个设备。与此同时,也可由DCM的驱动器分配到每个设备的时钟信号。具体如下图所示:图2-3 时钟分配结构图数字时钟管理器有一个强大的功能叫时钟管理功能,具有频率合成器,相移等特性。无偏的相位输出时钟和输入时钟信号,可以消除时钟分配延迟。频率合成器,可以得到高精度相移输出的相移。21
14、12.3 本章小结本章详细的说明了Virtex II系列FPGA的结构和特点,并简要介绍了FPGA技术的发展。通过对本章知识的掌握,对基于FPGA技术的下一个过滤器设计奠定了坚实的基础。3 FIR数字滤波器设计3.1 FIR数字滤波器概述信号中一般都包含噪声或者说其中有很多能量在感兴趣的最高频率之外,因此我们要用滤波电路将感兴趣的带宽之外的信号和噪声移去。数字滤波器是数字信号处理中使用最广泛的一种线性系统环节,图3.1给出了一个具有模拟输入信号和输出信号的实时数字滤波器的简化框图。这个模拟信号被周期地抽样,且转化成一系列数字x(n)(n=0,1,)。数字滤波器依据滤波器的计算算法,执行滤波运算
15、、把输入系列x(n)映射到输出系列y(n)。DAC把数字滤波后的输出转化成模拟值,这些模拟值接着被模拟滤波器平滑,并且消去不需要的高频分量。图3.1实时数字滤波器的简化框图在信号处理中,为了防止采样过程中的混叠现象,必须在A/D转换之前使用低通滤波器,把1/2采样频率以上的信号衰减掉。如图3.2 所示,在A/D转换前,加入一个低通滤波器,这样,经过户A/D转换之后,有效地避免了混叠现象的发生,从而保证了后续数字处理的正常进行。图3.2 抗混叠滤波器的作用3.2 FIR数字滤波器理论FIR滤波器的数学表达式可用K阶卷积来表示: ( 31)其中:K:FIR滤波器的抽头数;:第k级抽头系数(单位脉冲
16、响应);:延时k个抽头的输入信号。卷积是DSP使用最频繁的一种运算,描述系统的输入如何与系统相互作用产生输出,通常来说,系统的输出将是输入的延迟、衰减或者放大。上图描述的两个序列卷积的例子。其中,x(n)是输入序列,h(n)是单位脉冲响应,y(n)是系统对输入序列x(n)的响应,卷积的数值即y(n)只可以由式只算得到。3.3 FIR数字滤波器的具体设计内容滤波器的实现主要包括两方面的内容,首先选择一个合理的结构,然后利用有限精度的数值来实现它。之所以要利用有限精度数值实现滤波器,是因为实际的滤波器系数只能用有限的二进制位数来表示,就涉及到系数的字长问题。3.3.1滤波器的结构FIR滤波器的单位
17、脉冲响应h(k)均为实数,在幅度上只要满足下列两个条件之一,就能构成线性相位FIR滤波器。式( 32)称为第一类线性相位的幅度条件(偶对称),式( 33)称为第二类线性相位的幅度条件(奇对称)。 ( 32) ( 33)FIR滤波器最基本的结构是直接型,如图3.3所示。可以看出,FIR滤波器是由一个“抽头延迟线”的加法器和乘法器的集合构成,每个乘法器的操作数就是一个FIR系数。对于每次采样,只y(n)都要进行K次连续的乘法和(K-1)次加法操作。图3.3直接型FIR滤波器结构图由于FIR滤波器具有线性相位的对称属性,因此可以只采用一半的系数降低所需要乘法器的数量,如图3.4所示(图(a)为偶对称
18、,图(b)为偶对称)。可以看出“对称”结构的乘法器是直接结构(图3.3)的一半(K/2),得到了优化,但加法器的数量保持不变,还是(K-1)个。图3.4(a)简化乘法器数量的线性相位偶对称FIR滤波器结构图图3.4(b)简化乘法器数量的线性相位奇对称FIR滤波器结构图此外,FIR滤波器的结构还有级联型和格型,这两种结构可以获得较高的灵敏度,但较少采用,主要原因是:第一,对大多数线性相位FIR滤波器来说,由于零点在Z平面内或多或少是均匀铺开的,从而使滤波器对系数量化误差的灵敏度很低;第二,无论系数量化误差多大,采用直接型结构都能获得准确的线性相位。因此,本设计选用直接型结构,这种结构实现简单,要
19、求的器件少,数据存储不复杂,且充分利用FIR滤波器的脉冲响应系数对称性的优点来降低滤波器实现的计算复杂性。3.3.2 滤波器系数的计算目前,FIR滤波器的主要设计方法是建立在对理想滤波器频率特性做某种近似的基础上的,这些近似方法有窗函数法、频率抽样法和最佳一致法。其中,窗函数法是一种基本的设计方法,其设计方法较为成熟,本设计即采用窗函数法,下面先简要介绍其设计思想。窗函数设计的基本原理是:从所要求的理想滤波器的频率响应Hd(ejw)出发,经过反傅立叶变换导出hd(n) ( 34)由于hd(n)的无限长,所以要对其进行加窗处理,以得到满足要求的单位脉冲响应h(n) ( 35)已经认可并发表的窗函
20、数的数量非常多,最常用的窗函数(用w(n)表示)基本参数如表3.1所示10。表 3.1四种窗函数基本参数名称窗函数过渡带宽最小阻带衰减(db)矩形窗14/N-21三角窗2n/N8/N-25汉宁窗8/N-44海明窗8/N-53从表 3.1可以看出,一旦窗函数选定,过渡带宽和最小阻带衰减也随着确定,不可改变,究竟选择哪一种窗函数来实现本设计呢?本人参考了以下选择原则:(1)具有较低的旁瓣幅度,尤其是第一旁瓣幅度;(2)旁瓣幅度下降速度要大,以利增加阻带衰减;通常以上两点很难同时满足。当选择主瓣宽度较窄时,虽然得到较陡的过渡带,但通带和阻带的波动明显增加;当选用最小的旁瓣幅度时,虽能得到均匀光滑的幅
21、度响应和较小阻带波动,但过渡带加宽。因此,实际选用的窗函数往往是它们的折中。在保证主瓣宽度达到一定要求的条件下,适当牺牲主瓣宽度来换取旁瓣波动的减少。本设计采用的设计方案是:设计一个输入8位,输出8位的256阶线性相位FIR滤波器,Fs为44kHz,Fc为10.4kHz,采用直接型、奇对称结构方式,选择海明窗完成,其输入信号范围为:99,0,0,0, 70,0,0,0, 99,0,0,0, 70,利用MATLAB设计计算滤波器系数如下:FIR滤波器参数设置,因为是256阶,所以Specify order处填255,h(0)=0,如图3.5所示。图3.5 FIR滤波器参数设置FIR滤波器系数如下
22、图3.6所示。图3.6FIR滤波器系数经过计算,得到附录图B(a)为脉冲响应波形图,图附录图B(b)为其幅频特性曲线,图附录图B(c)为相频特性曲线。从幅频特性曲线中可以看出该滤波器的性能参数达到了要求;从相频特性曲线来看,曲线通过原点处为一条直线,说明具有线性相位特性。3.3.3滤波器系数量化本系统将采用FPGA实现,但FPGA只适合处理二进制的整数,因此就存在一个将小数转换为有限位二进制整数的问题,即有限字长问题,用有限字长来表示输入和输出信号、滤波器系数以及算术运算的结果。在这种情况下,需要分析量化对滤波器性能的影响。本系统为硬件实现,仅分析量化后单位脉冲响应系数的有限字长对性能的影响。
23、用直接形式设计的低通FIR滤波器,采用四舍五入量化系数使之整数化如图3.7。图3.7 滤波器系数量化量化后可得FIR滤波器的参数为:-12 -18 13 29 -13 -52 14 162 242 162 14 -52 -13 29 13 -18 -123.3.4 设计步骤根据以上分析,滤波器的理论设计部分可以概括为以下5个步骤,用图2.5加以总结说明:(1)规范设计要求这一步骤包括滤波器类型(如低通滤波器)的确定,期望的幅度和相位响应和可接受的容差,以及确定抽样频率和输入数据的字长。(2)滤波器系数的计算采用matlba等辅助工具,确定满足第一步所要求技术规范的传递函数H(z)的系数。(3)
24、实现结构的选择用一个适当的结构(直接型、格型和级联型)来表示滤波器的实现结构。(4)有限字长效应分析分析滤波器系数和输入数据量化的影响,以及用固定字长执行滤波的运算对滤波器性能的影响,最后确定满足性能要求的系数和输入数据的字长。(5)用软件/硬件来实现包括选择硬件和编写程序并执行该滤波,然后进行实际系统的测试以验证其是否达到设计要求。图3.8 数字滤波器的设计步骤3.4本章小结这一章首先介绍了数字滤波器的基本概念,然后介绍了FIR滤波器的相关理论。最后从实际应用设计出发提出一个FIR滤波器设计流程,包括滤波器结构的选择、滤波器的系数计算、系数的量化等,按照此流程即能设计出满足实际性能需求的数字
25、滤波器。4 FIR数字滤波器的FPGA设计及仿真 本章采用VHDL语言,利用FPGA的查找表结构,完成了一个基于分布式算法的256阶FIR低通数字滤波器的程序设计。在设计中采用模块化、参数化设计方法,简化了设计过程,并将设计结果进行了仿真验证。4.1 FIR数字滤波器分布式算法的基本原理分布式算法(Distributed Arithmetic, DA)是1973年由Crosier提出来的,后来Peled和Liu进行了推广工作,直到现场可编程门阵列(FPGA)的查找表(Look Up Table LUT)结构的出现,这种方法才受到重视,其主要原理如下。为了分析简单起见,将FIR滤波器的表达式改写
26、为: (41)设,其中Xkb表示Xk中的第b位,xk即x的第k次采样,则y可以表示为: (42)重新分别求和,其结果可表示成如下形式: (43)可以看出,分布式算法是一种以实现乘加运算为目的的运算方法,与传统的乘累加不同在于执行部分积运算的先后顺序不同,这个过程可用图4.1的结构来实现,可以看出,该算法可以利用一个查找表(LUT)实现映射,即2K字宽(即2K行),预先编好程序的LUT接受一个k位输入量xb=x0bx1bx(k-1)b的映射,经查找表的查找后直接输出部分积,算法中的乘法以位权2b可以通过图中的寄存器和累加器完成,在K次循环后完成计算结束。这个过程共进行了B次查找和B次累加15。
27、( 44)图4.1 DA算法结构图4.2 FPGA设计流程确定了滤波器的实现方案后,就可以借助FPGA来设计了。FPGA设计是指利用EDA软件(Altera公司的Max+plus、Quartus等)和编程工具对器件进行开发的过程。本设计是在Quartus开发平台上进行的,FPGA的设计流程如图4.2所示。设计准备设 计 输 入原理图/硬件描述设计处理优化器件编程功能仿真时序仿真图4.2 FPGA设计流程1. 设计准备按照设计需求,进行方案确定和器件选择工作。在第三章已经确定了FIR滤波器的实现方案,鉴于实现这一方案要用到查找表结构,所以选择了具备查找表结构的FLEX 10K元器件。2. 设计输
28、入设计者将所设计的系统或电路以开发软件要求的某种形式表现出来,并送入计算机的过程称为设计输入。设计输入通常有原理图输入方式、硬件描述语言输入方式和波形输入方式三种方式,在本设计中采用硬件描述语言输入方式,即VHDL输入方式。3. 设计处理这是器件设计中的核心环节。在设计处理过程中,编译软件将对设计输入文件进行逻辑化简、综合和优化,并适当地用一片或多片器件自动进行适配,最后产生编程用的编程文件。设计处理包括语法检查和设计规则检查、逻辑优化和综合、适配和分割、布局和布线及生成编程数据文件等七个步骤。4. 器件编程对FPGA来说是将位流数据文件“配置”到FPGA中去,这样,配置的芯片就能够执行所设计
29、的系统的功能。4.3 FIR滤波器各功能模块的具体实现FPGA有着规整的内部逻辑阵列和丰富的连线资源,特别适合于数字信号处理任务,相对于串行运算为主导的通用DSP芯片来说,其并行性和可扩展性更好,更适合FIR滤波器的设计。4.3.1 FIR滤波器的总体结构设计的FIR滤波器可以分为以下三种模块:寄存器模块、加法器模块、乘法器模块。4.3.2寄存器模块对模块进行逻辑设计时,采用了VHDL文本输入方式。VHDL语言的一个基本设计单元是由实体说明(ENTITY Declaration)和构造体说明(ARCHITECTURE Body)两部分构成,对端口的定义以及对参数的说明都包含在实体(ENTITY
30、)部分,设计时将移位寄存器命名为dff8。寄存器用于寄存一组二值代码,对寄存器的触发器只要求它们具有置1、置0的功能即可,在CP正跳沿前接受输入信号,正跳沿时触发翻转,正跳沿后输入即被封锁。此模块程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY dff8 IS GENERIC (width_1:integer:=7; width_2:integer:=7;PORT( clk : IN STD_LOGIC; clear : IN STD_LOGIC; Din : IN STD_LOGIC_VECTOR(width_1 DOWNTO 0);
31、Dout : OUT STD_LOGIC_VECTOR(width_2 DOWNTO 0)END dff8; ARCHITECTURE a OF dff8 IS BEGIN PROCESS(clk,clear) BEGIN IF clear=1 THEN Dout=00000000; ELSIF clear=0 THEN IF(clkEVENT AND clk=1) THEN Dout = Din; END IF; END IF; END PROCESS; END a;程序中的前两句是库和包集合说明,语句IEEE是程序中要用到的库。从语句“ENTITY dff8 IS”开始到“END dff8
32、”为止是实体说明语句,在实体说明中定义了3个输入端口和1个输出端口,这个输入分别是时钟信号clk、清零信号clear、输入信号Din、;输出信号Dout。std_logic、std_logic_vector是IEEE定制的标准化数据类型。在dff8模块的实体说明中又定义了2个参数,width_1是输入信号的宽度,width_2是输出信号的宽度;2个参数的数据类型均为整数类型,后面的数据是对参数赋予的值,改变这个值就修改了参数。从语句“ARCHITECTURE a OF dff8 IS”到“END a”是对构造体的描述,它对模块内部的功能进行了说明。设计的dff8模块的逻辑符号如图4.3所示。图
33、4.3 dff8模块的逻辑符号寄存器的波形仿真如图4.4所示。图4.4寄存器的波形仿真在CP正跳沿前接受输入信号,正跳沿时触发翻转,正跳沿后输入即被封锁,仿真结果表明dff8模块的功能完全正确。4.3.3 加法器模块在将两个多位二进制数相加时,除了最低位以外,每一位都应该考虑来自低位的进位,即将两个对应位的加数和来自低位的进位3个数相加。这种运算称为全加,所用的电路称为全加器。多位加法器的构成有两种方式:并行进位和串行进位。并行进位加法器设有进位产生逻辑,预算速度较快;串行进位方式是将全加器级联构成多位加法器。并行进位加法器通常比串行级联加法器占用更多的资源。随着为数的增加,相同位数的并行加法
34、器与串行加法器的资源占用差距也越来越大,因此,在工程中使用加法器时,要在速度和容量之间寻找平衡点。本次设计采用的是并行加法器方式。实现两个二进制数字的相加运算。当到达时钟上升沿时,将两数输入,运算,输出结果。此模块程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_arith.ALL;ENTITY add121616 isGENERIC ( add_1:integer:=11; add_2:integer:=15; add_3:integer:=15;PORT(clk : in STD_LOGIC; Din1 :in
35、 signed (add_1 downto 0); Din2 :in signed (add_2 downto 0); Dout:out signed (add_3 downto 0);END add121616;ARCHITECTURE a of add121616 isSIGNAL s1: signed(add_3 downto 0);BEGIN s1=(Din1(add_1)&Din1(add_1)&Din1(add_1)&Din1(add_1)&Din1);PROCESS(Din1,Din2,clk)BEGINif clkevent and clk =1 thenDout=s1+Din
36、2;end if;end process;end a;程序中的前三句是库和包集合说明,语句IEEE是程序中要用到的库。从语句“ENTITY add121616 IS”开始到“END add121616”为止是实体说明语句,在add121616模块功能的实体说明程序段中定义了4个端口, 4个端口中包含1个时钟信号,2个信号输入端口,1个信号输出端口。add_1是输入信号Din1的宽度,shift_2是输入信号Din2的宽度,add_3是输出信号Dout的宽度;3个参数的数据类型均为整数类型,后面的数据是对参数赋予的值,改变这个值就修改了参数。从语句“ARCHITECTURE a OF add12
37、1616 IS”到“END a”是对构造体的描述,它对模块内部的功能进行了说明。设计的add121616的逻辑符号如下图4.5所示。图4.5寄存器的逻辑符号模块仿真波形如下图4.6所示。图4.6寄存器的波形仿真当到达时钟上升沿时,将两数输入,运算,输出结果,仿真结果完全符合设计要求。4.3.4乘法器模块从资源和速度考虑,常系数乘法运算可用移位相加来实现。将常系数分解成几个2的幂的和形式。下例为乘18电路设计,算法:18=16+2,实现输入带符号数据与固定数据两个二进制数的乘法运算。当到达时钟上升沿时,将两数输入,运算,输出结果。此模块程序如下:LIBRARY ieee;USE ieee.std
38、_logic_1164.all;USE ieee.std_logic_arith.all;ENTITY mult18 isGENERIC ( mult_1:=8; mult_2:=12; mult_3:=9; mult_4:=12); PORT( clk : IN STD_LOGIC; Din : IN SIGNED (mult_1 DOWNTO 0); Dout : OUT SIGNED (mult_2 DOWNTO 0);END mult18;ARCHITECTURE a OF mult18 ISSIGNAL s1 : SIGNED (mult_1 DOWNTO 0);SIGNAL s2
39、: SIGNED (mult_3 DOWNTO 0);SIGNAL s3 : SIGNED (mult_4 DOWNTO 0);BEGINP1:process(Din)BEGINs1(mult_1 DOWNTO 4)=Din;s1( 3 DOWNTO 0)=0000;s2(mult_3 DOWNTO 1)=Din;s2(0)=0;if Din(8)=0 then s3=(0&s1(mult_4 downto 1)+(0000&s2(mult_3 DOWNTO 1);else s3=(1&s1(mult_4 downto 1)+(1111&s2(mult_3 DOWNTO 1);end if;e
40、nd process;P2: PROCESS(clk)BEGINif clkevent and clk=1 thenDout=s3;end if;END PROCESS;END a;程序中的前三句是库和包集合说明,语句IEEE是程序中要用到的库。从语句“ENTITY mult18 IS”开始到“END mult18”为止是实体说明语句,在mult18模块功能的实体说明程序段中定义了3个端口, 3个端口中包含1个时钟信号,1个信号输入端口,1个信号输出端口。Mult_1是输入信号Din的宽度,mult_2是输出信号Dout的宽度, 2个参数的数据类型均为整数类型,后面的数据是对参数赋予的值,改变
41、这个值就修改了参数。从语句“ARCHITECTURE a OF f_mult18 IS”到“END a”是对构造体的描述,它对模块内部的功能进行了说明。本模块实现输入带符号数据与固定数据两个二进制数的乘法运算。设计的mult18逻辑符号图4.7所示。图4.7乘法模块mult18逻辑符号乘法器模块的波形仿真如图4.8所示。图4.8乘法模块仿真波形当到达时钟上升沿时,将两数输入,运算,输出结果,仿真结果完全符合设计要求。4.4 FIR滤波器整体电路1)设定输入信号根据设计要求,输入信号范围是:99,0,0,0, 70,0,0,0, 99,0,0,0, 70,我们任意设定输入信号为:X99,0,0,
42、0,70,0,0,0,99,0,0,0,70,0,0,0,99,0,0,0,70,0,0,0,99,0,0,0,70,0,0,02)输出信号理论值由FIR数字滤波器的公式FIR滤波器整体电路仿真结果如图4.9所示。图4.9 FIR滤波器整体电路仿真波形仿真结果与输出信号理论值的比较如下:输出结果yn理论值仿真结果MATLAB卷积值/512经仿真器仿真-2.3203-3-3.4805-42.513725.60745-4.1543-5-12.516-134.4844435.2893542.6954120.734207.1348717.7011726.4182615.24158.9121824.69
43、924y038.59837y124.69924y28.91218y315.2415y424.77724y515.2415y68.91218y724.69924y838.59837y924.69924y108.91218y1115.2415y1224.77724y1315.2415y148.91218y1524.69924y1638.59837y1724.69924由上面仿真波形可以读出结果经比较,仿真结果与输出信号理论值完全吻合。且波形基本没有毛刺,设计完全符合设计要求。4.5 本章小结FIR滤波器的功能模块的划分,描述了各个功能模块的具体设计,并给出其仿真波形。通过Quartus的仿真验证,
44、可以得到以下结论:(1) 采用8输入查找表进行分布式算法,设计了一个输入8位,输出8位的256阶线性相位FIR滤波器,简化了传统的MAC设计。(2) 各模块参数独立于滤波器的结构,有较强的通用性,适于模块化设计。(3) 利用VHDL设计,可重复配置FPGA,系统易于维护和扩展。5结论 随着科学技术的发展,以FPGA为代表的新型可编程逻辑器件,具有灵活性、高速、高可靠性的特点,采用FPGA来实现FIR滤波器具有一定的先进性。FPGA的DSP解决方案为数字信号处理开创了新的领域,使得构造的数字信号处理系统能够保持基于软件解决方案的灵活性又能接近ASIC的性能,为设计人员开辟了广阔、自由的发展空间,具有很好的应用前景16-17。本文的主要工作如下:(1) 阐述了选题背景、研究的目的和意义与国内外研究状况,以FIR滤波器的基本理论为依据,探讨适应工程实际的数字滤波器的设计方法。(2) 对分布式算法进行了一些的讨论,在阐述算法原理的基础上,分析了利用FPGA特有的查找表结构完成这一运算的方法,解