//Cola Automat

module cola (CLK, RST, ENABLE, EINEURO, ZWEIEURO, AUSGABE, ZUSTAND);

//Ein-/Ausgaenge
input CLK;
input EINEURO, ZWEIEURO, ENABLE, RST;
output reg [1:0] AUSGABE;
output reg [1:0] ZUSTAND;

//Bitweise Zuordnung der Ausgabe
localparam EIN_EUREO_EINWERFEN  = 2'b01;
localparam ZWEI_EURO_EINWERFEN  = 2'b10;
localparam DREI_EURO_EINWERFEN  = 2'b11;
localparam COLA_ENTNEHMEN       = 2'b00;

//Immer bei CLK oder RST: 0 -> 1
always @(posedge CLK or posedge RST)
if(RST)
    begin
        AUSGABE <= DREI_EURO_EINWERFEN;
        ZUSTAND <= 2'b00;
    end
else if (ENABLE)
    case(ZUSTAND)
        2'b00:  
        begin
            AUSGABE <= DREI_EURO_EINWERFEN;
            if (EINEURO)
                ZUSTAND <= 2'b01;
            else if(ZWEIEURO)
                ZUSTAND <= 2'b10;
            else
                ZUSTAND <= 2'b00;
        end

        2'b01:  
        begin
            AUSGABE <= ZWEI_EURO_EINWERFEN;
            if(EINEURO)
                ZUSTAND <= 2'b10;
            else if(ZWEIEURO)
                ZUSTAND <= 2'b11;
            else
                ZUSTAND <= 2'b01;
        end

        2'b10:  
        begin
            AUSGABE <= EIN_EUREO_EINWERFEN;
            if(EINEURO)
                ZUSTAND <= 2'b11;
            else
                ZUSTAND <= 2'b10;
        end

        2'b11:  
        begin
            AUSGABE <= COLA_ENTNEHMEN;
            ZUSTAND <= 2'b00;
        end

    endcase

endmodule //cola