`timescale 1ns/1ns

module data_cal(
input clk,
input rst,
input [15:0]d,
input [1:0]sel,

output reg [4:0]out,
output reg validout
);
//*************code***********//


reg  [16:0] d_reg;


always@(posedge clk or negedge rst)begin
    if(!rst)
        d_reg <= 'd0;
    else if(sel == 2'b0)
        d_reg <= d  ;
    else
        d_reg <= d_reg;
end


always@(posedge clk or negedge rst)begin
    if(!rst)begin
        out      <= 'd0;
        validout <= 1'b0;
    end
    else begin
        case(sel)
            2'd0: begin
                out      <= 'd0;
                validout <= 1'b0;
            end
            2'd1: begin
                out      <= d_reg[3:0]+d_reg[7:4];
                validout <= 1'b1;
            end
            2'd2: begin
                out      <= d_reg[3:0]+d_reg[11:8];
                validout <= 1'b1;
            end
            2'd3:begin
                out      <= d_reg[3:0]+d_reg[15:12];
                validout <= 1'b1;
            end
            default:;
        endcase
    end
end

//*************code***********//
endmodule