跟着数字技能日益广泛的运用,以现场可编程门阵列(FPGA)为代表的ASIC器材得到了敏捷遍及和开展,器材集成度和速度都在高速添加。FPGA既具有门阵列的高逻辑密度和高可靠性,又具有可编程逻辑器材的用户可编程特性,能够削减体系规划和保护的危险,下降产品成本,缩短规划周期。
分布式算法是一种以完结乘加运算为意图的运算办法。它与传统算法完结乘加运算的不同在于履行部分积运算的先后顺序不同。简略地说,分布式算法在完结乘加功用时是经过将各输入数据每一对应位发生的部分积预先进行相加构成相应部分积,然后再对各部分积进行累加构成终究成果,而传统算法是比及一切乘积发生之后再进行相加来完结乘加运算的。与传统算法比较,分布式算法可极大地削减硬件电路规划,很简单完结流水线处理,进步电路的履行速度。
FPGA有着规整的内部逻辑块阵列和丰厚的连线资源,特别合适细粒度和高并行度结构特色的数字信号处理使命,如FIR、FFT等。本文详细评论运用FPGA完结FIR滤波器的规划进程,而且对规划中的关键技能——分布式算法进行详细描绘。
1 FIR和分布式算法
1.1 FIR的根本概念
FIR滤波器的数学表达式为:
式中,N是FIR滤波器的抽头数;x(n)表明第n时间的输入样本;h(i)是FIR滤波器的第i级抽头系数。
一般的直接型FIR滤波器结构如图1所示。
FIR滤波器实质上是一个分节的延迟线,把每一节的输出加权累加,便得到滤波器的输出。关于FIR滤波器,起伏上只需满意以下两个条件之一,就能构成线性相位FIR滤波器。
h(n)=h(N-1-n) (2)
h(n)=-h(N-1-n) (3)
式(2)称为第一类线性相位的起伏条件(偶对称),式(3)称为第二类线性相位的起伏条件(奇对称)。
1.2 FIR滤波器的优化
在实践运用中,为了削减逻辑资源的占有量和进步体系的运转速度,对FIR滤波器需求进行优化处理。本文选用的优化主要有两种:一种是对表达式进行优化,另一种是在FPGA完结中运用特有的查找表进行优化。
1.2.1 表达式的直接优化
关于线性相位因果FIR滤波器,它的系数具有中心对称特性,即h(i)=±h(N-1-i)。令s(i)=x(i)±x(N-1-i),关于偶对称,代入式(1)可得:
依据方程(4),线性相位FIR滤波器的直接型结构能够改为如图2所示的结构,然后使N次乘法削减为[N/2]次,加法次数添加了[N/2]次(N为偶数),总的运算量削减。
1.2.2 运用查找表进行规划优化
由于完结的是固定系数的FIR滤波器,所以能够运用简化的乘法器(如查找表)削减规划所耗用的器材资源。
以一个8阶FIR滤波器为例来阐明在FPGA完结中优化的进程。假定滤波器的输入为2bit的正整数,由式(4)能够得到输出为:
y(n)=s(0)h(0)+s(1)h(1)+s(2)h(2)+s(3)h(3) (5)
这时的乘法和加法就能够并行地选用查找表完结,其结构示意图如图3所示。
在图3中,右面4个信号是输入的低位bit,左面是输入信号的高位bit。低位和P1最多运用4bit,由于系数固定,查找表完结起来很便利;高位和P2可按相同办法核算。在该结构中,部分积P1和P2能够运用Virtex-E的4输入查找表完结,一切的核算都可并行完结。由于输入为2bit,因而只用了一个加法器;关于更多位数的输入来说,将需求更多的加法器。这样就完结了将乘法器转化为加法器,削减了逻辑资源,优化了规划。
1.3 分布式算法
分布式算法在20多年前被初次提出,但直到Xilinx创造FPGA的查找表结构今后,分布式算法才在20世纪90年代初从头受到重视,并被有效地运用在FIR滤波器的规划中。下面介绍分布式算法的原理。
式(1)能够用下式表明:
式中,hi即h(i),xi(n)即x(n-i),N为滤波器的抽头数。
把数据源数据格式规定为2的补码方式,则:
式中,xib(n)为二进制数,取值为0或1;xi 0(n)为符号位,为1表明数据为负,为0表明数据为正。将(7)式代入(6)式可得:
由此能够看出,方括号中是输入变量的一个数据位和一切滤波器抽头系数h0~hi的每一位进行“与”运算并求和。而指数部分则阐明晰求和成果的位权,整数乘以2b便是左移b位,对此能够经过硬件连线完结,不占用逻辑资源。这样就能够经过树立查找表来完结方括号中的运算,查找表可用一切输入变量的同一位进行寻址。
2 体系规划与完结
下面以一个16阶的线性相位FIR低通滤波器为例阐明规划的进程。
2.1 规划目标及参数提取
2.1.1 滤波器的规划目标
采样频率:≥50MHz 归一化截止频率:0.4MHz
类 型:低通 输入数据宽度:8位
阶 数:16阶 输出数据宽度:16位
2.1.2 参数提取
选用汉宁窗函数(Hanning)规划16阶线性相位FIR数字滤波器,并提取其特性参数。
这儿需求留意的是:下载到FPGA的程序是依照FIR滤波器的差分方程式编写的。由于从MATLAB中算出的系数h(n)的值是一组浮点数,而FPGA器材只进行定点值的核算,所以要进行浮点值到定点值的转化。假定“1”对应10000000000000000(17位,相当于乘上65536)。
用汉宁窗(Hanning)进行规划,此16阶FIR数字低通滤波器特性参数经过换算如下:
h[0]=h[15]=0000 h[1]=h[14]=0065 h[2]=h[13]=018F h[3]=h[12]=035A h[4]=h[11]=0579 h[5]=h[10]=078E h[6]=h[9]=0935 h[7]=h[8]=0A1F
2.2 体系详细完结进程
2.2.1 查找表的树立
咱们知道,假如滤波器抽头数N过多,用单个查找表就不能够履行全字(由于查找表位宽=滤波器抽头数的数量)。在这种情况下,能够将表的地址输入位数(即滤波器抽头数N)进行下降,即运用部分表并将成果相加。假如加上流水线寄存器,这一改善并没有下降速度,可是却能够极大地削减规划规划,由于查找表的规划是跟着地址空间,也便是滤波器抽头数N的添加而呈指数添加。
滤波器抽头数是16个,考虑到线性FIR滤波器的偶对称特性,只考虑8个独立滤波器抽头数,则需求一个28×8的表(其间指数8指的是8个滤波器抽头数,后边的8指的是输入数据的位宽)。可是Virtex-e FPGA只能供给4输入的查找表,所以要对查找表的地址进行电路切割。将8位地址线分为高4位和低4位,别离作为两个24×8的查找表的地址输入,然后指数倍地节省了硬件资源。
查找表的详细内容如表1所示。
2.2.2 查表核算部分积累加和的进程
假定输入数据x[n]的值x[0]=110=000000012c,x[1]=-110=111111112c,x[2]=310=000000112c,x[3]=210=000000102c。(注:2c代表用二进制补码表明,最高位为符号位。)
查找表(1)的部分积如表2所示。
数据校验成果:h[0]x[0]+h[1]x[1]+h[2]x[2]+h[3]x[3]=2812。
阐明运用分布式查表算法的核算成果与直接核算成果相同,算法正确无误。
查找表(2)的查表核算成果依此类推。仅仅需求留意:查找表(2)的数据输入x是8位数据x[4]、x[5]、x[6]、x[7],而不是x[3]、x[2]、x[1]、x[0]。依据系数偶对称性质,x[8]、x[9]、x[10]、x[11]查查找表(2),x[12]、x[13]、x[14]、x[15]查查找表(1)。
3 规划成果
本体系的FPGA选用Xilinx公司的Virtex-E系列中的XCV100E FPGA,运用的软件是Xilinx公司的ISE5.2i及Modelsim公司的Modelsim时序仿真东西,对FIR滤波器进行描绘编程运用的是VHDL言语。
完结FIR滤波器的最上层的原理图如图4所示,输入16个8位数据data_in={1,-1,3,2,2,-1,1,-1,1,-1,3,2,2,-1,1,1}。
体系仿真的时序图如图5所示。所规划FIR滤波器的幅频、相频、单位脉冲冲激响应如图6~8所示。
FIR滤波器是DSP的根本运算方式之一。本文介绍的根据FPGA的分布式算法进步了体系运转的速度而且节省了很多的FPGA资源。经过阶数以及查找表中抽头系数的设定,还能够灵敏地完结除低通外的高通、带阻和带通滤波器。
规划的电路已经过FPGA验证,阐明作业正常,契合规划目标。