Design and implement a finite state machine that controls a vending machine. The vending machine sells packages of gum that cost 15 cents each. The machine accepts nickels (5 cents) and dimes (10 cents). After someone has inserted 15 cents, the FSM will send an output signal to a mechanical system that releases a package of gum. If a customer inserts 20 cents (two dimes), they will get a pack of gum but they will not receive any change back.
In addition to standard reset and clock signals, your FSM will have two input signals: N and D. N is asserted when the customer has inserted a nickel and D is asserted when the customer inserts a dime. (You can assume that both can never be asserted at the same time.) The system has one output Y, which indicates that the mechanical system should dispense the gum. After the system outputs Y = 1 for one clock cycle, it returns to its initial state for the next customer.
(a) Draw a Moore-style state diagram that shows the function of your system. (Hint: you can do it in only four states.)
(b) Choose a state encoding to use and indicate it clearly. Use full binary encoding, that is, make your four states have values 00, 01, 10, and 11. Here, give a table that shows which encoding value you will use for each of the states in your state machine.
(c) Draw the binary encoded state table. That is, make a table that shows how Q1^+, Q0^+, and Y relate to Q1, Q0, N, and D.
(d) Write and simplify Boolean expressions for Q1^+, Q0^+, and Y.
(e) Draw the final FSM implementation using two D flip-flops and gates. Don't forget about the system's reset.