module MyFir16(clk, rst_n, fir_in, fir_out);
parameter IDATA_WIDTH=12;
parameter PDATA_WIDTH=13;
parameter FIR_TAP =16;
parameter FIR_TAPHALF=8;
parameter COEFF_WIDTH=12;
parameter OUT_WIDTH=24;
parameter cof1=12'hff5;
parameter cof2=12'hfed;
parameter cof3=12'h02c;
parameter cof4=12'h05b;
parameter cof5=12'hf52;
parameter cof6=12'hec2;
parameter cof7=12'h275;
parameter cof8=12'h7ff;
input clk;
input rst_n;
input [IDATA_WIDTH-1:0] fir_in;
output [OUT_WIDTH-1:0] fir_out;
reg[OUT_WIDTH+2:0] fir_out1;
wire[OUT_WIDTH-1:0] fir_out;
reg[PDATA_WIDTH-1:0]shift_buf[FIR_TAP-1:0];
reg[PDATA_WIDTH-1:0] add015;
reg[PDATA_WIDTH-1:0] add114;
reg[PDATA_WIDTH-1:0] add213;
reg[PDATA_WIDTH-1:0] add312;
reg[PDATA_WIDTH-1:0] add411;
reg[PDATA_WIDTH-1:0] add510;
reg[PDATA_WIDTH-1:0] add69;
reg[PDATA_WIDTH-1:0] add78;
wire[PDATA_WIDTH+COEFF_WIDTH-1:0] mul1;
wire[PDATA_WIDTH+COEFF_WIDTH-1:0] mul2;
wire[PDATA_WIDTH+COEFF_WIDTH-1:0] mul3;
wire[PDATA_WIDTH+COEFF_WIDTH-1:0] mul4;
wire[PDATA_WIDTH+COEFF_WIDTH-1:0] mul5;
wire[PDATA_WIDTH+COEFF_WIDTH-1:0] mul6;
wire[PDATA_WIDTH+COEFF_WIDTH-1:0] mul7;
wire[PDATA_WIDTH+COEFF_WIDTH-1:0] mul8;
reg[PDATA_WIDTH+COEFF_WIDTH-1:0] mul1_reg;
reg[PDATA_WIDTH+COEFF_WIDTH-1:0] mul2_reg;
reg[PDATA_WIDTH+COEFF_WIDTH-1:0] mul3_reg;
reg[PDATA_WIDTH+COEFF_WIDTH-1:0] mul4_reg;
reg[PDATA_WIDTH+COEFF_WIDTH-1:0] mul5_reg;
reg[PDATA_WIDTH+COEFF_WIDTH-1:0] mul6_reg;
reg[PDATA_WIDTH+COEFF_WIDTH-1:0] mul7_reg;
reg[PDATA_WIDTH+COEFF_WIDTH-1:0] mul8_reg;
reg[PDATA_WIDT+COEFF_WIDTH:0] add_ mul12;
reg[PDATA_WIDT+COEFF_WIDTH:0] add_ mul34;
reg[PDATA_WIDT+COEFF_WIDTH:0] add_ mul56;
reg[PDATA_WIDT+COEFF_WIDTH:0] add_ mul78;
integer i,j;
always@(posedge clk or negedge rst_n£©
begin