毕业设计-基于FPGA的FIR数字滤波器设计_第1页
毕业设计-基于FPGA的FIR数字滤波器设计_第2页
毕业设计-基于FPGA的FIR数字滤波器设计_第3页
毕业设计-基于FPGA的FIR数字滤波器设计_第4页
毕业设计-基于FPGA的FIR数字滤波器设计_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学士论文基于FPGA的FIR数字滤波器设计摘要随着公元的第二十一个世纪的到来,今天我们进入了一个科技日新月异的时代。在现代电子数字系统中,滤波器都以一个不可缺少的身份出现。其中,FIR数字滤波器又以其良好的线性特性被广泛和有针对性的大量使用。众所周知,灵活性和实时性是工程实践中对数字信号处理的根本要求。在以往使用的各种滤波器技术中,不难发现有许许多多的问题。但是,随着现代计算机技术在滤波问题上的飞跃,派生出一个全新的分支——数字滤波器。利用可编程逻辑器件和EDA技术,使用FPGA来实现FIR滤波器,可以同时兼顾实时性和灵活性。基于FPGA的FIR数字滤波器的研究势在必行。本论文讨论基于FPGA的FIR数字滤波器设计,针对该毕业设计要做的根本工作有如下几点:〔一〕掌握有限冲击响应FIR〔FiniteImpulseResponse,FIR〕的根本结构,研究现有的实现方法。对各种方案和步骤进行比拟和论证分析,然后针对目前FIR数字滤波器需要的特点,速度快和硬件规模小,作为指导思想进行设计计算。〔二〕基于硬件FPGA的特点,利用Matlab软件以及窗函数法设计滤波器。对整个FPGA元件,方案采用模块化、层次化设计思想,从而对各个局部功能进行更为详细的理解和分工设计。最终FIR数字滤波器的设计语言选择VHDL硬件编程语言。〔三〕设计中的软件仿真使用Altera公司的综合性PLD开发软件QuartusII,并且利用Matlab工具进行比照仿真,在仿真的过程中,比照证明,本论文设计的滤波器的技术指标已经全部达标。关键词:数字滤波器Matlab可编程逻辑元件模块化算法BasedOnFPGADesignOfFIRDigitalFiltersMajor:ElectronicAndInformationEngineeringDepartment〔InformationEngineering〕AbstractAswehaveenteredthetwentyfirstcentury,ourtechnologyischangingcontinuouslywiththetimes.Inthemodernelectronicdigitalsystems,filtersareindispensable.Amongthem,theFIRdigitalfiltersarewidelyusedwiththeexcellentlinearcharacteristic.Asiswell-knowntousall,flexibilityandreal-timequalityarethebasicrequirementsindigitalsignalprocessingofengineeringpractice.Sincewehaveusedavarietyoffiltertechnologyinthepast,itisnotdifficultforustofindmanyproblemsinit.Moreover,withthedevelopmentofmoderncomputertechnologyinfilter,anewbranch-digitalfilterhasderived.WemakeuseoftheprogrammablelogicdevicesandEDAtechnology,togetherwiththeFPGAtodesigntheFIRfilter,whichisreal-timeandflexible.Inanutshell,itisimperativetodotheresearchintheFIRdigitalfiltersbasedonthetechnologyofFPGA.

ThisthesisisfocusedonthedesignoftheFIRdigitalfiltersbasedonthetechnologyofFPGA.Severalpointsareworthmentioninghere:(1)TounderstandandmasterthebasicstructureofthelimitedshockResponseFIR(FiniteImpulseResponse,FIR),researchexistingrealizationmethod,tousevarioussolutionstocompareandanalyzethestepsanddemonstrations;then,todotheselfdesignandcorrectionconcerningthecharacteristicsofthepresentFIRdigitalfilters,thatis,fastinspeedandsmallscaleinhardware.

(2)TodesignFIRfilterbasedonthecharacteristicsofFPGAhardware.Inthedesignprocess,readytouseofMatlabsoftwareandwindowfunctionmethoddesignfilter.AsfarasthewholeFPGAcomponentsareconcerned,weplantocarryonthemodularizedandhierarchicdesign,inordertohaveamoredetailedunderstandingofthefunctionofeachpartandmakeadivisionofdesign.Eventually,FIRdigitalfilterswilladopttheVHDLhardwareprogramminglanguage.(3)ToadoptthecomprehensivePLDdevelopmentsoftwareQuartusIIoftheAlteracompanyinthedesignofthesoftwaresimulation.AndwewilluseoftheMatlabtoolsforthesimulation。Inthesimulationprocess,contrastourfiltertechnologyindexwhetheryouhaveallthestandards,andfilteringwhethertheresultisideal.Keywords:digitalfilter,Matlab,programmablelogicdevices,ModularAlgorithm目录1绪论11.1本课题研究意义11.2国内外研究现状分析11.3研究思路11.4相关概念说明12FIR数字滤波器的设计方法42.1理论局部4引言42.1.2FIR数字滤波器的根底4数字滤波器的设计原理62.1.4FIR数字滤波器的理论计算方式与参数转换思想:72.1.5Matlab直接FDAtool设计方式解析132.1.6FDAtool设计模板及设计结果图162.2程序分析局部16FPGA可编程逻辑元件介绍162.2.2QuartusⅡ及VerilogHDL介绍18实际滤波器程序设计〔11阶FIR数字滤波器〕19的实现203滤波器仿真滤波283.1设置混合信号283.2设置仿真参数313.3仿真总结334总结与展望334.1设计成果总结334.2设计心得33参考文献35致谢361绪论1.1本课题研究意义在现代通信信号处理领域中,随着各种精密计算和快速计算的开展对信号处理的实时性、快速性的要求越来越高。以往的模拟滤波器无法克服电压漂移、温度漂移和噪声等问题,从而带来了许多误差和不稳定因素。而数字滤波器具有稳定性高、精度高、设计灵活、实现方便等突出优点。FPGA元器件在高速并行处理和数据传输中有独特优势,FPGA正在前端信号处理中越来越多地代替ASIC和DSP。我们需要的就是这种设计周期短,功能密度高,重组时间短的元器件。本文在FPGA元器件的根底上,实现现代FIR数字滤波器功能。并且研究多种快速的FIR数字滤波器的理论设计思想和程序设计方法。1.2国内外研究现状分析1985年XilinX公司生产出了第一块FPGA元器件,由于它有着集成度高、方便易用、开发和上市周期短的绝对优势,使得FPGA器件在数字设计和电子生产中得到迅速普及和应用,开展潜力十分巨大。现在FPGA已经开展到可以利用硬件乘加器、片内储存器、逻辑单元、流水处理技术等特有的硬件结构,高速完成FFT、FIR、复数乘加、卷积、三角函数以及矩阵运算等数字信号处理。这样可以完成信号处理的主要技术,如中频采样、参数估计、自适应滤波、脉冲压缩、自适应波束形成和旁瓣对消等。1.3研究思路通过对目前数字滤波器的几种实现方法的简单分析,本文认为基于FPGA的数字滤波器具有许多优点,本文考虑到信息技术的开展对于数字滤波器的要求越来越高,而目前FIR数字滤波器的性能还不完善,于是选择了基于FPGA的数字滤波器作为主要研究内容,通常滤波器在进行数据处理时用到了卷积运算,在设计中的解决这些乘法运算的思路是将它们转换成加减法,这是目前解决乘法运算的主流思想。设计初期在Matlab下对滤波器原理进行证明包括〔零极点图、时域和频域分析图等〕,分析FIR数字滤波器的多种理论设计思想和窗函数选择方法,在设计后期对FIR数字滤波器的小数乘法问题进行单独论证。然后对分析出来的问题进行论证和解决,最后在QUARTUSⅡ中进行仿真验证。1.4相关概念说明数字滤波器〔Digitalfilter)是由数字乘法器、加法器和延时单元组成的一种装置。其功能是对输入离散信号的数字代码进行运算处理,以到达改变信号频谱的目的。可认为是一个离散时间系统按预定的算法,将输入离散时间信号转换为所要求的输出离散时间信号的特定功能装置FIR〔FiniteImpulseResponse〕由线性系统理论可知,在某种适度条件下,输入到线性系统的一个冲击完全可以表征系统。当我们处理有限的离散数据时,线形系统的响应〔包括对冲击的响应〕也是有限的。假设线性系统仅是一个空间滤波器,那么通过简单地观察它对冲击的响应,我们就可以完全确定该滤波器。通过这种方式确定的滤波器称为有限冲击响应〔FIR)滤波器。图1-1总体设计流程图2FIR数字滤波器的设计方法2.1理论局部2.1.1引言数字滤波器的功能一般是用来变换时域或者频域中某些要求信号的属性,滤除信号中某一局部频率分量。经过数字滤波器的信号是让其频谱与数字滤波器的频率响应相乘从而得出新的结果。经过一个线性卷积过程,从时域上输入信号与滤波器的单位冲击响应作一个卷积和。下面是卷积定义式:〔1〕LTI数字滤波器在一般情况下分为有限脉冲响应〔Finiteimpulseresponse〕和无限脉冲响应(Infiniteimpulseresponse),FIR数字滤波器的设计方法和IIR滤波器的设计方法有很大的差异。因为其设计方向是选择有限长度的h(n),使频率响应函数H(e)满足指标。数字滤波器正在用直接的电子计算机标准和算法进行分析的方式来逐渐代替传统的模拟滤波器的RLC元器件和放大电路。2.1.2FIR数字滤波器的根底首先介绍FIR数字滤波器根本原理,在如下表格中对FIR和IIR数字滤波器进行了全面的比拟:表2-1两种滤波器特点比拟分析FIR数字滤波器IIR数字滤波器设计方法在一般的情况下,FIR数字滤波器没有设计公式。它的设计需要借助计算机程序完成可以利用AF的设计成果,可简单、有效地完成设计阶数高低稳定性在稳定性方面〔稳定〕,极点全部在原点存在一定的稳定性问题,需要注意结构非递归系统递归系统运算误差一般情况下不存在反响,运算的误差比拟小存在反响,由于运算中的特殊运算方法会产生极限环通常情况下一般数字滤波器的N阶FIR数字滤波器基于输入信号x(n)的表达式为:〔2〕这个公式给我们了一个非常明了的直接型网络结构,该结构表现出N个乘法器,每次采样y(n)的内容是n次乘法和n-1次加法,然后做乘累加之和。如图2-1所示:图2-1FIR滤波器直接型网络结构从DSP的介绍中,第一类线性相位对h(n)的约束条件:〔3〕(4)由公式〔3〕,〔4〕我们可以推出:〔5〕移相并利用三角公式化简得到:(6)从数字信号处理学科中知道函数关于求和区间的中心〔N-1〕/2奇对称,于是我们要求和h(n)满足如下条件:其中对应的有〔7〕图2-2线性相位FIR滤波器结构假设h(n)呈现对称特性,即此具有线性相位的滤波器是FIR数字滤波器。滤波器的根底网络结构可以相互进行转换。在前面本文已经讨论过,FPGA的实现中将对各种方法进行比拟,找出最优设计方式。从而到达减少资源占有和提高系统作业速度的目的,更好的表达实时性的数字滤波器优势。2.1.3数字滤波器的设计原理在数字信号处理技术的研究中,一般是使用的三种设计方法:窗函数法,FDATool直接设计法,程序编译法。本文首先使用窗函数和Matlab软件共同进行设计。随着软件技术的不断开展,Matlab软件能给设计者带来的数字信号处理工作已经非常的完善和多样了,设计者可以利用Matlab软件进行数字滤波器的设计和仿真,而且还可以用这款软件进行设计的优化。数字滤波器的一般设计步骤如下:1.指标确实定做任何工程或者设计,设计者都必须要有一个期望的指标用来限制设计范围。在很多的实际应用中,设计者常常都是使用数字滤波器做选频的工作。因此,指标的形式一半在频域中给出相位响应和幅度。相位响应的指标形式,一半是指系统在通频带中药有线性相位。幅度指标:绝对指标,它给出对幅度响应函数的要求,一般用于FIR滤波器的设计。相对指标,以分贝值的形式给出具体限制。2.逼近目标设计者做高频的时候大概都有一个模式,就是首先得到技术指标,然后利用我们的技术和工具让我们的产品去逼近这个指标。同理我们首先建立以个目标的数字滤波器模型。一般情况下都是采用理想的数字滤波器模型,然后去逼近我们想要的目标数字滤波器参数。3.计算机仿真和性能优化分析在工作中我们发现通过〔1〕、〔2〕之后本文会得到以差分、系统函数或者冲击响应这三种方式描述的滤波器。这个时候设计者可以利用计算进行仿真,在系统中分析技术指标和滤波结果是否是希望得到的结果。图2-3各种理想数字滤波器的幅度频率响应2.1.4FIR数字滤波器的理论计算方式与参数转换思想在理论上掌握了FIR数字滤波器的根本原理之后,本文需要对设计思想进行一个多方位的论证和尝试。首先设计者设计滤波器要有一个硬性的指标,这个指标可以是直接给出最根本的数据,也有多重表现形式。于是我例举两种特殊的指标形式然后加以解决设计。然后我们分别用2种方式来设计不同指标的滤波器。接下来我首先用程序的方式来实现滤波器:1.逼近法转换与思想使用remez函数设计FIR低通滤波器设计滤波器,使逼近低通滤波特性||。||=要求通带波纹,阻带衰减,并用最小阶数实现。绘出设计的FIR数字滤波幅频特性曲线,检验设计指标。这个指标我们可以以如下计算方法来得出详细指标:从给出的低通滤波特性||。我们可以看出设计参数f=[1/4,5/16],m=[1,0];dev的计算根据公式:Rp=-20>0于是有Rp=20,所以dev(1),dev(2)可以被表示出来。2.逼近法程序描述与思想有了这几个参数我们现在就可以根据已经设定好的格式来调用函数remezord和remez函数了,于是可得如下程序。clear;closeallfc=1/4;fs=5/16;%输入给定指标Rp=3;As=60;Fs=2;f=[fc,fs];m=[1,0];%计算remezord函数所需参数f,m,devdev=[(10^(Rp/20)-1)/(10^(Rp/20)+1),10^(-As/20)];[N,fo,mo,W]=remezord(f,m,dev,Fs);%确定remez函数所需参数hn=remez(N,fo,mo,W);%调用remez函数进行设计hw=fft(hn,512);%求设计出的滤波器频率特性w=[0:511]*2/512;plot(w,20*log10(abs(hw)));grid;%画对数幅频特性图axis([0,max(w)/2,-90,5]);xlabel('w/pi');ylabel('Magnitude(dB)')line([0,0.4],[-3,-3]);%画线检验设计结果line([1/4,1/4],[-90,5]);line([5/16,5/16],[-90,5]);程序结束。3.仿真图像与结果用以上的程序我们可以得到在Matlab中的许多参数和图像,从而进一步分析我们的设计。首先引入程序输出的幅频特性图:〔如图2-4〕图2-4在Matlab中的程序图2-5程序输出的幅频特性图2-6ImpulseResponse图2-7MagnitudeandPhaseResponses图2-8PhaseDelay图2-9Pole,Zeroplot结论:从上面程序运行情况分析,观察程序输出的幅频特性图中横线为-3dB,两条竖线分别位于频率π/4和5π/16。显然,通带指标有富裕,零极点图反响出大局部零极点在圆内,过渡带宽度和阻带最小衰减刚好满足指标要求。4.窗函数选择法与规划思想表2-2窗函数选择指标名称近似过渡带宽最小阻带衰减精确过渡带宽矩形4π/M21dB1.8π/M巴特利特8π/M25dB6.1π/M汉宁8π/M44dB6.2π/M哈明8π/M51dB6.6π/M布莱克曼12π/M74dB11π/M取Kaiser窗时用MATLAB中的kaiserord函数来得到长度M在设计指标中没有直接给出窗函数的,可以利用下面这个表格进行筛选,具体方法如下:这个表格给出了近似过渡带宽、精确过渡带宽和最小阻带衰减,我们可以根据自己滤波器的参数来选择我们的窗函数,因为选择不同的窗函数设计出来的滤波器生成的过渡带宽度和阻带最小衰减是不同的。在这里我以一个例子来说明函数的选择方式:用窗函数法设计FIR带通滤波器。指标如下:高端通带截止频率高端阻带截止频率低端阻带截止频率低端通带截止频率通带最大衰减Rp=1dB阻带最小衰减Rs=60dB在这样一个例子中,可以看到它明确的给出了Rs=60dB来设置窗函数类型和阶次。表格中给出的blackman窗其滤波器阻带最小衰减是74dB,再利用给出的其他参数计算滤波器阶数。表中显示窗口长度M由过渡带宽度B=0.8π-0.65π=0.15π决定,而Blackman窗设计的滤波器过渡带宽度为12π/M,那么M=12/0.15=80。又因M=N+1,所以滤波器阶数N=79。在了解了怎么选择窗函数和计算滤波器阶数之后,本论文将针对实际FIR数字滤波器进行研究。已经给出了设计参数,下面开始利用MATLAB程序来设计这个滤波器。5.窗函数法程序描述与思想程序和对应的解释:%用窗函数法设计FIR带通滤波器clear;closeall;wls=0.2*pi;wlp=0.35*pi;whp=0.65*pi;B=wlp-wls;%这里是在计算过渡带宽N=ceil(12/0.15);%计算窗口长度wc=[wlp/pi-6/N,whp/pi+6/N];%设置理想带通截止频率hn=fir1(N-1,wc,Blackman(N));%设计滤波器参数6.理论计算方法总结仿真完成之后,掌握如何去利用已有的指标去设计一个滤波器,总的来说就是四项:通过傅里叶逆变换获得理想滤波器的单位脉冲响应hd(n)。分析给定参数,计算出滤波器的阶数,频率等等相关指标。把已经有的参数用程序函数表达出来,利用已经有的各种内置函数架设起滤波器。参看Matlab的输出图形和参数是否满足要求。2.1.5Matlab直接FDAtool设计方式解析FDATool(FilterDesign&AnalysisTool)是MATLAB信号处理工具箱里专用的滤波器设计分析工具,MATLAB6.0以上的版本还专门增加了滤波器设计工具箱(FilterDesignToolbox)。FDATool可以设计几乎所有的根本的常规滤波器,包括FIR和IIR的各种设计方法。它操作简单,方便灵活。FDATool界面总共分两大局部,一局部是DesignFilter,在界面的下半部,用来设置滤波器的设计参数,另一局部那么是特性区,在界面的上半局部,用来显示滤波器的各种特性。DesignFilter局部主要分为:FilterType(滤波器类型)选项,包括Lowpass(低通)、Highpass(高通)、Bandpass(带通)、Bandstop(带阻)和特殊的FIR滤波器。DesignMethod(设计方法)选项,包括IIR滤波器的Butterworth(巴特沃思)法、ChebyshevTypeI(切比雪夫I型)法、ChebyshevTypeII(切比雪夫II型)法、Elliptic(椭圆滤波器)法和FIR滤波器的Equiripple法、Least-Squares(最小乘方)法、Window(窗函数)法。FilterOrder(滤波器阶数)选项,定义滤波器的阶数,包括SpecifyOrder(指定阶数)和MinimumOrder(最小阶数)。在SpecifyOrder中填入所要设计的滤波器的阶数(N阶滤波器,SpecifyOrder=N-1),如果选择MinimumOrder那么MATLAB根据所选择的滤波器类型自动使用最小阶数。FrenquencySpecifications选项,可以详细定义频带的各参数,包括采样频率Fs和频带的截止频率。它的具体选项由FilterType选项和DesignMethod选项决定,例如Bandpass(带通)滤波器需要定义Fstop1(下阻带截止频率)、Fpass1(通带下限截止频率)、Fpass2(通带上限截止频率)、Fstop2(上阻带截止频率),而Lowpass(低通)滤波器只需要定义Fstop1、Fpass1。采用窗函数设计滤波器时,由于过渡带是由窗函数的类型和阶数所决定的,所以只需要定义通带截止频率,而不必定义阻带参数。MagnitudeSpecifications选项,可以定义幅值衰减的情况。例如设计带通滤波器时,可以定义Wstop1(频率Fstop1处的幅值衰减)、Wpass(通带范围内的幅值衰减)、Wstop2(频率Fstop2处的幅值衰减)。当采用窗函数设计时,通带截止频率处的幅值衰减固定为6db,所以不必定义。参数要求:采样频率fs=100Hz,通带下限截止频率fc1=10Hz,通带上限截止频率fc2=20Hz,过渡带宽6Hz,通阻带波动0.01,采用凯塞窗设计。针对一个含有5Hz、15Hz和30Hz的混和正弦波信号滤波器的阶数n=38,beta=3.4。本例中,首先在FilterType中选择Bandpass;在DesignMethod选项中选择FIRWindow,接着在Window选项中选取Kaiser,Beta值为3.4;指定FilterOrder项中的Specifyorder为38;采样频率Fs=100Hz,截止频率Fc1=10Hz,Fc2=20Hz。设置完以后点击窗口下方的DesignFilter,在窗口上方就会看到所设计滤波器的幅频响应,通过菜单项选择项Analysis还可以看到滤波器的相频响应、组延迟、脉冲响应、阶跃响应、零极点配置等。设计完成后将结果保存为kaiser15.fda文件。我们可以根据FDAtool工具得到我们的滤波器相关增益。系数转换成二进制码:假设采用乘法器,用1位整数位,1位符号位,共22位定点二进制数进行运算,负数用补码表示,由此将减法运算变成累加求和运算。各系数可用matlab编程转成二进制补码:/**FilterCoefficients(CSource)generatedbytheFilterDesignandAnalysisTool**GeneratedbyMATLAB(R)7.0andthe**Generatedon:22-Mar-201120:09:12**//**Discrete-TimeFIRFilter(real)**FilterStructure:Direct-FormFIR*FilterOrder:38*Stable:Yes*LinearPhase:Yes(Type1)*//*GeneraltypeconversionforMATLABgeneratedC-code*/#include"tmwtypes.h"/**Expectedpathtotmwtypes.h*D:\MATLAB7\extern\include\tmwtypes.h*/constintBL=39;constreal64_TB[39]={};这是一个非常典型的例子,可以清晰的看到利用Matlab提供的FDAtool设计滤波器的方便与快捷。比拟以上几种类型的滤波器参数,在给定的参数要求下,采用椭圆滤波器可以获得最正确的幅频响应特性,具有阶数低,过渡带窄等优点。虽然椭圆滤波器在通带也会产生波动,但考虑到波动处在可接受的范围内,仍然符合设计要求。但由直接型传输函数表达式来实现并不实用。因此如前所说,将其分解为多个二阶传输函数的级联形式。借助Matlab信号处理工具箱中函tf2sos(Transferfunctiontosecond-order-section)将传递函数转换为二阶级联形式。对于是数字信号,需要对先前分析计算中分解获得的二阶子系统的滤波器系数进行量化,即用一个固定的字长加以表示。量化过程中由于存在不同程度的量化误差,由此会导致滤波器的频率响应出现偏差,严重时会使滤波器的极点移到单位圆之外,使系统不稳定。为了获得最优的滤波器系数,量化的精度也相当重要。2.1.6FDAtool设计模板及设计结果图这里把上面的滤波器设计参数的总体图给出,如图2-10图2-10FIR带通滤波器总体设计参数2.2程序分析局部根据上述FIR低通数字滤波器的原理与滤波特性,我们在上面的软件实践中已经掌握了设计数字滤波器的方法并且成功的使用Matlab/Simulink进行了设计和仿真。通过以上的过程我们可以导出一定性能的FIR滤波器频率响应与抽头系数,然后用VerilogHDL语言设计和QUARTUSⅡ仿真FIR低通数字滤波器,实现用软件描述硬件的动作及功能,应用软件来实现数字滤波器的功能和时序仿真。FPGA可编程逻辑元件介绍EDA是ElectronicDesignAutomation的缩写,意为电子设计自动化,即利用计算机自动完成电子系统的设计。EDA技术是以计算机和微电子技术为先导,聚集了计算机图形学、拓扑、逻辑学、微电子工艺与结构学和计算数学等多种计算机应用学科最新成果的先进技术。它与电子技术、微电子技术的开展密切相关,吸收了计算机领域的大多数最新研究成果,以高性能的计算机作为工作工具,在EDA软件平台土,根据硬件描述语言HDL完成的设计文件,自动地完成逻辑编译、化简、分割、综合及优化、布线、仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。可编程逻辑器PLD(ProgrammableLogicDevices)是ASIC(ApplicationSpecificIntegratedCircuits的一个重要分支。ASIC按制造方法又可分为全定制(FullCustom)产品、半定制(semi-custom)产品和可编程逻辑器件(PLD)。前两种ASIC的设计和制造都离不开器件生产厂家,用户主动性较差。随着微电子技术的开展,设计师们更愿意自己设计专用集成电路芯片,并尽可能缩短设计周期,最好是在实验室里就能设计出适宜的ASIC芯片,并且立即投入实际应用之中,在使用中也能比拟方便的对设计进行修改。可编程逻辑器件就是为满足用户的这一需求应运而生的。使用FPGA器件设计数字电路,不仅可以简化设计过程,而且可以降低整个系统的体积和本钱,增加系统的可靠性。它们无需花费传统意义下制造集成电路所需大量时间和精力,防止了投资风险,成为电子器件行业中开展最快的一族。使用FPGA器件设计数字系统电路的主要优点如下:1.设计灵活使用FPGA器件,可不受标准系列器件在逻辑功能上的限制。而且修改逻辑可在系统设计和使用过程的任一阶段中进行,并且只须通过对所用的FPGA器件进行重新编程即可完成,给系统设计提供了很大的灵活性。2.增大功能密集度功能密集度是指在给定的空间能集成的逻辑功能数量。可编程逻辑芯片内的组件门数高,一片FPGA可代替几片、几十片乃至几百片中小规模的数字集成电路芯片。用FPGA器件实现数字系统时用的芯片数量少,从而减少芯片的使用数目,减少印刷线路板面积和印刷线路板数目,最终导致系统规模的全面缩减。3.提高可靠性减少芯片和印刷板数目,不仅能缩小系统规模,而且它还极大的提高了系统的可靠性。具有较高集成度的系统比用许多低集成度的标准组件设计的相同系统具有高得多的可靠性。使用FPGA器件减少了实现系统所需要的芯片数目,在印刷线路板上的引线以及焊点数量也随之减少,所以系统的可靠性得以提高。4.缩短设计周期基于FPGA器件的可编程性和灵活性,用它来设计一个系统所需时间比传统方法大为缩短。FPGA器件集成度高,使用时印刷线路板电路布局布线简单。同时,在样机设计成功后,由于开发工具先进,自动化程度高,对其进行逻辑修改也十分简便迅速。因此,使用FPGA器件可大大缩短系统的设计周期,加快产品投放市场的速度,提高产品的竞争能力。5.工作速度快FPGA/CPLD器件的工作速度快,一般可以到达几百兆赫兹,远远大于DPS器件。同时,使用FPGA器件后实现系统所需要的电路级数又少,因而整个系统的工作速度会得到提高。6.增加系统的保密性能很多FPGA器件都具有加密功能,在系统中广泛的使用FPGA器件可以有效防止产品被他人非法仿制。7.降低本钱使用FPGA器件实现数字系统设计时,如果仅从器件本身的价格考虑,有时还看不出来它的优势,但是影响系统本钱的因素是多方面的,综合考虑,使用FPGA的本钱优越性是很明显的。首先,使用FPGA器件修改设计方便,设计周期缩短,使系统的研制开发费用降低;其次,FPGA器件可使印刷线路板面积和需要的插件减少,从而使系统的制造费用降低;再次,使用FPGA器件能使系统的可靠性提高,维修工作量减少,进而使系统的维修效劳费用降低。总之,使用FPGA器件进行系统设计能节约本钱。2.2.2QuartusⅡ及VerilogHDL介绍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作为一种可编程逻辑的设计环境,由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢送。VerilogHDL是目前应用最为广泛的硬件描述语言。VerilogHDL可以用来进行各种层次的逻辑设计,也可以进行数字系统的逻辑综合,仿真验证和时序分析等。该语言适合算法级,存放器级,逻辑级,门级和幅员级等各个层次的设计和描述。VerilogHDL进行设计最大的优点是其工艺无关性。这使得我们在功能设计,逻辑验证阶段可以不必过多考虑门级及工艺实现的具体细节,只需根据系统设计的要求施加不同的约束条件,即可设计出实际电路。VerilogHDL是一种硬件描述语言(hardwaredescriptionlanguage),为了制作数字电路而用来描述ASIC和FPGA的设计之用。VerilogHDL的设计者想要以C编程语言为根底设计一种语言,可以使工程师比拟容易学习。2.2.3实际滤波器程序设计〔11阶FIR数字滤波器〕FPGA实现FIR滤波器,首先进行指标选定和Matlab软件参数仿真,然后执行基于Verilog方法的硬件实现中用移位方法代替了乘法运算。表2-3设计指标要求设计指标上下通截止频率阶数据宽度低通0.85(1对应Fs/2)118bits根据以上指标,利用MATLAB中的FIR滤波器系数设计命令fir1(10,0.85)所设计滤波器的系数。表2-4Matlab中导出的滤波器系数MATLAB软件仿真的滤波器的抽头系数及其幅度频响特性如下列图2-11所示。图2-1111阶FIR滤波器的抽头系数和幅频特性曲线可见抽头系数是奇对称的,即:,。FIR滤波器采用对称结构,每个抽头的输出分别乘以相应加权的二进制值,再将结果相加。同时,利用滤波器系数的及对称的特性,对输入信号进行如下等效:,。2.2.4.VerilogHDL的实现这个方法的实现中,使用了移位代替乘法运算来实现滤波器乘加的方法。由于滤波器系数都是小数,所以我们先左移7位〔即放大128倍〕,再用相应的移位来近似这些系数,最后经过乘加运算得到结果,对这个结果再右移7位〔即缩小128倍〕即可得出正确的结果。各个系数的移位情况如下:其中2表示左移1位,1表示不移位,0.5表示右移1位,其他依次类推:128×h(1)=128×0.0127=1.6256=1+0.5+0.125128×h(2)=128×0.0417=5.3376=4+1+0.25+0.625+0.03125128×h(3)=128×0.0878=11.2384=8+4-1+0.25128×h(4)=128×0.1318=16.8704=16+1-0.125128×h(5)=128×0.8500=108.800=128-16-4+0.25+0.0625这样,我们就可以把这个11阶FIR数字滤波器的输出用一下的算式得到表2-5Verilog方法设计FIR的实验数据图2-12系数放大后求SUM计算得到结果后再将sum右移7位,即可得到正确结果。程序的功能仿真结果如下列图2-12所示。图2-13功能仿真由上图2-12可以看出,tap0到tap10是输入x的依次延时1个时钟周期,结果sum输出相对于输入x延迟了2个时钟周期,y输出相对于sum输出延迟了1个时钟周期,这和程序设计相符合。同时,比照程序运行结果和MATLAB的计算结果〔如章节开头表格所示〕,可知,二者结果是一致的,其中个别数据的小误差是由于移位取代小数乘法运算带来的误差。因此,程序设计是正确的。于是,根据以上所有思想我们可以得出以下11阶FIR数字滤波器的Verilog程序如下://///////////////////////////////////////////////////////////////////////////////Company://Engineer://CreateDate:17:01:3811/03/06//DesignName://ModuleName:ycj//ProjectName://TargetDevice://Toolversions://Description:用Verilog编写的fir滤波器程序//Dependencies://Revision://Revision0.01-FileCreated//AdditionalComments:////////////////////////////////////////////////////////////////modulefirv2(clk,x,y);inputclk;input[7:0]x;output[25:0]y;reg[26:0]y;reg[7:0]x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16;wire[21:0]acc1,acc2,acc3,acc4,acc5,acc6,acc7,acc8,acc9,acc10,acc11,acc12,acc13,acc14,acc15,acc16,acc17;reg[8:0]sxin[0:32];reg[5:0]i,k;reg[8:0]xx[16:0];parameterc0=-21,c1=-8,c2=22,c3=34,c4=6,c5=-34,c6=-31,c7=32,c8=87,c9=32,c10=-154,c11=-321,c12=-217,c13=321,c14=1185,c15=1996,c16=2328;always@(posedgeclk)beginxx[16]<=sxin[16];for(i=0;i<16;i=i+1)xx[i]<=sxin[i]+sxin[32-i];for(k=32;k>0;k=k-1)sxin[k]<=sxin[k-1];sxin[0]<={x[7],x};endmult13_8uut0(clk,c0,xx[0],acc1);mult13_8uut1(clk,c1,xx[1],acc2);mult13_8uut2(clk,c2,xx[2],acc3);mult13_8uut3(clk,c3,xx[3],acc4);mult13_8uut4(clk,c4,xx[4],acc5);mult13_8uut5(clk,c5,xx[5],acc6);mult13_8uut6(clk,c6,xx[6],acc7);mult13_8uut7(clk,c7,xx[7],acc8);mult13_8uut8(clk,c8,xx[8],acc9);mult13_8uut9(clk,c9,xx[9],acc10);mult13_8uut10(clk,c10,xx[10],acc11);mult13_8uut11(clk,c11,xx[11],acc12);mult13_8uut12(clk,c12,xx[12],acc13);mult13_8uut13(clk,c13,xx[13],acc14);mult13_8uut14(clk,c14,xx[14],acc15);mult13_8uut15(clk,c15,xx[15],acc16);mult13_8uut16(clk,c16,xx[16],acc17);always@(posedgeclk)beginy<={acc16[1],acc16[1],acc16[1],acc16[1],acc16[1],acc16}+{acc17[1],acc17[1],acc17[1],acc17[1],acc17[1],acc17}+{acc15[1],acc15[1],acc15[1],acc15[1],acc15[1],acc15}+{acc14[1],acc14[1],acc14[1],acc14[1],acc14[1],acc14}+{acc13[1],acc13[1],acc13[1],acc13[1],acc13[1],acc13}+{acc12[1],acc12[1],acc12[1],acc12[1],acc12[1],acc12}+{acc11[1],acc11[1],acc11[1],acc11[1],acc11[1],acc11}+{acc10[1],acc10[1],acc10[1],acc10[1],acc10[1],acc10}+{acc9[1],acc9[1],acc9[1],acc9[1],acc9[1],acc9}+{acc8[1],acc8[1],acc8[1],acc8[1],acc8[1],acc8}+{acc7[1],acc7[1],acc7[1],acc7[1],acc7[1],acc7}+{acc6[1],acc6[1],acc6[1],acc6[1],acc6[1],acc6}+{acc5[1],acc5[1],acc5[1],acc5[1],acc5[1],acc5}+{acc4[1],acc4[1],acc4[1],acc4[1],acc4[1],acc4}+{acc3[1],acc3[1],acc3[1],acc3[1],acc3[1],acc3}+{acc2[1],acc2[1],acc2[1],acc2[1],acc2[1],acc2}+{acc1[1],acc1[1],acc1[1],acc1[1],acc1[1],acc1};endendmodule1.分析程序设计使用MAC单元完成乘加运算〔包括单MAC和多MAC的情况〕这个方法可以利用FPGA中已有的MAC单元〔像XilinxSpartan3E-100中有四个乘加单元〕,只要设计好数据运算流程,就能方便高效地实现FIR运算。使用MAC单元还有一个优点是系数可以存成系数表,可以方便地修改,这是移位方法代替乘法运算所不及的。使用移位代替乘法运算这个方法的优点是速度快,例如11阶的滤波器,完成一次运算需要11次乘法,如果使用单MAC的话,需要11个时钟周期来完成,而使用移位方法可以在一个时钟周期完成11个乘法运算;缺点是需要另外去完成滤波系数到移位位数的换算,如果修改滤波系数的话,程序修改将会比拟麻烦,同时硬件资源也要使用多一些。t*0.125={t[7],t[7],t[7],t[7:3]}

t*0.125

=

t/8

=

t>>3;

t为有符号数,所以是带符号右移,于是t>>3

={t[7],t[7],t[7],t[7:3]}

之所以这么些就是为了节省资源,提高频率以

-4*0.5

为例

-4的原码:1000

0100B

补码:1111

1100B

-4>>1=0111

1110

而符号位不能变应用原来的位代替

1111

1110B

的原码

1000

0010B

=-22.对程序设计中的问题分析与总结在最开始的设计中,本文初始方案使用乘法单元。但是在程序设计的过程中我们遇见了实数乘法的问题,程序的运行遇到了困难,在与指导老师的研究中我们发现问题出在实数乘法的问题上。在Verilog的运算中实数乘法需要特殊的小数乘法器来单元来实现。在原来的38阶滤波器的设计中出现了这样子的问题。我们使用过这样的程序:reg[63:0]filter_in_force[0:3344];reg[63:0]filter_out_expected[0:3344];//Functiondefinitionsfunctionrealabs_real;inputrealarg;beginabs_real=arg>0?arg:-arg;endendfunction//functionabs_real//ComponentInstancesfilteru_filter(.clk(clk),.clk_enable(clk_enable),.reset(reset),.filter_in(filter_in),.filter_out(filter_out));initialbegin//Constantsfilter_in_force[0]<=$realtobits(1.0000000000000000E+000);filter_in_force[1]<=$realtobits(0.0000000000000000E+000);filter_in_force[2]<=$realtobits(0.0000000000000000E+000);filter_in_force[3]<=$realtobits(0.0000000000000000E+000);…系统无法实现real值得计算,于是这里需要我们用小数乘法器进行特殊单元的方案解决。于是我们要进行小数乘法器的设计。3.小数乘法器介绍及在设计中的作用随着FPGA的开展以及相应EDA软件工具的成熟,FPGA在高速数字信号处理领域得到了越来越广泛的应用。而乘法,尤其是浮点乘法运算是数值计算和数据分析中最常用的运算之一。目前,多数FPGA上可以实现整数和标准逻辑矢量的乘法,但不支持浮点乘法运算,因此使得FPGA在数值计算、数据分析和信号处理等方面受到了限制。本文采用适合于FPGA实现的自定义26位浮点数据格式,利用改良的基4Booth编码运算方式,以及CSA和4-2压缩器综合的Wallace树形结构,减少了局部积,使系统具有高速度,低功耗的特点,并且结构规那么。在尾数的舍入中采用了基于预测和选择的舍入方法,进一步提高了运算的速度,优化了乘法器的性能。4.小数乘法器程序设计与仿真modulefix_mult(clk,rst_n,in_a,in_b,x1,x2,x3,x4,x5,x6,x7,y_out);inputclk,rst_n;//时钟和复位信号input[31:0]in_a,in_b;//输入的被乘数和乘数output[31:0]y_out;//输出的乘积/*存放器类型变量为了能更清楚的了解全处理过程,特地设计为输出的,不然仿真可能会被综合掉*/output[15:0]x1,x2,x3,x4;output[0:0]x5;output[29:0]x6;output[31:0]x7;/////////////////////////////////////////////////////reg[31:0]y_out;reg[15:0]x1,x2,x3,x4;reg[0:0]x5;reg[29:0]x6;reg[31:0]x7;always@(posedgeclk)beginif(!rst_n)//复位时,全部存放器变量清零beginx1<=16'b0;x2<=16'b0;x3<=16'b0;x4<=16'b0;x5<=1'b0;x6<=30'b0;x7<=32'b0;y_out<=32'b0;endelse/beginx1<=in_a[31:16];//截取16位被乘数,x2<=in_b[31:16];//截取16位乘数x3<=(x1[15]==0)?x1:{x1[15],~x1[14:0]+1'b1};//据最高位判断是否为负数,//假设负数那么把补码转成原码x4<=(x2[15]==0)?x2:{x2[15],~x2[14:0]+1'b1};x5<=x3[15]^x4[15];//两数符号位相异或,得到乘积的符号位x6<=x3[14:0]*x4[14:0];//两数的数据位相乘x7<={x5,x6,1'b0};//乘积由1位符号位和30位数据位及1位无关组成;//因为是小数,往低位生长,所以无关位放置最低位y_out<=(x7[31]==0)?x7:{x7[31],~x7[30:0]+1'b1};endendendmodule小数乘法器的仿真结果如下列图2-14所示:图2-14小数乘法器仿真结果全过程可以看成:把32位的小数截取高16位左移16位,变为16位整数相乘得到32位整数乘积后,右移32位调整无关位的位置得到32位小数,这样就可以完成早期程序中的小数乘法功能,然后来进行设计中的FPGA数字滤波器设计的优化。在先前的设计中我们使用Matlab进行综合仿真设计,并且借助FDAtool设计出滤波器。在Quartus2的仿真中我们发现程序无法正常的完成运行,究其原因在于小数乘法器的问题。在原来的滤波器中需要对每一个参数进行单独设置,这样会使得程序占有巨量的篇幅大大的增加了工作量和容错度。于是,我们需求另外一种方法来解决这个问题,后来我们研究了移位算法。利用移位来把小数运算转换成整数运算,这样我们的11阶滤波器程序大大减少篇幅同时也增加了程序的可读程度和稳定程度。3滤波器仿真滤波3.1设置混合信号在Matlab中进行我们设计过的FIR数字滤

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论