DIY编程器网
标题:
可级联FIR滤波器的IP设计及FPGA验证
[打印本页]
作者:
liyf
时间:
2011-4-26 06:40
标题:
可级联FIR滤波器的IP设计及FPGA验证
【摘 要】 提出了一种基于分布式算法的,采用基于RAM之移位寄存器来设计可级联FIR滤波器的设计方法。
关键词:FPGA,可级联,FIR滤波器,分布式算法
1 引 言
现场可编程逻辑器件(FPGA)由于兼具可编程逻辑器件现场可编程的灵活性,以及门阵列器件集成度高的优点,在数字系统设计中被广泛使用。FPGA有着规整的内部逻辑块阵列和丰富的连线资源,特别适合于细粒度和高并行度结构特点的数字信号处理任务,如FIR,FFT等。本文详细讨论了利用FPGA实现FIR滤波器的设计过程,并且对设计中的关键技术——分布式算法和基于RAM的移位寄存器都进行了详细的描述。本设计已经通过了FPGA验证,和其它同类设计相比,本文所设计的电路不仅速度快而且占用的面积小。
2 FIR和分布式算法
2.1 FIR的基本概念
FIR滤波器数学表达式为:
由此看出,FIR滤波器的基本结构如一个分节的延时线,把每一节的输出加权累加,得到滤波器的输出。对于FIR滤波器,在幅度上只需满足下列两个条件之一,就能构成线性相位FIR滤波器。
式(2)称为第一类线性相位的幅度条件,式(3)称为第二类线性相位的幅度条件。由此可写出线性相位FIR滤波器的数学表达式:
由于在数据通信、语音信号处理、图像处理以及自适应处理等领域的传输过程中不能有明显的相位失真,而FIR滤波器在满足一定对称条件下可以实现IIR滤波器难以实现的线性相位,因而获得广泛的应用。
2.2 分布式算法
FIR滤波器的主要组成模块是乘/加单元,若按照直观结构构造乘法器和系数寄存器来实现会占用大量的逻辑资源。而分布式算法利用查找表(LUT)将固定系数的乘/加运算转化为查表操作,并且其运算速度不随系数和输入数据精度的增加而降低,相对直接实现乘法器和系数寄存器在逻辑资源占用上得到极大的改善。分布式算法原理如下:
式(1)可以用下式表示:
其中,hk即h(k),xk(n)即x(n-k),K为滤波器的长度。
为了使得乘法之后的数据宽度不至于展宽,先把数据源数据格式规定为浮点数2的补码形式。则
其中,xkb(n)为二进制数,取值为0或1;xk0(n)为符号位,xk0(n)为1表示数据为负,为0表示数据为正。将(7)式代入(6)式可得
由此看出,方括号中进行的是输入变量的一个数据位和所有滤波器抽头系数h0~hk的每一位进行与运算并求和。而指数部分则说明了求和结果的位权,整数乘以2-b就是右移b位,对此可以通过硬连线实现,不占用逻辑资源。这样可以通过建立查找表来实现方括号中的操作,查找表用所有输入变量的同一位进行寻址。
这样,式(6)所表示的方程就可以由加法、减法和二进制除法来实现了。
3 系统设计与实现
3.1 系统整体设计
下面以一个10阶的线性相位FIR滤波器(输入数据和抽头系数的位宽均为16比特)为例说明电路的设计过程。
根据(全串行)分布式算法的原理,线性相位FIR滤波器可分为并串变换单元、移位寄存器组、查找表地址产生单元、查找表、累加器以及控制单元。其结构框图如图1所示。
系统工作过程如下:并行输入的数据首先经过并串变换,并扩展一位,输出比特流送到移位寄存器组中,在移位寄存器组中,每级移位寄存器的输出端口都要按照一定的方式,每两个端口进行相加或相减,以此产生出查找表的地址,并从查找表中读出相应的数据,送到累加器中进行自身移位相加,累加到一定次数输出正确结果。若数据是从级联输入端口
进入,那么输入数据无需再经过并串变换,可直接进行移位寄存,后面的工作过程和上述一致。
3.2 并串变换单元
并串变换单元的主要功能就是将并行输入的数据按照一定的顺序依次输出。由式(4)和(5)可以看出,输入数据x(k)和x(n-k)要进行预相加或预相减,为了防止溢出,在这里对输入数据要进行扩展:若输入数据为有符号数,则在最高位前扩展一位符号位;若输入数据为无符号数,则在最高位前扩展一位0。
3.3 移位寄存器组
移位寄存器组的功能是对数据进行移位寄存。在实现时,利用XC4000系列芯片中内含RAM的特点,采用基于RAM的移位寄存器,有效地减小面积。基于RAM的移位寄存器就是把数据存储在RAM中,通过对读和写进行适当的操作,使写进去的数据经过一定的时钟周期才能输出,从而实现移位寄存的功能。芯片中内含RAM,可以使其一个CLB中存储高达64比特的数据,否则,在一个CLB的触发器中只能存储2比特的数据,这样,就大大减少了数据存储所占用的资源。经测试,在XC4000系列芯片中,一个16位的移位寄存器需要占用7个CLB,而基于RAM(16×1)的移位寄存器只需占用1个CLB。
采用基于RAM的移位寄存器,就要产生用于控制RAM的读地址及读写操作信号,这些都由控制单元产生。对于一个长度为N的基于RAM的移位寄存器,可以使它的写数据操作比读数据操作延时一个时钟周期,这样写进的数据,经过N个时钟周期才能输出,从而完成移位寄存的功能。
为了实现滤波器级联的功能,需要加入一个输入端口——级联输入端口,并要引出一个输出端口——级联输出端口,这样,两个滤波器才能够级联。这十级移位寄存器既能对从输入数据端口输入的数据进行移位寄存,又能对从级联输入端口输入的数据进行移位寄存。具体实现时,在这十级移位寄存器中,第一级只需对级联输入端口的数据进行移位寄存,这是因为并串变换单元已经相当于一级移位寄存了,在第二级的输入端就需要对并串变换单元输出端口的数据和第一级移位寄存器的输出端口的数据作出选择,究竟是对哪个端口的数据移位寄存。最后一级移位寄存器的输出端引出作为级联输出端口。
3.4 查找表地址产生单元
查找表地址产生单元是产生查找表的地址,它是由五个带进位的加法器组或减法器组构成的。若滤波器的系数是正对称的,使用加法器;若滤波器的系数是负对称的,使用减法器。
3.5 查找表
查找表的功能就是存储抽头系数的组合,并且给出地址能读出相应的数据。查找表的深度是由滤波器的阶数来决定的,假如N代表滤波器的阶数,对于线性相位滤波器,其系数是对称的,那么其独立系数的个数为N/2个,则查找表的深度就等于2(N/2);对于非对称滤波器,其独立系数的个数为N个,则查找表的深度就等于2N。在设计阶数较长的FIR滤波器时,我们可以将大的查找表划分为几块小的查找表来减少所占用的FPGA资源。XILINX公司的XC4000系列FPGA的一个CLB可以实现32×1大小的RAM,例如,对于一个16阶的非对称FIR滤波器(系数宽度为8比特),若不进行划分,查找表的深度就为216,需要占用16384个CLB;若将其划分为两块寻址位数均为8的查找表,每一块查找表的深度就为28,那么两块查找表需要占用128个CLB;若将其划分为四块寻址位数均为4的查找表,每一块查找表的深度就为24,那么四块查找表需要占用16个CLB。由此看出,查找表的划分也是减小面积的一个关键技术。
查找表可以由ROM来实现。对于10阶的线性相位FIR滤波器来说,独立系数为5个,则ROM的深度就为32。表1示出了这5个独立系数的组合在ROM中的位置。
3.6 累加器
累加器的功能就是通过中间数据的移位相加实现两个数相乘,在该单元中也要进行防溢出处理。由于该累加器实现的相当于乘法器的移位相加,所以每次都要将相加结果右移一位,再和下一次的输入数据相加。如果输入数据是无符号数并且抽头系数是正对称,则直至加到17次;如果输入数据为有符号数(抽头系数为正对称也可为负对称),或者输入数据为无符号数且抽头系数是负对称,则相加进行16次,最后一次进行的是相减运算。移位相加减由控制单元计数器信号来控制。
3.7 控制单元
控制单元的主要功能是:对并串变换单元进行控制;产生移位寄存器组单元中的RAM的读地址以及读写操作控制;产生查找表地址产生单元中加法器或减法器的清零信号;并对累加单元进行控制。这些功能主要由计数器来实现。
4 FPGA验证
本系统的FPGA采用XILINX公司的XC4000系列芯片,各个模块用VHDL语言描述,用开发软件Synplify Pro 6.2.4编译及综合,用开发软件Xilinx Foundation Series ISE3.1i做前仿和后仿以及布局布线。
本文设计的10阶可级联线性相位FIR滤波器,其输入输出管脚情况如表2所示。
利用XC4000EPG120-1芯片进行布局布线,测试报告表明,该滤波器处理数据的时钟频率是64.8MHz,采样速率是4.05MHz。其硬件资源占用情况如表3所示。
检测所设计的电路是否能正确而连续地工作,可以采用最简单的测试方法:输入一个脉冲,若输出是按顺序输出抽头系数的值,可以说电路是正常工作的。经过布局布线后,其时序仿真如图2所示。
5 FIR的级联
本文所设计的滤波器可以级联成更长的滤波器,用n个10阶的FIR滤波器和加法器可以组成
一个n×10阶的滤波器。通过查找表内容的设定,级联后的滤波器可以是对称的也可以是非对称的。如图3所示,用两个10阶的FIR滤波器和一个加法器可以级联成一个20阶的滤波器。
采用分布式算法,级联后的滤波器不会因为长度的增加而性能明显下降,利用XC4005EPC84-1芯片实现两级级联的滤波器时,处理数据的时钟频率为64.5MHz,所占用的CLB为156个。
6 结束语
本设计在采用分布式算法的基础上,利用基于RAM的移位寄存器,节省了大量的FPGA资源。通过阶数以及查找表中抽头系数的设定,低通、高通、带通和带阻滤波器都可以实现。
设计的电路已通过FPGA验证,证明工作正常,性能良好。
参考文献
1 丁玉美,高西全,彭学愚.数字信号处理.西安:西安电子科技大学出版社,1998
2 蒋亚坚,张庆雷.分布式运算单元的原理及实现方法.电子应用技术,2001(2)
欢迎光临 DIY编程器网 (http://diybcq.com/)
Powered by Discuz! X3.2