基于VHDL毕业设计Word格式.docx
《基于VHDL毕业设计Word格式.docx》由会员分享,可在线阅读,更多相关《基于VHDL毕业设计Word格式.docx(29页珍藏版)》请在冰点文库上搜索。
TheDesignofFIRFilterbaseonVHDL
(CollegeofEngineering,SouthChinaAgriculturalUniversity,Guangzhou510642,China)
Abstract:
Commonreal-timedigitalsignalprocessingdeviceshaveprogrammabledigitalsignalprocessing(DSP)chip(suchasADseries,TIseries),application-specificintegratedcircuit(ASIC),fieldprogrammablegatesarray(FPGA),etc.
Limitedlongshockresponse(FIRfilter,becauseFIRsystemonlyzero,thesystemisstable,easytorealizeFFT(fastFouriertransform)algorithm,quickspeed,linearphasecharacteristicanddesignmoreflexiblesuchprominentadvantagesandinengineeringpracticebeingwidelyapplieddigitalsignalprocessing,belongtooneofthebasicmodules.ThispaperbasedonFPGArealizingtheFIRdigitalfiltersisstudied,themainworkdoneasfollows:
1.IntroducedthebasictheoryofFIRdigitalfilterswithFPGA,andthebasicsituationofFPGAdesignprocess,thedesignguidingprincipleandcommondesignguidingideologyandskill.
2.WiththebasictheoryofFIRdigitalfilters,byusingdistributedalgorithmbasedonthehardwareimplementationalgorithmforfilter,anditsarediscussedindetail.
3.Designa17orderlow-passlinearphaseFIRfilterexamples.DesignusesVHDLlanguagethroughsimulationQuartusIIsoftware,andthesimulationresultsandMatlabsimulationresultsarecomparedandanalyzed.
Keywords:
FIRfilterFPGAQuartusIIDistributedArithmeticMatlabVHDL
1 前言
1.1 课题背景及意义
数字滤波器一词出现在60年代中期。
由于电子计算机技术和大规模集成电路的发展,数字滤波器已可用计算机软件实现,也可用大规模集成数字硬件实时实现。
数字滤波器由数字乘法器、加法器和延时单元组成的一种算法或装置。
数字滤波器的功能是对输入离散信号的数字代码进行运算处理,以达到改变信号频谱的目的。
数字滤波器是一个离散系统,该系统能对输入的离散信号进行处理,从而获取所需的有用信息。
在数字信号处理中,FIR数字滤波器是最常用的单元之一。
它用于将输入信号x[n]的频率特性进行特定的修改,转换成另外的输出序列y[n]。
与IIR滤波器相比较,在设计和实现上FIR滤波器具有如下优越性:
1)相位响应可为严格的线性,因此它不存在延迟失真,只有固定的时间延迟。
2)、由于不存在稳定性问题,所以设计相对简单。
3)、只包含实数算法,不涉及复数算法,不需要递推运算。
另外,也应看到,IIR滤波器虽然设计简单,但主要是用于设计具有分段常数特性的滤波器,如低通、高通、带通和带阻等,往往脱离不了模拟滤波器的格局。
而FIR滤波器则要灵活的多,尤其是他易于适应某些特殊应用,如构成数字微分器或希尔伯特变换器等,因而有更大的适应性和广阔的应用领域。
传统的FIR数字滤波器多采用诸如TMS320CXX系列的专用DSP芯片,根据输入采样的移位相乘累加编写软件,利用软硬件的相互结合完成滤波器的设计。
但DSP芯片是基于哈佛体系结构的,它的顺序处理方式限制了数据的处理速度和吞吐量。
而FPGA有着规整的内部逻辑块整列和丰富的连线资源,特别适合用于细粒度和高并行度结构的FIR滤波器的实现,相对于串行运算主导的通用DSP芯片来说,并行性和可扩展性都更好。
由于在性能、成本、灵活性和功耗等方面的优势,基于FPGA的数字信号处理器已广泛应用于图像、视频和无线通信领域。
采用分布式算法的FPGA滤波器,其突出的优点是:
运算速度不再和滤波器的阶数正相关,而是与采样数据的宽度相关,特别适合于高阶高速FIR滤波器的设计,在提高系统运行速度和节省硬件资源方面具有很大的优势。
而且,通过改变阶数和查找表中的系数,还可以将此设计灵活地运用于实现高通、低通和带阻滤波器,可移植性较好。
因此,这种方法在高速数字信号处理中将有很好的应用前景。
1.2 课题主要研究内容
本课题的通过对FIR滤波器的实现结构比较,选取合适的FIR滤波器设计方案,用MATLAB进行滤波器的系数计算并基于VHDL语言设计实现滤波器功能,通过QuartusII对其仿真。
1.3 FPGA介绍
目前以硬件描述语言(Verilog或VHDL)所完成的电路设计,可以经过简单的综合与布局,快速的烧录至FPGA上进行测试,是现代IC设计验证的技术主流。
这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如AND、OR、XOR、NOT)或者更复杂一些的组合功能比如解码器或数学方程式。
在大多数的FPGA里面,这些可编辑的元件里也包含记忆元件例如触发器(Flip-flop)或者其他更加完整的记忆块。
系统设计师可以根据需要通过可编辑的连接把FPGA内部的逻辑块连接起来,就好像一个电路试验板被放在了一个芯片里。
一个出厂后的成品FPGA的逻辑块和连接可以按照设计者而改变,所以FPGA可以完成所需要的逻辑功能。
FPGA一般来说比ASIC(专用集成芯片)的速度要慢,无法完成复杂的设计,而且消耗更多的电能。
但是他们也有很多的优点比如可以快速成品,可以被修改来改正程序中的错误和更便宜的造价。
厂商也可能会提供便宜的但是编辑能力差的FPGA。
因为这些芯片有比较差的可编辑能力,所以这些设计的开发是在普通的FPGA上完成的,然后将设计转移到一个类似于ASIC的芯片上。
另外一种方法是用CPLD(复杂可编程逻辑器件)。
早在1980年代中期,FPGA已经在PLD设备中扎根。
CPLD和FPGA包括了一些相对大数量的可编辑逻辑单元。
CPLD逻辑门的密度在几千到几万个逻辑单元之间,而FPGA通常是在几万到几百万。
CPLD和FPGA的主要区别是他们的系统结构。
CPLD是一个有点限制性的结构。
这个结构由一个或者多个可编辑的结果之和的逻辑组列和一些相对少量的锁定的寄存器。
这样的结果是缺乏编辑灵活性,但是却有可以预计的延迟时间和逻辑单元对连接单元高比率的优点。
而FPGA却是有很多的连接单元,这样虽然让它可以更加灵活的编辑,但是结构却复杂的多。
CPLD和FPGA另外一个区别是大多数的FPGA含有高层次的内置模块(比如加法器和乘法器)和内置的记忆体。
一个因此有关的重要区别是很多新的FPGA支持完全的或者部分的系统内重新配置。
允许他们的设计随着系统升级或者动态重新配置而改变。
一些FPGA可以让设备的一部分重新编辑而其他部分继续正常运行。
FPGA采用了逻辑单元阵列LCA(LogicCellArray)这样一个概念,内部包括可配置逻辑模块CLB(ConfigurableLogicBlock)、输出输入模块IOB(InputOutputBlock)和内部连线(Interconnect)三个部分。
(吴继华,王诚,2005;
潘松,黄继业,2010)
1.4 工作平台介绍
1.4.1MATLAB
MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。
它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
1.4.2QuartusII
QuartusII是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(AlteraHardwareDescriptionLanguage)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。
QuartusII可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。
具有运行速度快,界面统一,功能集中,易学易用等特点。
QuartusII支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。
对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。
此外,QuartusII通过和DSPBuilder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;
支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。
MaxplusII作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。
目前Altera已经停止了对MaxplusII的更新支持,QuartusII与之相比不仅仅是支持器件类型的丰富和图形界面的改变。
Altera在QuartusII中包含了许多诸如SignalTapII、ChipEditor和RTLViewer的设计辅助工具,集成了SOPC和HardCopy设计流程,并且继承了MaxplusII友好的图形界面及简便的使用方法。
AlteraQuartusII作为一种可编程逻辑的设计环境,由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。
(潘松,黄继业,2010)
2 FIR滤波器原理
2.1 FIR滤波器概念
FIR(FiniteImpulseResponse)滤波器:
有限长单位冲激响应滤波器,是数字信号处理系统中最基本的元件,它可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位抽样响应是有限长的,因而滤波器是稳定的系统。
因此,FIR滤波器在通信、图像处理、模式识别等领域都有着广泛的应用。
2.2FIR滤波器特点
有限冲激响应(FIR)数字滤波器和无限冲激响应(IIR)数字滤波器广泛应用于数字信号处理系统中。
IIR数字滤波器方便简单,但它相位的非线性,要求采用全通网络进行相位校正,且稳定性难以保障。
FIR滤波器具有很好的线性相位特性,使得它越来越受到广泛的重视。
有限冲击响应(FIR)滤波器的特点:
(1)既具有严格的线性相位,又具有任意的幅度;
(2)FIR滤波器的单位抽样响应是有限长的,因而滤波器性能稳定;
(3)只要经过一定的延时,任何非因果有限长序列都能变成因果的有限长序列,因而能用因果系统来实现;
(4)FIR滤波器由于单位冲击响应是有限长的,因而可用快速傅里叶变换(FFT)算法来实现过滤信号,可大大提高运算效率。
(5)FIR也有利于对数字信号的处理,便于编程,用于计算的时延也小,这对实时的信号处理很重要。
(6)FIR滤波器比较大的缺点就是阶次相对于IIR滤波器来说要大很多。
2.3FIR滤波器工作原理
有限长脉冲响应(FIR)滤波器的系统函数只有零点,除原点外,没有极点,因而FIR滤波器总是稳定的。
如果他的单位脉冲响应是非因果的,总能够方便的通过适当的移位得到因果的单位脉冲响应,所以FIR滤波器不存在稳定性和是否可实现的问题。
它的另一个突出的优点是在满足一定的对称条件时,可以实现严格的线性相位。
由于线性相位滤波器不会改变输入信号的形状,而只是在时域上使信号延时,因此线性相位特性在工程实际中具有非常重要的意义,如在数据通信、图像处理等应用领域,往往要求信号在传输和处理过程中不能有明显的相位失真,因而线性相位FIR滤波器得到了广泛的应用。
长度为M的因果有限冲激响应滤波器由传输函数H(z)描述:
(1)
它是次数为M-1的z-1的一个多项式。
在时域中上述有限冲激响应输入输出关系为:
(2)
其中y(n)和x(n)分别是输出和输入序列。
有限冲激响应滤波器的一种直接型实现,可由式
(2)生成,M=5的情况如图1所示。
其转置,如图2所示,是第二个直接型结构。
通常一个长度为M的有限冲激响应滤波器由M个系数描述,并且需要M个乘法器和(M-1)个双输入加法器来实现。
图1直接型有限冲激响应滤波器结构
图2图1结构转置后的直接型有限冲激响应滤波器结构
长度为M的线性相位有限冲激响应滤波器由对称的冲激响应h(n)=h(M-1-n)或反对称的冲激响应h(n)=-h(M-1-n)描述。
利用线性相位有限冲激响应滤波器的对称(或反对称)性质,可以将传输函数的直接型实现所需的乘法器总量减少一半。
例如,图3显示了一个具有对称冲击响应的、长度为7的有限冲激响应传输函数的实现。
图3线性相位有限冲激响应结构
3 方案分析及计算
3.1FIR滤波器方案设计
随着数字技术日益广泛的应用,以现场可编程门阵列(FPGA)为代表的ASIC器件得到了迅速普及和发展,器件集成度和速度都在高速增长。
FPGA既具有门阵列的高逻辑密度和高可靠性,又具有可编码逻辑器件的用户可编程特性,可以减少系统设计和维护的风险,降低产品成本,缩短设计周期。
3.1.1分布式
分布式算法是一种以实现乘加运算为目的的运算方法。
它与传统算法实现乘加运算的不同在于执行部分积运算的先后顺序不同。
简单地说,分布式算法在完成乘加功能时是通过将各输入数据每一对应位产生的部分积预先进相加形成相应部分积,然后在对各部门积进行累加形成最终结果,而传统算法是等到所有乘积产生之后再进行相加来完成乘加运算的。
与传统算法相比,分布式算法可极大地减少硬件电路规模,很容易实现流水线处理,提高电路的执行速度。
3.1.2直接型
有限冲激响应滤波器的一种直接型实现,如图4所示。
图4
最后结合自己本身的情况和方案的设计难易程度综合考虑,决定选择直接型结构完成本次的毕业设计。
3.2FIR滤波器结构
FIR滤波器的结构主要是非递归结构,没有输出到输入的反馈。
并且FIR滤波器很容易获得严格的线性相位特性,避免被处理信号产生相位失真。
而线性相位体现在时域中仅仅是h(n)在时间上的延迟,这个特点在图像信号处理、数据传输等波形传递系统中是非常重要的。
此外,他不会发生阻塞现象,能避免强信号淹没弱信号,因此特别适合信号强弱相差悬殊的情况。
3.3基于Matlab的FIR滤波器系数计算
在matlab命令编辑窗口输入Fdatool指令,敲击回车可以打开FilterDesign&
AnalysisTool窗口(如图5所示),在该工具的帮助下,我们可以完成f.i.r.滤波器系数的计算工作。
图5FilterDesign&
AnalysisTool窗口
Fdatool界面总共分两大部分,一部分是designfilter,在界面的下半部分,用来设置滤波器的设计参数,另一部分则是特性区,在界面的上半部分,用来显示滤波器的各种特性。
designfilter部分主要分为:
ResponseType(响应类型)选项,包括Lowpass(低通)、Highpass(高通)、Bandpass(带通)、Bandstop(带阻)和特殊的滤波器。
本次设计在该选项中选择Lowpass选项。
DesignMethod(设计方法)选项,包括IIR滤波器的Butterworth(巴特沃思)法、ChebyshevTypei(切比雪夫i型)法、ChebyshevTypeii(切比雪夫ii型)法、Elliptic(椭圆滤波器)法等和FIR滤波器的Equiripple法、Least-squares(最小乘方)法、Window(窗函数)法等多种方法。
结合本次设计要求,选择FIR滤波器的窗函数法进行设计。
选定窗函数法后,会在右侧出现Options区域,进行窗函数法相关参量的设置,根据设计要求选择Kaiser窗并设置Beta为:
0.5。
FilterOrder(滤波器阶数)选项,定义滤波器的阶数,包括Specifyorder(指定阶数)和Minimumorder(最小阶数)。
在Specifyorder中填入所要设计的滤波器的阶数(n阶滤波器,specifyorder=n-1),如果选择Minimumorder则matlab根据所选择的滤波器类型自动使用最小阶数。
本次设计为16阶滤波器,所以选定Specifyorder并填入15。
FrenquencySpecifications选项,可以详细定义频带的各参数,包括采样频率Fs和频带的截止频率。
它的具体选项由ResponseType选项和DesignMetho选项决定。
我们要求的Lowpass(低通)滤波器只需要定义Fs、Fc。
采用窗函数设计滤波器时由于过渡带是由窗函数的类型和阶数所决定的,所以只需要定义通带截止频率,而不必定义阻带参数。
MagnitudeSpecifications选项,可以定义幅值衰减的情况。
采用窗函数设计时,通带截止频率处的幅值衰减固定为6db,所以不必定义。
本设计中的参数设定结果如图6所示。
图6滤波器参数设定结果
参数设定完毕,单击工具窗口下方的DesignFilter按钮,开始进行相关参数计算。
在计算结果中我们可以看到该滤波器的一些相关曲线,如幅频响应(如图7)、相频响应(如图8)、冲激响应(如图9)等以及具体的系数值(如图11)。
图7幅频响应
图8相频响应
图9冲激响应
图10所设计滤波器冲激系数
计算的结果可通过File下拉菜单中的Export命令取出,点击Export打开Export对话框(如图11),点击OK按钮可将滤波器系数数据存放到当前工作空间,并以Num命名。
图11冲激系数输出对话框
保存并关闭滤波器设计分析工具回到matlab主窗口,在命令编辑区输入Num可得到工具的计算结果(如图12)。
图12输出在matlab的冲激系数
对FIR滤波器的系数进行调整,做整数化操作(如图13)。
可得到滤波器整数化的系数为[-31-88-106-547023940149949940123970-54-106-88-31]
图13整数化后的冲激系数
4 基于VHDL的FIR滤波器的设计及仿真实现
4.1寄存器模块
寄存器用于寄存一组二值代码,只要求它们具有置1、置0的功能即可。
在本设计中用D触发器组成寄存器,实现寄存功能。
本设计中使用带异步复位rst端的D触发器,当rst=1时,输出信号q=0,当rst=0且上升沿脉冲到达时q=d。
程序如下:
LIBRARYieee;
USEieee.std_logic_1164.all;
ARCHITECTUREdff16OFdff16IS
BEGIN
PROCESS(rst,clk)
BEGIN
IF(rst='
1'
)THEN
q<
=(OTHERS=>
'
0'
);
ELSIF(clk'
EVENTANDclk='
)THEN
=d;
ENDIF;
ENDPROCESS;
ENDdff16;
仿真结果如图14所示:
图14寄存器仿真结果
4.2加法器模块
实现两个有符号数的相加运算。
即将输入的两数,在时钟脉冲到来时相加运算,输出结果。
在本设计中共有8个两个10位有符号数相加产生一个11位有符号数的加法器、一个18位和19位有符号数相加产生20位有符号数的加法器、一个两个20位有符号数相加产生一个21位有符号数的加法器、一个两个19位有符号数相加产生一个20位有符号位数的加法器、一个20位和21位有符号数相加产生22位有符号数的加法器,以及一个20位和22位有符号数相加产生23位有符号数的加法器电路。
其中一个20位和22位有符号数相加产生23位有符号数的加法器电路为最后一级,所以在加法器电路中在引入低位舍去功能只保留最终10位输出,最终保留10位输出采用了直接取输出23位数的高十位的方法,因此在输出中近似等于除掉了2^13即8192以后的结果。
10位有符号数相加产生一个11位有符号数的加法器设计:
USEieee.std_logic_arith.all;
ENTITYsum101011IS
PORT(a,b:
INS