data/full_repos/permissive/211316121/lab4_4bits/sources_1/new/ALU.v
data/verilator_xmls/08782f40-86a4-4e07-9c18-a7a7900305bc.xml
module ALU(
    input [3:0] a,
    input [3:0] b,
    input c0,
    input s0,
    input s1,
    input m,
    output reg [3:0] s,
    output reg c4,
    output reg n,
    output reg z,
    output reg v    
    );
    reg [4:0] tmp;
    always@(*)
    begin
        c4=0;
        n=0;
        z=0;
        v=0;
        tmp=5'b0;
        case({m,s1,s0})
            'b000:s=~a;
            'b001:s=a&b;
            'b010:s=a|b;
            'b011:s=a^b;
            'b100:
                begin
                    tmp={1'b0,a}+{1'b0,b}+{4'b0,c0};
                    s=tmp[3:0];
                    c4=tmp[4];
                    v=s[3]^a[3]^b[3]^c4;
                end
            'b101:
                begin
                    tmp={1'b0,a}-{1'b0,b}-{4'b0,c0};
                    s=tmp[3:0];
                    c4=tmp[4];
                    v=s[3]^a[3]^b[3]^c4;
                end
            default:s=a;
        endcase
        n=s[3];
        z=~(|s[3:0]);
    end
endmodule
module ALU(
    input [3:0] a,
    input [3:0] b,
    input c0,
    input s0,
    input s1,
    input m,
    output reg [3:0] s,
    output reg c4,
    output reg n,
    output reg z,
    output reg v    
    );

    reg [4:0] tmp;
    always@(*)
    begin
        c4=0;
        n=0;
        z=0;
        v=0;
        tmp=5'b0;
        case({m,s1,s0})
            'b000:s=~a;
            'b001:s=a&b;
            'b010:s=a|b;
            'b011:s=a^b;
            'b100:
                begin
                    tmp={1'b0,a}+{1'b0,b}+{4'b0,c0};
                    s=tmp[3:0];
                    c4=tmp[4];
                    v=s[3]^a[3]^b[3]^c4;
                end
            'b101:
                begin
                    tmp={1'b0,a}-{1'b0,b}-{4'b0,c0};
                    s=tmp[3:0];
                    c4=tmp[4];
                    v=s[3]^a[3]^b[3]^c4;
                end
            default:s=a;
        endcase
        n=s[3];
        z=~(|s[3:0]);
    end
endmodule