73 lines
1.7 KiB
Verilog
73 lines
1.7 KiB
Verilog
module FIR(clock, reset, data_in, data_out);
|
|
input clock;
|
|
input reset;
|
|
input [11:0] data_in;
|
|
output [11:0] data_out;
|
|
reg [11:0] data_out;
|
|
|
|
|
|
reg [15:0] d0;
|
|
reg [15:0] d1;
|
|
reg [15:0] d2;
|
|
reg [15:0] d3;
|
|
reg [15:0] d4;
|
|
reg [15:0] d5;
|
|
reg [15:0] d6;
|
|
reg [15:0] d7;
|
|
reg [15:0] d8;
|
|
reg [15:0] d9;
|
|
reg [15:0] d10;
|
|
reg [15:0] d11;
|
|
reg [15:0] d12;
|
|
reg [15:0] d13;
|
|
reg [15:0] d14;
|
|
reg [15:0] d15;
|
|
reg [15:0] sum;
|
|
|
|
|
|
always @(posedge clock or posedge reset)
|
|
if (reset == 1'b1)
|
|
begin
|
|
d0 <= {16{1'b0}};
|
|
d1 <= {16{1'b0}};
|
|
d2 <= {16{1'b0}};
|
|
d3 <= {16{1'b0}};
|
|
d4 <= {16{1'b0}};
|
|
d5 <= {16{1'b0}};
|
|
d6 <= {16{1'b0}};
|
|
d7 <= {16{1'b0}};
|
|
d8 <= {16{1'b0}};
|
|
d9 <= {16{1'b0}};
|
|
d10 <= {16{1'b0}};
|
|
d11 <= {16{1'b0}};
|
|
d12 <= {16{1'b0}};
|
|
d13 <= {16{1'b0}};
|
|
d14 <= {16{1'b0}};
|
|
d15 <= {16{1'b0}};
|
|
sum <= {16{1'b0}};
|
|
data_out <= {12{1'b0}};
|
|
end
|
|
else
|
|
begin
|
|
d0 <= {data_in[11], data_in[11], data_in[11], data_in[11], data_in};
|
|
d1 <= d0;
|
|
d2 <= d1;
|
|
d3 <= d2;
|
|
d4 <= d3;
|
|
d5 <= d4;
|
|
d6 <= d5;
|
|
d7 <= d6;
|
|
d8 <= d7;
|
|
d9 <= d8;
|
|
d10 <= d9;
|
|
d11 <= d10;
|
|
d12 <= d11;
|
|
d13 <= d12;
|
|
d14 <= d13;
|
|
d15 <= d14;
|
|
sum <= (d0 + d1 + d2 + d3 + d4 + d5 + d6 + d7 + d8 + d9 + d10 + d11 + d12 + d13 + d14 + d15) >> 4;
|
|
data_out <= (sum[11:0]);
|
|
end
|
|
|
|
endmodule
|