`timescale 1ns/1ns

module multi_pipe#(
	parameter size = 4
)(
	input 						clk 		,   
	input 						rst_n		,
	input	[size-1:0]			mul_a		,
	input	[size-1:0]			mul_b		,
 
 	output	reg	[size*2-1:0]	mul_out		
);
    wire [size*2-1:0] mul_tmp [0:size-1];
    genvar i;
    generate
        for(i=0;i<=size-1;i=i+1) begin:bit_shift
            assign mul_tmp[i] = mul_b[i]?(mul_a<<i):'d0;
        end
    endgenerate
    reg [size*2-1:0] add1, add2;
    always@(posedge clk or negedge rst_n) begin
        if(!rst_n) begin
            {add1,add2} <= 'd0;
            mul_out <= 'd0;
        end
        else begin
            add1 <= mul_tmp[0] + mul_tmp[1];
            add2 <= mul_tmp[2] + mul_tmp[3];
            mul_out <= add1 + add2;
        end
    end
endmodule