LecFIRDigitalFilters实时信号处理系统_第1页
LecFIRDigitalFilters实时信号处理系统_第2页
LecFIRDigitalFilters实时信号处理系统_第3页
LecFIRDigitalFilters实时信号处理系统_第4页
LecFIRDigitalFilters实时信号处理系统_第5页
已阅读5页,还剩93页未读 继续免费阅读

下载本文档

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

文档简介

LecFIRDigitalFilters实时信号处理系统演示文稿目前一页\总数九十八页\编于十四点LecFIRDigitalFilters实时信号处理系统目前二页\总数九十八页\编于十四点第3章FIR数字滤波器目前三页\总数九十八页\编于十四点讲授内容安排1.数字滤波器和FIR理论转置结构FIR滤波器FIR滤波器的对称性线性相位FIR滤波器2.FIR滤波器设计直接窗函数设计法等纹波设计法3.常系数FIR滤波器设计直接FIR设计转置结构FIR滤波器用分布式算法设计FIR滤波器IP核FIR滤波器设计基于DA和基于RAG的FIR滤波器比较目前四页\总数九十八页\编于十四点I.数字滤波器和FIR理论目前五页\总数九十八页\编于十四点数字滤波器(1)线性时不变滤波器(LinearTime-Invariant,LTI)有限脉冲响应滤波器(FiniteImpulseResponse,FIR)采样数量有限,滤波器在每个采样时刻进行有限次卷积无限脉冲响应滤波器(InfiniteImpulseResponse,IIR)滤波器在每个采样时刻进行无限次卷积目前六页\总数九十八页\编于十四点数字滤波器(2)模拟滤波器利用微分方程和Laplace变换进行建模与分析利用RLC元件和运算放大器实现可以用作IIR滤波器设计的原型数字滤波器是数字信号处理的主要组成部分正在逐渐替代模拟滤波器IIR滤波器以模拟滤波器为原型进行设计,FIR滤波器直接用数字方法进行设计目前七页\总数九十八页\编于十四点FIR滤波器理论(1)对于输入时间序列x[n],常系数L阶FIR滤波器的输出y[n]为

为滤波器的系数,对应FIR滤波器的脉冲响应。用Z域表示F(z)是FIR滤波器的传递函数目前八页\总数九十八页\编于十四点直接形式FIR滤波器结构目前九页\总数九十八页\编于十四点关键路径:TA

:加法器的延迟,TM

:乘法器的延迟关键路径延迟:1TM+(M-1)TA

面积:M-1个寄存器,M个乘法器,M-1个加法器迟滞:迟滞为x(0)和y(0),x(1)和y(1),……之间的时钟周期数。0时钟周期迟滞。运算复杂度:M次乘法/采样数+M-1次加法/采样数x(n)Z-1Z-1Z-1h0h1h2hM-1y(n)目前十页\总数九十八页\编于十四点FIR滤波器理论(2)FIR滤波器仅有零点存在,系统稳定多项式F(z)的根确定零点CIC滤波器(CascadeIntegratorComb

Filter,级联积分梳状滤波器

)具有递归性,但递归部分产生的极点被非递归部分抵消,只有零点。非递归实现滤波器均为FIR滤波器,但递归实现滤波器可以是FIR滤波器,也可以是IIR滤波器。目前十一页\总数九十八页\编于十四点转置结构FIR滤波器转置结构FIR滤波器是FIR滤波器的常见实现方式,结构上具有如下优点:不需要给输入x[n]提供额外的移位寄存器;不需要为了获得高流量而在乘积的加法器树中加入流水线不改变系统功能构造方法——利用信号流图反转,是直接形式FIR滤波器的一种变形:将输入和输出互换;颠倒信号流的方向;用分支(fork)替换加法器,反之亦然。目前十二页\总数九十八页\编于十四点转置结构FIR滤波器结构目前十三页\总数九十八页\编于十四点x(n)Z-1Z-1Z-1hM-1hM-2hM-3h0y(n)采用信号流图反转来缩短关键路径长度

转置结构关键路径延迟:1TM+1TA

面积:M-1个寄存器,M个乘法器,M-1个加法器迟滞:0时钟周期迟滞运算复杂度:M次乘法/采样数+M-1次加法/采样数缺点:寄存器的大小取决于量化机制x(n)的扇出太多目前十四页\总数九十八页\编于十四点FIR滤波器VHDL设计(1)举例3.1:可编程FIR滤波器考虑线性卷积和 数据(或系数)的位宽为Bx,滤波器长度为L,对无符号SOP运算提供log2L个保护位,对有符号SOP运算提供(log2L)−1个保护位。

例如,有符号数据(或系数)的位宽为9,L=4,则加法器的位宽为9+9+log24−1=19.目前十五页\总数九十八页\编于十四点FIR滤波器VHDL设计(2)-ThisisagenericFIRfiltergenerator--ItusesW1bitdata/coefficientsbitsLIBRARYlpm;--UsingpredefinedpackagesUSElpm.lpm_components.ALL;LIBRARYieee;USEieee.std_logic_1164.ALL;USEieee.std_logic_arith.ALL;USEieee.std_logic_unsigned.ALL;ENTITYfir_genIS------>InterfaceGENERIC(W1:INTEGER:=9;--InputbitwidthW2:INTEGER:=18;--Multiplierbitwidth2*W1W3:INTEGER:=19;--Adderwidth=W2+log2(L)-1W4:INTEGER:=11;--OutputbitwidthL:INTEGER:=4;--FilterlengthMpipe:INTEGER:=3--Pipelinestepsofmultiplier);目前十六页\总数九十八页\编于十四点FIR滤波器VHDL设计(3)PORT(clk:INSTD_LOGIC;Load_x:INSTD_LOGIC;x_in:INSTD_LOGIC_VECTOR(W1-1DOWNTO0);c_in:INSTD_LOGIC_VECTOR(W1-1DOWNTO0);y_out:OUTSTD_LOGIC_VECTOR(W4-1DOWNTO0));ENDfir_gen;ARCHITECTUREflexOFfir_genISSUBTYPEN1BITISSTD_LOGIC_VECTOR(W1-1DOWNTO0);SUBTYPEN2BITISSTD_LOGIC_VECTOR(W2-1DOWNTO0);SUBTYPEN3BITISSTD_LOGIC_VECTOR(W3-1DOWNTO0);TYPEARRAY_N1BITISARRAY(0TOL-1)OFN1BIT;TYPEARRAY_N2BITISARRAY(0TOL-1)OFN2BIT;TYPEARRAY_N3BITISARRAY(0TOL-1)OFN3BIT;SIGNALx:N1BIT;SIGNALy:N3BIT;SIGNALc:ARRAY_N1BIT;--CoefficientarraySIGNALp:ARRAY_N2BIT;--ProductarraySIGNALa:ARRAY_N3BIT;--Adderarray目前十七页\总数九十八页\编于十四点FIR滤波器VHDL设计(4)BEGINLoad:PROCESS------>LoaddataorcoefficientBEGINWAITUNTILclk='1';IF(Load_x='0')THENc(L-1)<=c_in;--StorecoefficientinregisterFORIINL-2DOWNTO0LOOP--Coefficientsshiftonec(I)<=c(I+1);ENDLOOP;ELSEx<=x_in;--GetonedatasampleatatimeENDIF;ENDPROCESSLoad;SOP:PROCESS(clk)------>Computesum-of-productsBEGINIFclk'eventand(clk='1')THENFORIIN0TOL-2LOOP--Computethetransposeda(I)<=(p(I)(W2-1)&p(I))+a(I+1);--filteraddsENDLOOP;a(L-1)<=p(L-1)(W2-1)&p(L-1);--FirstTAPhasENDIF;--onlyaregistery<=a(0);ENDPROCESSSOP;目前十八页\总数九十八页\编于十四点FIR滤波器VHDL设计(5)--InstantiateLpipelinedmultiplierMulGen:FORIIN0TOL-1GENERATEMuls:lpm_mult--Multiplyp(i)=c(i)*x;GENERICMAP(LPM_WIDTHA=>W1,LPM_WIDTHB=>W1,LPM_PIPELINE=>Mpipe,LPM_REPRESENTATION=>"SIGNED",LPM_WIDTHP=>W2,LPM_WIDTHS=>W2)PORTMAP(clock=>clk,dataa=>x,datab=>c(I),result=>p(I));ENDGENERATE;y_out<=y(W3-1DOWNTOW3-W4);ENDflex;目前十九页\总数九十八页\编于十四点FIR滤波器VHDL设计(6)设计使用了184个LE和4个嵌入式乘法器,运行速度为329.06Hz.仿真实例:长度为4的DaubechiesDB4滤波器将系数量化为9位(含1个符号位),得到目前二十页\总数九十八页\编于十四点FIR滤波器的对称性(1)利用对称性可以简化滤波器结构FIR滤波器冲激响应的中心点可作为对称的中心点。为方便起见,将这个点定义为第0个采样时刻。这样的的滤波器具有因果性。对于奇数阶FIR滤波器,其因果数学模型为:目前二十一页\总数九十八页\编于十四点FIR滤波器的对称性(2)FIR滤波器的频率响应可通过计算单位圆上的传递函数得到,令,有:被称为是滤波器的幅频响应,被称为相位响应,并满足数字滤波器通常采用相位和幅度来表示特性,而不常用z域传递函数或复域变换。目前二十二页\总数九十八页\编于十四点线性相位FIR滤波器(1)在诸如通信和图像处理等应用系统中,能够在一定频率范围内保持相位的完整性是所期望的一项重要的性能指标。在设计滤波器时,必须要确立线性相位对频率的关系。组延迟(GroupDelay)—用来衡量系统的相位线性的标准理想的线性相位滤波器在一定频率范围内的组延迟恒为常数。若滤波器为对称或反对称,则可实现线性相位,并可以采用因果结构实现,并利用对称性来简化系统结构。目前二十三页\总数九十八页\编于十四点线性相位FIR滤波器(2)只有当频率响应F(ω)是纯实或纯虚函数时,即滤波器脉冲响应保持偶对称或奇对称时,组延迟为常数,即例如,一个奇数阶偶对称的FIR滤波器的频率响应为:目前二十四页\总数九十八页\编于十四点另外一种表示:f(n)=±f(L-1-n),

L为奇、偶皆可。线性相位结构能够减小电路面积举例:L为偶数关键路径延迟:1TM+(L/2)TA

面积:L-1寄存器L/2乘法器L-1加法器目前二十五页\总数九十八页\编于十四点线性相位FIR滤波器(3) 脉冲响应(滤波器系数)为偶对称,FIR滤波器可以根据对称性去掉不必要的乘法器,将乘法器的数量减少到直接形式的一半,加法器数量保持为L−1不变。目前二十六页\总数九十八页\编于十四点线性相位FIR滤波器(4)线性相位FIR滤波器的4种相位目前二十七页\总数九十八页\编于十四点流水线FIR滤波器举例:粗粒度流水线FIR滤波器流水线只能在信号流图的前馈割集插入x(n)Z-1Z-1Z-1h0h1h2hM-1Z-1Z-1目前二十八页\总数九十八页\编于十四点细粒度流水线细粒度流水线可用来缩短转置结构FIR滤波器的关键路径。x(n)Z-1Z-1Z-1hM-1hM-2hM-3h0y(n)Z-1在此插入寄存器目前二十九页\总数九十八页\编于十四点并行FIR滤波器提高吞吐量,不改变关键路径长度用途之一:解决输入/输出瓶颈问题h0h1h2x(3n+2)x(3n+1)x(3n)y(3n+2)h2h0h1y(3n+1)h1h2h0y(3n)Z-1Z-1目前三十页\总数九十八页\编于十四点II.FIR滤波器设计目前三十一页\总数九十八页\编于十四点FIR滤波器设计(1)FIR数字滤波器设计步骤:需求分析,确定性能指标;建立算法模型,用MatlabSignalProcessingToolbox工具包建立系统级或算法级模型;等纹波FIR滤波器设计;窗函数FIR滤波器设计;(最小二乘法FIR滤波器设计)(IIR滤波器设计(Butterworth,ChebyshevI和II,椭圆))模型仿真,取得模型参数;根据Matlab算法模型构建电路(或程序);电路(或程序)验证。目前三十二页\总数九十八页\编于十四点FIR滤波器设计(2)若滤波器的理想频率响应特性为,则FIR滤波器的设计问题在于:

寻找传递函数,使

逼近;若要求FIR滤波器具有线性相位特性,则脉冲响应必须满足对称条件。线性相位FIR滤波器常用设计方法窗函数法☺频率采样法等纹波法☺目前三十三页\总数九十八页\编于十四点直接窗函数设计法(1)直接FIR滤波器根据DFT(离散傅立叶变换,DiscreteFourierTransform)在时域和频域之间的映射关系,用DFT计算出与目标滤波器频率响应相近似的滤波器系数。实际信号的频谱具有埃尔米特共轭性(Hermitianconjugate),即实部频谱为偶对称,虚部频谱为奇对称。若综合出的滤波器仅有实系数,则目标DFT频谱必须是埃尔米特共轭性的,即。目前三十四页\总数九十八页\编于十四点直接窗函数设计法(2)要得到一个因果的有限长的滤波器,最直接的方法是截断,即用一个窗函数对进行加窗处理:选择窗函数的形状和长度是窗函数法的关键!不同窗函数的区别在于阻尼振荡和过渡频带宽度扩展之间折衷能力不同。目前三十五页\总数九十八页\编于十四点直接窗函数设计法(3)矩形窗的卷积过程目前三十六页\总数九十八页\编于十四点直接窗函数设计法(4)矩形窗对理想频率响应产生两个影响:使理想频率特性不连续点ω=ωe处,形成了一个过渡频带,宽度等于矩形窗的频率响应WR(ω)的主瓣宽度△ω=4π/N。在截至频率ωc的两边ω=ωc

±2π/N处(即过渡带的两边),F(ω)出现最大峰值,肩峰的两侧出现起伏振荡,振荡幅度取决于旁瓣的相对幅度,振荡快慢取决于WR(ω)波动的快慢。目前三十七页\总数九十八页\编于十四点直接窗函数设计法(5)当窗口长度N增加,在主瓣附近窗的频率响应为随着x变大,曲线波动的频率加快,主瓣和旁瓣幅度都变大,但相对比例保持不变。这个比例由sinx/x决定,即由矩形窗函数的形状决定。当长度N增加时,只会减小过渡带宽4π/N,而不会改变肩峰的相对值。因而,当长度N增加时,只会减小过渡带宽4π/N

,而不会改变肩峰的相对值。目前三十八页\总数九十八页\编于十四点直接窗函数设计法(6)长度分别为16和128的FIR滤波器的脉冲响应和通频带对比与理想滤波器的最大差别出现在过渡频带的边缘,产生吉布斯阻尼振荡现象。这是由直接逆DFT运算隐含产生的。提高滤波器的长度并不能消除阻尼振荡,可以通过加“窗”消除。目前三十九页\总数九十八页\编于十四点直接窗函数设计法(7)吉布斯(Gibbs)效应在矩形窗情况下,最大相对肩峰值为8.95%,N增加时,4π/N减小,起伏振荡变密,但最大肩峰则总是8.95%。由于窗谱肩峰的存在,影响到F(ω)通带的平坦和阻带的衰减,使阻带最小衰减只有21dB左右,因此在实际中矩形窗很少采用。为了消除吉布斯效应,取得较好频率特性,一般采用其他类型的窗函数,对进行加窗处理。目前四十页\总数九十八页\编于十四点直接窗函数设计法(8)常用窗函数矩形窗三角(Bartlett)窗Hanning窗Hamming窗Blackman窗Kaiser窗目前四十一页\总数九十八页\编于十四点直接窗函数设计法(9)等效Kaiserβ参数通过调节β参数来调整滤波器的阻尼振荡。

其中A=20log10εr,既是止带抑制又是通带纹波的dB值。Kaiser窗函数长度的估算公式,误差为±

2个抽头。目前四十二页\总数九十八页\编于十四点等纹波设计法(1)如何减少滤波器传递函数与期望传递函数之间的偏差(纹波误差)?纹波是除了通带频率、止带频率和增益之外的一项重要指标。采用等纹波算法(极小-极大算法)最小化滤波器与理想传递函数之间的最大纹波误差。常用的等纹波算法:低通滤波器设计Matlab函数:firpm(L,F,A,W)Hilbert滤波器对通带内所有频率都产生90度相移的单位幅值滤波器Matlab函数:firpm(L,F,A,’hilbert’)微分滤波器频率幅值和ω呈正比线性增加Matlab函数:firpm(L,F,A,’differentiator’)目前四十三页\总数九十八页\编于十四点将指定的频带记为A(包括通带和阻带),P-M等波纹最佳逼近的设计的准则是,选择FIR滤波器的单位脉冲响应f(n)使得在A内误差函数的最大绝对值最小。等纹波设计法(2)用Park-McClellan迭代方法设计等纹波滤波器设希望设计的滤波器幅度响应为,实际逼近的幅度响应为,加权误差为,则:将该最小值记为,则有:

目前四十四页\总数九十八页\编于十四点等纹波设计法(3)Park-McClellan迭代方法基于交替定理交替定理(AlternationTheorem) 设P(ω)为cos(nω)的线性组合,即 则P(ω)在A上有唯一的最佳逼近函数的充要条件是加权误差函数在A内至少存在r+1个极值频率点ωi, 且则存在符合公差设计方案的唯一的Chebyshev多项式,且该多项式具有最小长度。目前四十五页\总数九十八页\编于十四点等纹波设计法(4)公差设计方案举例低通滤波器的长度(多项式的长度)为:目前四十六页\总数九十八页\编于十四点窗口法与等纹波法比较目前四十七页\总数九十八页\编于十四点III.常系数FIR滤波器设计目前四十八页\总数九十八页\编于十四点直接FIR滤波器设计(1)构造方式:用HDL对算法(电路)过程行为建模不同的综合工具可能给出的结果不同的电路结构元件实例化(ComponentInstantiation)电路网络结构完全由设计者掌握滤波器系数编码—正CSD编码方式用正CSD编码的系数具有较少的非零项在计算SOP时再考虑系数的符号浮点系数到定点系数的转换建立在浮点系数的定点FIR滤波器的实现,需要通过仿真或代数分析进行验证,以确保设计规范的一致性。目前四十九页\总数九十八页\编于十四点直接FIR滤波器设计(2)系统动态溢出保护最坏情况下L阶FIR滤波器的动态范围增长位数G为:总位宽=输入位宽+动态增长位数G举例:

FIR滤波器脉冲响应为f[k]={-1.0,3.75,3.75,-1.0}

则滤波器内部数据寄存器位数至少要比输入多4位才能保证不溢出;

目前五十页\总数九十八页\编于十四点直接FIR滤波器设计举例(1)4抽头直接FIR滤波器系数为f[k]={-1.0,3.75,3.75,-1.0}3.7510=21+20+2−1+2−2=11.112目前五十一页\总数九十八页\编于十四点直接FIR滤波器设计举例(2)PACKAGEeight_bit_intIS--UserdefinedtypesSUBTYPEBYTEISINTEGERRANGE-128TO127;TYPEARRAY_BYTEISARRAY(0TO3)OFBYTE;ENDeight_bit_int;LIBRARYwork;USEwork.eight_bit_int.ALL;LIBRARYieee;USEieee.std_logic_1164.ALL;USEieee.std_logic_arith.ALL;ENTITYfir_srgIS------>InterfacePORT(clk:INSTD_LOGIC;x:INBYTE;y:OUTBYTE);ENDfir_srg;ARCHITECTUREflexOFfir_srgISSIGNALtap:ARRAY_BYTE;--Tappeddelaylineofbytes目前五十二页\总数九十八页\编于十四点直接FIR滤波器设计举例(3)BEGINp1:PROCESS------>BehavioralStyleBEGINWAITUNTILclk='1';--Computeoutputywiththefiltercoefficientsweight.--Thecoefficientsare[-13.753.75-1].--DivisionforAlteraVHDLisonlyallowedfor--powers-of-twovalues!y<=2*tap(1)+tap(1)+tap(1)/2+tap(1)/4+2*tap(2)+tap(2)+tap(2)/2+tap(2)/4-tap(3)-tap(0);FORIIN3DOWNTO1LOOPtap(I)<=tap(I-1);--Tappeddelayline:shiftoneENDLOOP;tap(0)<=x;--Inputinregister0ENDPROCESS;ENDflex;目前五十三页\总数九十八页\编于十四点直接FIR滤波器设计举例(4)仿真结果目前五十四页\总数九十八页\编于十四点直接FIR滤波器设计改进通过流水线提高乘法器速度输出加法器应该安排在流水线平衡树中如果系数可以用2的幂次方编码,流水线乘法器可以和加法器合并。如果加法器的输入不是2的幂次方形式,则需要加入额外的流水线寄存器。采用优化CSD编码实现滤波器系数对于线性相位滤波器,利用系数对称特性简化滤波器结构目前五十五页\总数九十八页\编于十四点直接FIR滤波器设计改进举例(1)滤波器系数采用CSD编码3.7510=22−2−2=10.0(−1)2线性相位滤波器结构(利用脉冲响应对称特性)目前五十六页\总数九十八页\编于十四点直接FIR滤波器设计改进举例(2)利用对称性和CSD编码可实现最简结构设计(不使用加法器树)利用对称性、CSD编码和加法器树可实现速度最快设计目前五十七页\总数九十八页\编于十四点直接形式流水线FIR滤波器在某些情况下,某一系数要比其它系数加入更多级流水线延迟,这种延迟用f[n]z-d建模目前五十八页\总数九十八页\编于十四点转置结构FIR滤波器(1)转置结构FIR对比直接FIR的优势:利用简化加法器图(RAG,ReducedAdderGraph)算法实现重复系数的多次使用简化滤波器结构(减少LE的数量),提高速度使用进位存储加法器实现流水线加法器利用流水线加法器能提高速度,代价是增加加法器和寄存器的数量目前五十九页\总数九十八页\编于十四点转置结构FIR滤波器(2)转置结构FIR滤波器结构目前六十页\总数九十八页\编于十四点滤波器系数实现有时实现常系数的因子的加法器成本比直接实现系数的CSD编码更低。对于转置结构FIR滤波器,系数具有公共因子的可能性比较高。举例:对于系数9和11,首先可以用8+1=9构建系数9,然后用9+2=11构建系数11(代替8+1+2=11)。这样在结构上就减少了1个加法器。寻找最优的RAG图是NP-Hard问题,只能采用启发式算法求解。目前六十一页\总数九十八页\编于十四点RAG算法(1)目前六十二页\总数九十八页\编于十四点RAG算法(2)目前六十三页\总数九十八页\编于十四点RAG算法举例(1)F6半频带滤波器的RAG设F6半频带滤波器的系数为f[0]=34610,f[1]=20810, f[2]=010,f[3]=-4410,f[4]=910。 采用CSD编码实现,所用的加法器数量为9目前六十四页\总数九十八页\编于十四点MAG表目前六十五页\总数九十八页\编于十四点RAG算法举例(2)采用RAG算法化简:对余下的系数,从具有最低加法器成本和最小值开始使用启发式策略:目前六十六页\总数九十八页\编于十四点RAG算法举例(3)最终得到的简化加法器图,加法器数量由9减少到5,加法器路径延迟从4减少到3目前六十七页\总数九十八页\编于十四点流水线RAGFIR滤波器(1)基于RAG算法实现的转置结构FIR滤波器的存在的问题由实现RAG加法器带来的逻辑延迟降低了电路的运行速度(即使是较小的电路也会出现)。解决方案:在加法器的输出端加入一个寄存器实现流水线结构。利用每个LE中嵌入的寄存器,不需要额外的逻辑资源。2的幂次方系数乘法的实现所需的移位寄存器不包括在内。性能提升目前六十八页\总数九十八页\编于十四点流水线RAGFIR滤波器(2)对于全流水线设计需要在每个加法器的输入路径上施加同样的延迟。目前六十九页\总数九十八页\编于十四点流水线RAGFIR滤波器(3)在实现流水线RAG后,要关注FIR滤波器系数的不同延迟。两种选择:对所有的系数输出加以延迟,使得所有系数的延迟相同,而不需要改变输出抽头延迟线的结构。采用流水线重定时技术,根据流水线的级数在抽头延迟线上保持乘法器输出时序一致。目前七十页\总数九十八页\编于十四点采用DA算法实现FIR滤波器(1)与传统SOP结构相比,DA算法在一步中计算所有系数的特定b位的SOP,主要电路元件为LUT和带有移位的累加器。考虑3系数的FIR滤波器,系数为c[0]=2,c[1]=3,c[2]=1,实现f(c[n],xb[n])的LUT为:目前七十一页\总数九十八页\编于十四点采用DA算法实现FIR滤波器(2)目前七十二页\总数九十八页\编于十四点DA-FIRVHDL设计(1)LIBRARY

ieee;--UsingpredefinedpackagesUSE

ieee.std_logic_1164.ALL;USE

ieee.std_logic_arith.ALL;PACKAGEda_packageIS

--Userdefinedcomponent

COMPONENTcase3

PORT(table_in:IN

STD_LOGIC_VECTOR(2DOWNTO0);table_out:OUT

INTEGER

RANGE0TO6);

END

COMPONENT;ENDda_package;LIBRARY

work;USE

work.da_package.ALL;LIBRARY

ieee;--UsingpredefinedpackagesUSE

ieee.std_logic_1164.ALL;USE

ieee.std_logic_arith.ALL;ENTITYdafsmIS

------>Interface

PORT(clk:IN

STD_LOGIC;x_in0,x_in1,x_in2:

IN

STD_LOGIC_VECTOR(2DOWNTO0);y:OUT

INTEGER

RANGE0TO63);ENDdafsm;目前七十三页\总数九十八页\编于十四点DA-FIRVHDL设计(2)ARCHITECTUREflexOFdafsmIS

TYPESTATE_TYPEIS(s0,s1);

SIGNALstate:STATE_TYPE;

SIGNALx0,x1,x2,table_in:STD_LOGIC_VECTOR(2DOWNTO0);

SIGNALtable_out:INTEGER

RANGE0TO7;BEGINtable_in(0)<=x0(0);table_in(1)<=x1(0);table_in(2)<=x2(0);

PROCESS

------>DAinbehavioralstyle

VARIABLEp:INTEGER

RANGE0TO63;--temp.register

VARIABLEcount:INTEGER

RANGE0TO3;--countsshifts

BEGIN

WAIT

UNTILclk='1';

CASEstateIS

WHENs0=>--Initializationstepstate<=s1;count:=0;p:=0;x0<=x_in0;x1<=x_in1;x2<=x_in2;目前七十四页\总数九十八页\编于十四点DA-FIRVHDL设计(3)WHENs1=>--Processingstep

IFcount=3THEN

--Issumofproductdone?y<=p;--Outputofresulttoyandstate<=s0;--startnextsumofproduct

ELSEp:=p/2+table_out*4;x0(0)<=x0(1);x0(1)<=x0(2);x1(0)<=x1(1);x1(1)<=x1(2);x2(0)<=x2(1);x2(1)<=x2(2);count:=count+1;state<=s1;

END

IF;

END

CASE;

END

PROCESS;LC_Table0:case3

PORT

MAP(table_in=>table_in,table_out=>table_out);ENDflex;目前七十五页\总数九十八页\编于十四点DA-FIRVHDL设计(4)系数{2,3,1}的DA算法LUT实现LIBRARY

ieee;USE

ieee.std_logic_1164.ALL;USE

ieee.std_logic_arith.ALL;ENTITYcase3IS

PORT(table_in:IN

STD_LOGIC_VECTOR(2DOWNTO0);table_out:OUT

INTEGER

RANGE0TO6);ENDcase3;ARCHITECTURELCsOFcase3ISBEGIN--ThisistheDACASEtablefor--the3coefficients:2,3,1--automaticallygeneratedwithdagen.exe--DONOTEDIT!

目前七十六页\总数九十八页\编于十四点DA-FIRVHDL设计(5)PROCESS(table_in)

BEGIN

CASEtable_inIS

WHEN"000"=>table_out<=0;

WHEN"001"=>table_out<=2;

WHEN"010"=>table_out<=3;

WHEN"011"=>table_out<=5;

WHEN"100"=>table_out<=1;

WHEN"101"=>table_out<=3;

WHEN"110"=>table_out<=4;

WHEN"111"=>table_out<=6;

WHEN

OTHERS=>table_out<=0;

END

CASE;

END

PROCESS;ENDLCs;目前七十七页\总数九十八页\编于十四点基于逻辑单元的DA-FIR实现低阶FIR滤波器实现采用小规模LUT(FIR阶数L≤4)

,用逻辑单元实现LUT高阶FIR滤波器实现像构造低阶FIR一样直接用逻辑单元实现大规模LUT会造成逻辑单元资源紧张,例如2b×b规模LUT利用FIR滤波器线性相位特性,可以将低阶FIR的输出相加构成高阶FIR的输出响应LUT实现方式:利用FPGA内部存储模块,如M4K,实现LUT。优点:运算速度恒定,节省布线资源;问题:M4K数量较少,应该节约使用! 利用小规模LUT(4输入)和多路选择器构成总线结构实现较大规模LUT将较大规模LUT划分成若干小规模LUT实现目前七十八页\总数九十八页\编于十四点基于逻辑单元的DA-FIR不同实现方式比较目前七十九页\总数九十八页\编于十四点5输入DA表(1)LIBRARY

ieee;USE

ieee.std_logic_1164.ALL;USE

ieee.std_logic_arith.ALL;ENTITYcase5pIS

PORT(clk:IN

STD_LOGIC;table_in:IN

STD_LOGIC_VECTOR(4DOWNTO0);table_out:OUT

INTEGER

RANGE0TO25);ENDcase5p;ARCHITECTURELEsOFcase5pIS

SIGNALlsbs:STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALmsbs0:STD_LOGIC_VECTOR(1DOWNTO0);

SIGNALtable0out00,table0out01:INTEGER

RANGE0TO25;BEGIN--ThesearethedistributedarithmeticCASEtablesfor--the5coefficients:1,3,5,7,9--automaticallygeneratedwithdagen.exe--DONOTEDIT!目前八十页\总数九十八页\编于十四点5输入DA表(2)

PROCESS

BEGIN

WAIT

UNTILclk='1';lsbs(0)<=table_in(0);lsbs(1)<=table_in(1);lsbs(2)<=table_in(2);lsbs(3)<=table_in(3);msbs0(0)<=table_in(4);msbs0(1)<=msbs0(0);

END

PROCESS;

PROCESS

--ThisisthefinalDAMPXstage.

BEGIN

--Automaticallygeneratedwithdagen.exe

WAIT

UNTILclk='1';

CASEmsbs0(1)IS

WHEN'0'=>table_out<=table0out00;

WHEN'1'=>table_out<=table0out01;

WHEN

OTHERS=>table_out<=0;

END

CASE;

END

PROCESS;

目前八十一页\总数九十八页\编于十四点5输入DA表(3)

PROCESS

--ThisistheDACASEtable00outof1.

BEGIN

--Automaticallygeneratedwithdagen.exe

WAIT

UNTILclk='1';

CASElsbsIS

WHEN"0000"=>table0out00<=0;

WHEN"0001"=>table0out00<=1;

WHEN"0010"=>table0out00<=3;

WHEN"0011"=>table0out00<=4;

WHEN"0100"=>table0out00<=5;

WHEN"0101"=>table0out00<=6;

WHEN"0110"=>table0out00<=8;

WHEN"0111"=>table0out00<=9;

WHEN"1000"=>table0out00<=7;

WHEN"1001"=>table0out00<=8;

WHEN"1010"=>table0out00<=10;

WHEN"1011"=>table0out00<=11;

WHEN"1100"=>table0out00<=12;

WHEN"1101"=>table0out00<=13;

WHEN"1110"=>table0out00<=15;

WHEN"1111"=>table0out00<=16;

WHEN

OTHERS=>table0out00<=0;

END

CASE;

END

PROCESS;目前八十二页\总数九十八页\编于十四点5输入DA表(4)PROCESS

--ThisistheDACASEtable01outof1.

BEGIN

--Automaticallygeneratedwithdagen.exe

WAIT

UNTILclk='1';

CASElsbsIS

WHEN"0000"=>table0out01<=9;

WHEN"0001"=>table0out01<=10;

WHEN"0010"=>table0out01<=12;

WHEN"0011"=>table0out01<=13;

WHEN"0100"=>table0out01<=14;

WHEN"0101"=>table0out01<=15;

WHEN"0110"=>table0out01<=17;

WHEN"0111"=>table0out01<=18;

WHEN"1000"=>table0out01<=16;

WHEN"1001"=>table0out01<=17;

WHEN"1010"=>table0out01<=19;

WHEN"1011"=>table0out01<=20;

WHEN"1100"=>table0out01<=21;

WHEN"1101"=>table0out01<=22;

WHEN"1110"=>table0out01<=24;

WHEN"1111"=>table0out01<=25;

WHEN

OTHERS=>table0out01<=0;

END

CASE;

END

PROCESS;ENDLCs;目前八十三页\总数九十八页\编于十四点采用嵌入式阵列模块(M4K)实现DAFIR滤波器(1)LIBRARYlpm;USElpm.lpm_components.ALL;LIBRARY

ieee;--UsingpredefinedpackagesUSE

ieee.std_logic_1164.ALL;USE

ieee.std_logic_arith.ALL;USE

ieee.std_logic_unsigned.ALL;--Containsconversion

--VECTOR->INTEGERENTITYdaromIS

------>Interface

PORT(clk:IN

STD_LOGIC;x_in0,x_in1,x_in2:IN

STD_LOGIC_VECTOR(2DOWNTO0);y:OUT

INTEGER

RANGE0TO63);ENDdarom;ARCHITECTUREflexOFdaromIS

TYPESTATE_TYPEIS(s0,s1);

SIGNALstate:STATE_TYPE;

SIGNALx0,x1,x2,table_in,mem:STD_LOGIC_VECTOR(2DOWNTO0);

SIGNALtable_out:INTEGER

RANGE0TO7;目前八十四页\总数九十八页\编于十四点采用M4K实现DAFIR滤波器(2)BEGINtable_in(0)<=x0(0);table_in(1)<=x1(0);table_in(2)<=x2(0);

PROCESS

------>DAinbehavioralstyle

VARIABLEp:INTEGER

RANGE0TO63;--Temp.register

VARIABLEcount:INTEGER

RANGE0TO3;

BEGIN

--Countstheshifts

WAIT

UNTILclk='1';

CASEstateIS

WHENs0=>--Initializationstepstate<=s1;count:=0;p:=0;x0<=x_in0;x1<=x_in1;x2<=x_in2;

目前八十五页\总数九十八页\编于十四点采用M4K实现DAFIR滤波器(3)WHENs1=>--Processingstep

IFcount=3THEN

--Issumofproductdone?y<=p;--Outputofresulttoyandstate<=s0;--startnextsumofproduct

ELSEp:=p/2+table_out*4;x0(0)<=x0(1);x0(1)<=x0(2);x1(0)<=x1(1);x1(1)<=x1(2);x2(0)<=x2(1);x2(1)<=x2(2);count:=count+1;state<=s1;

END

IF;

END

CASE;

END

PROCESS;

目前八十六页\总数九十八页\编于十四点采用M4K实现DAFIR滤波器(4)rom_1:lpm_rom

GENERIC

MAP(LPM_WIDTH=>3,LPM_WIDTHAD=>3,LPM_OUTDATA=>"UNREGISTERED",LPM_ADDRESS_CONTROL=>"UNREGISTERED",LPM_FILE=>"darom3.mif")

PORT

MAP(address=>table_in,q=>mem);table_out<=CONV_INTEGER(mem);ENDflex;目前八十七页\总数九十八页\编于十四点有符号DAFIR滤波器设计(1)LIBRARY

ieee;--UsingpredefinedpackagesUSE

ieee.std_logic_1164.ALL;USE

ieee.std_logic_arith.ALL;PACKAGEda_packageIS

--UserdefinedcomponentsCOMPONENTcase3s

PORT(table_in:IN

STD_LOGIC_VECTOR(2DOWNTO0);table_out:OUT

INTEGER

RANGE-2TO4);END

COMPONENT;ENDda_package;LIBRARY

work;USE

work.da_package.ALL;LIBRARY

ieee;--UsingpredefinedpackagesUSE

ieee.std_logic_1164.ALL;USE

ieee.std_logic_arith.ALL;ENTITYdasignIS

------>Interface

PORT(clk:IN

STD_LOGIC;x_in0,x_in1,x_in2:IN

STD_LOGIC_VECTOR(3DOWNTO0);y:OUT

INTEGER

RANGE-64TO63);ENDdasign;目前八十八页\总数九十八页\编于十四点有符号DAFIR滤波器设计(2)ARCHITECTUREflexOFdasignIS

TYPESTATE_TYPEIS(s0,s1);

SIGNALstate:STATE_TYPE;

SIGNALtable_in:STD_LOGIC_VECTOR(2DOWNTO0);

SIGNALx0,x1,x2:STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALtable_out:INTEGER

RANGE-2TO4;BEGINtable_in(0)<=x0(0);table_in(1)<=x1(0);table_in(2)<=x2(0);

PROCESS

------>DAinbehavioralstyle

VARIABLEp:INTEGER

RANGE-64TO63;--Temporaryreg.

VARIABLEcount:INTEGER

RANGE0TO4;--Countsthe

BEGIN

--shifts

WAIT

UNTILclk='1';

CASEstateIS

WHENs0=>--Initializationstepstate<=s1;count:=0;p:=0;x0<=x_in0;x1<=x_in1;x2<=x_in2;目前八十九页\总数九十八页\编于十四点有符号DAFIR滤波器设计(3)WHENs1=>--Processingstep

IFcount=4THEN

--Issumofproductdone?y<=p;--Outputofresulttoyandstate<=s0;--startnextsumofproduct

ELSE

IFcount=3THEN

--Subtractforlastp:=p/2-table_out*8;--accumulatorstep

ELSEp:=p/2+table_out*8;--Accumulationfor

END

IF;--allothersteps

FORkIN0TO2LOOP

--Shiftbitsx0(k)<=x0(k+1);x1(k)<=x1(k+1);x2(k)<=x2(k+1);

END

LOOP;count:=count+1;state<=s1;

END

IF;

END

CASE;

END

PROCESS;LC_Table0:case3s

PORT

MAP(table_in=>table_in,table_out=>table_out);ENDflex;目前九十页\总数九十八页\编于十四点有符号DAFIR滤波器设计(4)LE表LIBRARY

ieee;USE

ieee.std_logic_1164.ALL;USE

ieee.std_logic_arith.ALL;ENTITYcase3sIS

PORT(table_in:IN

STD_LOGIC_VECTOR(2DOWNTO0);table_out:OUT

INTEGER

RANGE-2TO4);ENDcase3s;ARCHITECTURELEsOFcase3sISBEGIN--ThisistheDACASEtablefor--the3coefficients:-2,3,1--automaticallygeneratedwithdagen.exe--DONOTEDIT!

目前九十一页\总数九十八页\编于十四点有符号DAFIR滤波器设计(5)PROCESS(table_in)

BEGIN

CASEtable_inIS

WHEN"000"=>table_out<=0;

WHEN"001"=>table_out<=-2;

温馨提示

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

评论

0/150

提交评论