//Cola Automat

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

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

//Bitweise Zuordnung der Ausgabe
localparam EIN_EUREO_EINWERFEN  = 3'b001;
localparam ZWEI_EURO_EINWERFEN  = 3'b010;
localparam DREI_EURO_EINWERFEN  = 3'b011;
localparam COLA_ENTNEHMEN       = 3'b000;
localparam RUECKGELD            = 3'b100;

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

        3'b001:  
        begin
            AUSGABE <= ZWEI_EURO_EINWERFEN;
            if(EINEURO)
                ZUSTAND <= 3'b010;
            else if(ZWEIEURO)
                ZUSTAND <= 3'b100;
            else
                ZUSTAND <= 3'b001;
        end

        3'b010:  
        begin
            AUSGABE <= EIN_EUREO_EINWERFEN;
            if(EINEURO)
                ZUSTAND <= 3'b100;
            else if(ZWEIEURO)
                ZUSTAND <= 3'b011;
            else
                ZUSTAND <= 3'b010;
        end

        3'b011:  
        begin
            AUSGABE <= RUECKGELD;
            ZUSTAND <= 3'b100;
        end

        3'b100:  
        begin
            AUSGABE <= COLA_ENTNEHMEN;
            ZUSTAND <= 3'b000;
        end

    endcase

endmodule //cola