This project is a Verilog RTL-based implementation of a configurable vending machine controller. It simulates a real vending system, supporting dynamic item setup, asynchronous user input, and real-time dispensing logic.
- Supports up to 1024 unique items
- APB-like configuration interface (10 MHz)
- Real-time operation mode on a 100 MHz system clock
- Handles asynchronous currency and item select inputs (10 kHz β 50 MHz)
- Dispenses items within 10 system clock cycles
- Returns change if overpaid
- Modular and clean RTL architecture
- Initializes all internal memories and registers.
- Item setup via APB-like interface:
- Set total items
- Configure item price
- Set availability
- Configuration data is safely synchronized from
pclktosystem_clk.
- Processes currency and item selection.
- Compares inserted amount with item price.
- Dispenses item and returns change if needed.
- Ensures vending decision in under 10 cycles.
fsm: Controls system mode transitions (Reset, Config, Operation)cfg_block: Handles APB-based configuration and clock domain crossingoperation_controller: Performs runtime vending logicvending_machine_top: Top-level integration and memory coordination