基于FPGA的FIR滤波器(草稿)

方案一:QuartusII中的IP核。但是FIR IP没有破解,放弃。

方案二:用纯硬件描述语言搭建。

基本上分为MAC(乘积累加结构)和DA(分布式结构)。

MAC中具体结构有:

直接型FIR滤波器结构。利用FIR系数对称性特点,先对相应值相加,再做乘积运算,最后累加。该进措施可以是加上流水线结构。

实例:(参考自《EDA技术与Verilog设计》王金明编著)8KHZ采样率,8Bit输入,8Bit输出,11阶低通滤波器,fL=3.4KHZ。利用MATLAB得到滤波器系数,采用SD编码。Tips:SD(signed digit numbers有符号数字量),通过SD编码可以降低非零元素的数量。SD编码数字值域{1,0,-1},-1用1上面加“-”表示。

代码如下:

module Fir02

(

	input clk,

	input [7:0] x,

	output reg [15:0] y

);



reg [7:0] tap0,tap1,tap2,tap3,tap4,tap5,tap6,tap7,tap8,tap9,tap10;

reg [7:0] t0,t1,t2,t3,t4,t5;

reg [15:0] sum;



always @(posedge clk)

	begin

		t0<=tap5;

		t1<=tap4+tap6;

		t2<=tap3+tap7;

		t3<=tap2+tap8;

		t4<=tap1+tap9;

		t5<=tap0+tap10;

		

		sum<=	(t1<<4)

				+{t1[7],t1[7:1]}

				+{t1[7],t1[7],t1[7:2]}

				+{t1[7],t1[7],t1[7],t1[7:3]}

				

				-(t2<<3)

				-(t2<<2)

				+t2

				-{t2[7],t2[7],t2[7:2]}

				

				+(t3<<2)

				+t3

				+{t3[7],t3[7],t3[7:2]}

				+{t3[7],t3[7],t3[7],t3[7],t3[7:4]}

				+{t3[7],t3[7],t3[7],t3[7],t3[7],t3[7:5]}

				

				-t4

				-{t4[7],t4[7:1]}

				-{t4[7],t4[7],t4[7],t4[7:3]}

				

				+{t5[7],t5[7:1]}

				-{t5[7],t5[7],t5[7],t5[7],t5[7],t5[7:5]}

				

				+(t0<<7)

				-((t0<<2)<<2)

				-(t0<<2)

				+{t0[7],t0[7:1]}

				+{t0[7],t0[7],t0[7:2]}

				+{t0[7],t0[7],t0[7],t0[7],t0[7:4]};

				

		tap10<=tap9;

		tap9<=tap8;

		tap8<=tap7;

		tap7<=tap6;

		tap6<=tap5;

		tap5<=tap4;

		tap4<=tap3;

		tap3<=tap2;

		tap2<=tap1;

		tap1<=tap0;

		tap0<=x;

		

		y<={sum[15],sum[15],sum[15],sum[15],sum[15],sum[15],sum[15],sum[15:7]};

	end



endmodule 

你可能感兴趣的:(FPGA)