Design simulate implement and test a ticket dispensing


You are asked to design, simulate, implement, and test a Ticket Dispensing Machine for a subway to be operated in Boise, Idaho with the following properties:

Coin Entry Mode

The Subway Ticket Dispensing Machine accepts the following Coins
- 10 cents coin (pushbutton 2), - 25 cents coin (pushbutton 1),
- 1 dollar coin (pushbutton 0);
The machine is initialized as displaying "Amt $00.00" on the OLED display. Each time a new coin is entered, the display shows the current total in a decimal notation. The machine is not capable of dispensing tickets worth more than $10.00 (any additional amounts will be returned to the user at the end of purchasing).

The user ends the process of entering money by pushing (Pushbutton 3)then moves to Zone selection mode.
Zone selection Mode
The machine can dispense four types of tickets, depending on the distance to the destination:
1. Zone A worth $1.00 (local),
2. Zone B worth $1.35 (to Meridian),
3. Zone C worth $2.00 (to Nampa),
4. Zone D worth $2.45 (to Caldwell);

After finishing entering the money, the word "Zone Code " should be displayed.

Pressing (pushbutton 0) should scroll the choices up (A → B →C →D) and (pushbutton 1)should scroll the choices down (D → C → B → A) then wraps around, respectively. Each time the user presses one of these two buttons, the code of the next item on the list is displayed on the most left to the "Zone Code" If the two buttons are pressed together, the display freezes and stops changing the zone code, then continue to scroll according to the button pressed afterwards. The user makes the zone selection by pressing (Pushbutton 3)

Ticket Number Mode
After making the selection, the word "Tkt Nmbr 1" should be displayed. In this mode, the user is given an option of choosing the number of tickets to buy. The machine displays a default number of tickets "1" as shown above. By using (pushbutton 0) to increment and (pushbutton 1)to decrement, the user can choose a number of tickets between 1 and 4. An attempt to reduce the number of tickets below 1 or increase it above 4 should results in a LED_0becomes on, the number shown on the OLED display should not change, and the machine continues to operate in this mode.

After the number of tickets is selected the user should again press (pushbutton 3)

Dispensing Mode
At this point, the tickets are dispensed, this is shown as follows
- The code and ticket number "Zone x yTkt", where x is the zone code and y is the number of tickets is displayed flashing 5 times, followed by the amount of change returned by the machine displayed as "Chg $zz.zz", where zz.zz is the amount of money.
- If the amount of money was insufficient, the machine should light LED _02 and refunds all the money entered to the user indicating the amount by displaying "Rfnd $zz.zz".
- After the machine returns the change, the next entry on (pushbutton 03) resets the machine to its original state.

Additional information
- Switch_0 should be used as a high active asynchronous reset in case of error.
- Switch_3 should be used as a cancel button while in any mode. When cancel is on, the word "canceling" is displayed blinking three times on the OLED display, operation should be canceled, and the entire amount of money entered so far should be returned as a change. This should be indicated by displaying "Rfnd $zz.zz" on the OLED display and LED _03 should be turned on.

Tasks and Deliverables for the project

The following tasks are expected to be completed:
1. Draw as many FSM bubble diagrams as you need to implement the desired functionality. Please note that multiple state machines, working in parallel, and using datapath components is a good coding style for achieving the required behavior since it makes the debugging process a lot easier.
2. Translate the FSM(s) to VHDL.
3. Develop a testbench to test the functionality of your design and perform functional simulation of your code. Select your test cases carefully and label them including expected results. Waveforms should be annotated to show your understanding of the design.
4. Synthesize your code using Vivado.
5. Prepare the correct XDC (Constraints) file.
6. Implement your circuit using on the Zybo board.
7. Check thoroughly all generated reports. Pay attention to timing, resource usage, and latches.
8. Download your bitstream to the FPGA board.
9. Test the operation of your circuit experimentally using the FPGA prototyping Board.

Include the following with your electronic submission:
1. All state diagrams (Scan them if drawn by hand or take a good resolution picture). Include thesealong with a write-up explaining the design strategy for the whole project 2. All source files used for synthesis, testing, and implementation of your circuit.
3. Xilinx Design Constraints file (XDC) and the bitsteam file.
4. Testbench(s) code with samples of annotated simulation waveforms, proving the correctoperation of each mode (make sure waveforms are readable).
5. Extract the following information:
a. Resource utilization. Number of FF, latches, LUTs ... etc.
b. Maximum operating clock frequency after implementation.
6. List of any deviations/additions from the original specification.
7. Difficulties encountered and lessons learned.

Request for Solution File

Ask an Expert for Answer!!
Electrical Engineering: Design simulate implement and test a ticket dispensing
Reference No:- TGS02463139

Expected delivery within 24 Hours