data/full_repos/permissive/206437232/TP4-MIPS-2019/Verilog/seg_execute_alu_control.v
data/verilator_xmls/7a76daf3-2425-46fa-8d90-0e2dd5730ac3.xml
module seg_execute_alu_control
    #( parameter 
        NB_ALUCTL   = 4,
        NB_OP       = 4,
        NB_FUNC     = 6
    )
    (
        input   wire    [NB_FUNC - 1: 0]    i_funct,
        input   wire    [NB_OP - 1: 0]      i_ALUOp,
        output  reg     [NB_ALUCTL - 1: 0]  o_ALUctl
    );

    always @(*) begin
        casez (i_ALUOp)
            4'b0000:
                o_ALUctl = 4'b0010;

            4'b0001:
                o_ALUctl = 4'b0110;
            
            4'b0010: begin
                casez (i_funct)
                    6'b000000: o_ALUctl = 4'b1011;
                    6'b000010: o_ALUctl = 4'b1100;
                    6'b000011: o_ALUctl = 4'b1101;
                    6'b000100: o_ALUctl = 4'b1011;
                    6'b000110: o_ALUctl = 4'b1100;
                    6'b000111: o_ALUctl = 4'b1101;
                    6'b100001: o_ALUctl = 4'b0010;
                    6'b100011: o_ALUctl = 4'b0110;
                    6'b100100: o_ALUctl = 4'b0000;
                    6'b100101: o_ALUctl = 4'b0001;
                    6'b100110: o_ALUctl = 4'b1001;
                    6'b100111: o_ALUctl = 4'b1010;
                    6'b101010: o_ALUctl = 4'b0111;
                    
                    default: o_ALUctl = 4'b0010;
                endcase
            end
            
            4'b0011:
                o_ALUctl = 4'b0011;

            4'b0100:
                o_ALUctl = 4'b0000;
            
            4'b0101:
                o_ALUctl = 4'b0001;
            
            4'b0110:
                o_ALUctl = 4'b1001;
            
            4'b0111:
                o_ALUctl = 4'b1000;
            
            4'b1000:
                o_ALUctl = 4'b0111;
            
            default: o_ALUctl = 4'b0010;
        endcase
    end

endmodule
module seg_execute_alu_control
    #( parameter 
        NB_ALUCTL   = 4,
        NB_OP       = 4,
        NB_FUNC     = 6
    )
    (
        input   wire    [NB_FUNC - 1: 0]    i_funct,
        input   wire    [NB_OP - 1: 0]      i_ALUOp,
        output  reg     [NB_ALUCTL - 1: 0]  o_ALUctl
    );


    always @(*) begin
        casez (i_ALUOp)
            4'b0000:
                o_ALUctl = 4'b0010;

            4'b0001:
                o_ALUctl = 4'b0110;
            
            4'b0010: begin
                casez (i_funct)
                    6'b000000: o_ALUctl = 4'b1011;
                    6'b000010: o_ALUctl = 4'b1100;
                    6'b000011: o_ALUctl = 4'b1101;
                    6'b000100: o_ALUctl = 4'b1011;
                    6'b000110: o_ALUctl = 4'b1100;
                    6'b000111: o_ALUctl = 4'b1101;
                    6'b100001: o_ALUctl = 4'b0010;
                    6'b100011: o_ALUctl = 4'b0110;
                    6'b100100: o_ALUctl = 4'b0000;
                    6'b100101: o_ALUctl = 4'b0001;
                    6'b100110: o_ALUctl = 4'b1001;
                    6'b100111: o_ALUctl = 4'b1010;
                    6'b101010: o_ALUctl = 4'b0111;
                    
                    default: o_ALUctl = 4'b0010;
                endcase
            end
            
            4'b0011:
                o_ALUctl = 4'b0011;

            4'b0100:
                o_ALUctl = 4'b0000;
            
            4'b0101:
                o_ALUctl = 4'b0001;
            
            4'b0110:
                o_ALUctl = 4'b1001;
            
            4'b0111:
                o_ALUctl = 4'b1000;
            
            4'b1000:
                o_ALUctl = 4'b0111;
            
            default: o_ALUctl = 4'b0010;
        endcase
    end

endmodule