以三阶四位有符号的数字滤波器为例,令滤波器的系数为{-2,1,3},LUT可采用基于FPGA的逻辑查找表或利用FPGA自带的ROM实现。用case表实现的核心代码如下:
Process (table_ in)
Begin
Case table_ in is
when “000”=> table_ out<=0;
when “001”=> table_ out<=-2;
when “010”=> table_ out<=3;
when “011”=> table_ out<=1;
when “100”=> table_ out<=1;
when “101”=> table_ out<=-1;
when “110”=> table_ out<=4;
when “111”=> table_ out<=2;
when others=> table_ out<=0;
end case;
end process;
2.3 并行分布式算法
并行分布式算法结构如图3所示,图中虚线代表流水线寄存器,输入采用逐次采样(每次一个字)、位并行的形式。将每个数据的相同位递给LUT,对于输入的每一位都需要配置相应单独的表,且表的规模不固定(输入位宽等于滤波器抽头的数量),但表的内容相同。且不同的位对应不同的值,然后将从LUT中读取的数据经过处理后送入加法器中,每级的加法运算都是并行的。
3 基于FPGA实现的改进型FIR滤波器结构性能
3.1 16阶8位FIR滤波器的实现及仿真
本设计采用Altera公司的Cyclone II EP2C35F672C8器件,在Quartus II 5.0下仿真,FIR滤波器为16阶,输入数据为8位(最高位代表符号位)。如果采用单个查找表的面积为28×16 bit,面积太大。采用拆分查找表的结构能减少面积,在Altera公司的一系列FPGA中LUT查找表采用四输入查找表,因此单个表可以拆分为2个四输入的查找表。因为设计的是线性相位滤波器,这样单个表的面积就得到了最优化。同时单个查找表的连线是LUT查找表的内部连线,减少了互联的资源和连线的延迟。查找表计算方法如表1所示。