Tuesday, 29 July 2025

Design Code 1

 Design Code:

`timescale 1ns / 1ps


module vending_machine(

    input clk, reset, cancel,

    input [1:0] coin, sel,

    output reg PrA, PrB, PrC, change

);


    // State encoding using parameter 

    parameter S0 = 3'b000, S5 = 3'b001, S10 = 3'b010, S15 = 3'b011, S20 = 3'b100;


    reg [2:0] current_state, next_state;


    // Sequential logic for state transition

    always @(posedge clk or posedge reset) begin

        if (reset)

            current_state <= S0; // Reset to initial state

        else

            current_state <= next_state;

    end


    // Next State Logic (Combinational)

    always @(*) begin

        case (current_state)

            S0: begin

                if (coin == 2'b01) next_state = S5;

                else if (coin == 2'b10) next_state = S10;

                else next_state = S0;

            end


            S5: begin

                if (coin == 2'b01) next_state = S10;

                else if (coin == 2'b10) next_state = S15;

                else if (cancel) next_state = S0;

                else next_state = S5;

            end


            S10: begin

                if (coin == 2'b01) next_state = S15;

                else if (coin == 2'b10) next_state = S20;

                else if (cancel) next_state = S0;

                else next_state = S10;

            end


            S15: begin

                if (coin == 2'b01) next_state = S20;

                else if (cancel) next_state = S0;

                else next_state = S15;

            end


            S20: begin

                if (cancel) next_state = S0;

                else next_state = S20;

            end


            default: next_state = S0; // Default state

        endcase

    end


    // Output Logic

    always @(posedge clk or posedge reset) begin

        if (reset) begin

            PrA <= 0;

            PrB <= 0;

            PrC <= 0;

            change <= 0;

        end 

        else begin

            // Default values (avoid latches)

            PrA <= 0;

            PrB <= 0;

            PrC <= 0;

            change <= 0;


            case (current_state)

                S5: begin

                    if (sel == 2'b00) begin

                        PrA <= 1;  // Product A (Rs. 5)

                        change <= 0; // No change needed

                    end

                end

                

                S10: begin

                    if (sel == 2'b00) begin

                        PrA <= 1;  // Product A (Rs. 5)

                        change <= 1; // Rs. 5 change

                    end

                    else if (sel == 2'b01) begin

                        PrB <= 1; // Product B (Rs. 10)

                        change <= 0; // No change needed

                    end

                end

                

                S15: begin

                    if (sel == 2'b01) begin

                        PrB <= 1;  // Product B (Rs. 10)

                        change <= 1; // Rs. 5 change

                    end

                end

                

                S20: begin

                    if (sel == 2'b00) begin

                        PrA <= 1;

                        change <= 1; // Rs. 15 change

                    end

                    else if (sel == 2'b01) begin

                        PrB <= 1;

                        change <= 1; // Rs. 10 change

                    end

                    else if (sel == 2'b10) begin

                        PrC <= 1; // Product C (Rs. 20)

                        change <= 0; // No change needed

                    end

                end

            endcase

            

            // Handle cancellation (return money)

            if (cancel) 

                change <= 1;

        end

    end

endmodule


No comments:

Post a Comment