引言
FIR数字滤波器广泛地应用于数字信号处理(DSP)系统,例如通信、数字图像处理、声音信号处理、雷达声纳等系统中。传统的FIR数字滤波器一般采用通用的DSP处理器或者数字信号处理超大规模集成电路。这样使设计不够灵活,很多情况下浪费资源,并且速度不够高。现场可编程逻辑阵列FPGA器件的出现,为FIR数字滤波器的设计提供了一种新的途径。FPGA具有高速、成本低廉、设计周期短及应用灵活等特点。用FPGA实现的数字滤波器内部电路结构透明,实时性好,有利于减小硬件电路的体积,提高工作效率。
DSP处理器的结构决定了实现FIR滤波器主要是串行流水线的运算。虽然流水线提高了资源的利用率也提高了运算速度,但是比较FPGA的纯并行运算结构在运算速度上有很大的逊色,可是这种FPGA纯并行运算结构导致最后综合的面积较大。
本文正是通过在时序上控制滤波器的输出,提出一种在模块内采用并行运算,在模块间采用串行运算的FIR滤波器的算法结构。这种结构可以同时兼顾FPGA综合的速度和面积,从而实现FIR数字滤波器的硬件优化设计。
1.FIR滤波器实现方案的比较
分析12阶FIR滤波器对12个数字通道(每通道16位)进行滤波,这样FIR的系数h(0)~h(11)是可以配置的,即可以作为RAM提前写到滤波器元件中。如果是寄存器传输级设计,有三种设计方案:
方案1.例化12个FIR滤波器,即有12个图1所示的模块并联,即每个通道单独使用一个滤波器;
方案2.所有通道共享同一个例化FIR滤波器,但是这种方案需要的资源也较多(图1);
方案3.共享FIR滤波器,同时共享乘法器和加法器;
图1: FIR滤波器的常用结构
从表1可以看出方案1实现起来较简单,没有控制器,但是需要的资源较多,需要例化9个滤波器;方案3实现的是串行流水线操作,实现资源共享,最节省资源,但是又是最复杂的一种实现方法,同时执行速率最低;一般的工程设计者都是采用方案2。
1.三种方案所用资源比较
乘法器数量 加法器数量 控制器数量
方案1 144 132 0
方案2 12 11 1
方案3 1 11 1
一般在FPGA的应用设计中要考虑的两个最重要的因素是系统的最高速率S和综合所需要的逻辑单元数L。从而我们取指标SLR=lgS/lgL,可见对于同样要求的FIR滤波器设计来说SLR越大,则说明此FIR滤波器的设计效果越好。
本文提出的方法是基于方案2和方案3的一种混合方法。在不增加复杂度的情况下,利用分时复用的方法,在设计的时灵活地设置模块数(即流水线的阶数),采用流水线的并行FIR滤波器的设计。从而在综合面积和速度上同时达到优化,尽量增大SLR值。
2.流水线并行结构FIR滤波器
FIR滤波器的时域的离散方程可以表达为:
(1)
希望在上式(1)中可以分成几个模块,在模块内实现并行运算(即模块内实现并行乘加运算),然后在模块间通过控制调度共享模块乘加运算,实现模块间流水线串行运算,整个系统结构共享一个并行模块。因此(1)式可以转换为(2)式
假定流水线为P级,分别为0,1,2,…P-1级,阶数L为流水线级数P的整数倍,那么FIR滤波器可以写为以下形式:
(2)
从上式可以看出,如果在每一项的乘法求和运算都是在一个时钟内通过并行结构完成,那就是模块内实现并行运算,然后每一个模块间通过控制调度共享并行结构模块实现串行流水线操作。
下面针对式(2)分析以下三种情况:
当P=1时即结构中没有采用流水线,就成为为全并行运算结构,那么(2)式就退化为(1)式。 当PL=L时,即每一个所谓的并行模块只执行一个运算,因此这种运算为纯串行流水线运算结构,(2)式变为(3)式
y(n)=xn()h(0)+x(n-1)h(1)+x(n-2)h(2)+......+x[(n-L--1)]hL(L-1) (3) 当1<P<L,即为通用的(2)式,即在模块内实现并行运算,在模块间通过调度控制共享并行结构模块实现串行流水线操作。
为了通过在模块间通过调度控制共享并行结构模块实现串行流水线操作,本文提出一种简单的方案就是将输入时钟分频,设计得到二个时钟域,对于P级流水线,系统的两个时钟域的关系为clock1=P×clock2。,这样,不同的模块用不同的时钟源实现同步电路。具体参见下面三级流水线并行FIR滤波器的实现过程。
例如对于12阶的FIR滤波器,取流水线级数为P=3,即每个模块内有4个乘加并行运算单元,那滤波器的表达式为:
(4)
3.三级流水线并行12阶FIR滤波器结构
先不考虑线性相位滤波器的情况。
当遇到设计的FIR滤波器不是线性相位的情况下,仍然希望设计的滤波器的速度和综合面积达到较优,使SLR=lgS/lgL尽量大。那么就在采样数据输入和运算中采用不同的时钟域,从而协调共享乘法器、加法器以及系数存储器,即运算存储模块的时钟是输入采样数据时钟的P倍,达到分时复用,协调共享并行模块的目的。如图3所示,采用P=3,即3Clock(本文中1Clock为1×Clock倍时钟,3Clock为3×Clock倍时钟)时钟驱动右边的运算存储模块,即在1Clock时钟内进行3次的RAM的系数访问和两次乘法器、加法器的运算。而左面数据缓冲模块使用输入时钟1Clock,即在3个3Clock时钟内移位寄存器才变化一次,具体如图2和图3。
从表2数据装载实现过程中可以看出,在3Clock周期0期间,仅仅有从RAM中取出数据h(2),h(5),h(8),h(11)有效,此时移位寄存器的输出仍为x(n),x(n-3),x(n-6),x(x-9)(移位寄存器的时钟为1Clock,因此输出值相对于3Clock时钟要保持一个周期),计算的值保存在寄存器内,在cycle1周期从RAM中取出系数h(0),h(3),h(6),h(9),此时移位寄存器的输入值为x(n+1),x(n-2),x(n-5),x(n-8),依次执行cycle2,cycle3,…….,最后通过累加器输出。
图2.不同时钟周期系数的装载
式(5)为滤波器输出Y(n-6),式(6)为Y(n-6)保持一个1Clock周期之后输出的下一个滤波之后的值Y(n-5),因此在每个1Clock时钟周期有滤波数值输出,下面依次为
本文FIR滤波器与传统的FIR滤波器运算实现上速度降低较少,同时可以从理论上分析,整个运算所用的乘法器和加法器的数量减少了,因此整个系统综合的面积必然减小。在电路的设计过程中明显的节省了资源。在性能分析中一个重要的指标是定义为每秒钟乘法运算的总次数(由于加法一般与乘法结合在一起,因此运算成本中不包含加法)。在本设计采用流水线级数P=3,对于12阶FIR滤波器,这样仅仅需要4个乘法器,加法器仅仅需要4个,显然比方案2资源利用率更高。本文采用的方案实现并行运算,综合的面积比方案2理论上提高3倍。但是综合的速度上相差很小,即使评估指数SLR=lgS/lgL增大。实验的验证结果也证明了这种结论(表4)。
图3系统实现框图
4.具体实现模块
实现过程由几个单元组成,主要有时钟分频单元CLK_DIV,系数地址单元COEFF_ADDR,系数存储单元RAM,加法器单元ADDER,乘法器单元MULT,数据缓冲单元SHIFT_REG及累加器ALTR_ACCUM单元 。
图4系统实现模块框图
下面是每一模块实现的功能:
(1)系数地址单元COEFF_ADDR:系数地址模块是由一个模3计数器组成,由时钟脉冲控制计数器输出的计数输出到系数存储单元,作为系数存储单元的地址选通数据。具体见表3,使用时钟是3clock。
(2)系数存储单元RAM:滤波器系数存储在3个存储器RAM模块中。因为系数会出现正负,还会出现小数,因此以16位二进制数补码定点的形式存放计算的FIR数字滤波器频率响应的傅立叶系数h(n),当系数存储单元地址选通数据存储表的某一地址时,与该地址相对应的h(n)数据并行输出到乘法器单元。时钟也是用的输入3clock。
表3.不同的计数器装载的滤波器系数
系数存储器 Couter--0 Couter--1 Couter--2
RAM1 h(2) h(0) h(1)
RAM2 h(5) h(3) h(4)
RAM3 h(8) h(6) h(7)
RAM4 h(11)h(9) h(10)
(3)数据缓冲单元SHIFT_REG:数据缓冲单元由8位移位寄存器SHIFT_REG构成,采样数据DATA[15..0]并行输入到移位寄存器单元中,每隔两个移位寄存器一个输出,共有3个输出,在时钟1Clock脉冲驱动下与h(n)数据同步输入到乘法单元中。
(4)加法器单元ADDER:将两个数据相加,可以使用参数化LPM宏单元。
(5)乘法器单元MULT:主要实现FIR滤波器的系数与数据缓冲单元的数据相乘。在实现过程中使用LPM模块。
(6)时钟分频单元CLK_DIV:时钟分频电路输入3Clock的时钟,分别作为系数地址单元、系数存储单元、乘法器单元、加法器单元和累加器单元的时钟。而分频后的1Clock时钟作为数据缓冲单元和最后累加器的时钟。时钟分频在硬件实现过程中是采用的计数器。
(7)累加器ALTR_ACCUM:累加器单元主要是实现几个D触发器的功能,在前一个时钟锁存数据,同下一时钟的数据同时累加,保证最后在每个1Clock时钟触发下都有数据输出。前面触发器时钟源为 3Clock,最后时钟源为1Clock。
5. 实验结果与展望
本文的方法只需使用 4个乘法器,4个加法器,1个控制 器,显然乘法器数量是方案2所用乘法器 数量的三分之一。大量的节省了资源。 表4为实验结果比较所用的资源, 可以看出在同样要求的 情况下 ,本文资源共享的滤波器实现方法所用的逻辑单元明显少于方案 2所用的逻辑单元 ,但是 系统的最高频率却与方案2 相近 ,显然本文方法 SLR 明显大于方案2。
可以看出 , 在本设计中乘法运算没有采用查表而直接采用乘法单元 ,这样可以充分利用Stratix器件的乘法器单元,节省了大量资源和减少了控制复杂度。本文实现的仅仅是采用级数为3的综合结果。级数只要满足倍数关系,便可以按照实际要求(速度约束和面积约束)进行设置。通过实验验证一般FIR滤波器的阶数越多,那么应该取的流水线级数也相应大些。
表4.实验结果比较所用的资源
两种方法 所用的器件 阶数 位宽 所用逻辑单元 系统的最高频率
方案2 EP1S60 12 16 2640 2.34MHz
本文方法 EP1S60 12 16 910 2.12MHz
同时可以将这个FIR数字滤波器系统作为一个完整的模块。通过级联可以方便的实现高阶滤波器,例如可以通过12阶FIR滤波器级联可以方便的实现24阶FIR滤波器。可以作为SOC的IP核。
参考文献
【1】胡广书编著,“数字信号处理理论算法与实现”,北京:清华大学出版社,2001。
【2】StefanSjoholm著,边计年、薛宏熙译,“VHDL设计电子线路”,北京:清华大学出
版社,2001。
【3】陈意军、孙胜麟著,“基于CPLD的现代数字系统设计”,现代通信技术,2001年第11
期。
【4】J.Living,B.M.Al-Hashimi,“HighPerformanceDistributedArithmeticFPGAforVideo-
FrequencyApplication”,StafforshireUniversity,1998IEEE。
【5】K.Chapman,“BuildingHighPerformanceFIRFiltersUsingKCM’s”,XilinxLtd-UK,1998。