word_size = 16,
word_size_out = 2*word_size + 2,
write_ptr_size = 4,
b0 = 8’d7, // Filter coefficients
);
reg [word_size -1: 0] Sample_Array [0: FIR_order -1];
reg [write_ptr_size -1: 0] write_ptr;
parameter max_write_ptr = 4’d7;
integer k;
always @ (posedge clock)
if (reset == 1) begin
for (k = 1; k <= FIR_order; k = k+1) Sample_Array[k] <= 0;
end
else case (write_ptr)
0: Data_out <= b0*Data_in + b8*Sample_Array[0] + b7*Sample_Array [1]
3: Data_out <= b0*Data_in + b8*Sample_Array[3] + b7*Sample_Array [4]
+ b6*Sample_Array [5] + b5*Sample_Array [6] + b4*Sample_Array [7]
+ b3*Sample_Array [0] + b2*Sample_Array [1] + b1*Sample_Array [2];
4: Data_out <= b0*Data_in + b8*Sample_Array[4] + b7*Sample_Array [5]
+ b6*Sample_Array [6] + b5*Sample_Array [7] + b4*Sample_Array [0]
+ b3*Sample_Array [1] + b2*Sample_Array [2] + b1*Sample_Array [3];