IC Card Refill Machine
A Basys 3 kiosk for editing an IC card's balance digit by digit, with a pause/resume controller that preserves full machine state.

The problem
A refill kiosk needs to let someone edit a 5-digit balance one digit at a time on a 4-digit scrolling display — and it needs to survive being paused mid-edit without losing the balance, the cursor position, or what’s on screen. That’s more state to track correctly than it first looks like.
Approach
A multi-state FSM and datapath in Verilog handle balance arithmetic and digit-entry, with cursor navigation letting the user move across a 5-digit value through a 4-digit scrolling window. A pause/resume and priority-reset controller sits on top, built to preserve the full machine state — balance, cursor position, and what’s currently on screen — across a pause, and to let reset take priority over pause consistently.
What broke
Bring-up surfaced a display-mirroring bug — output reproducing incorrectly across every digit, not just one — that didn’t show up in simulation testbenches alone. Tracking it down took comparing the simulated datapath against actual board behavior, which is what eventually isolated it to how the digit-select signal was being driven to the display hardware.
Results
A working kiosk interface: digit-by-digit balance editing with cursor navigation, and pause/resume that genuinely preserves state instead of resetting it — verified in simulation and confirmed correct on the physical board after the display bug was found and fixed.
What I’d do differently
Add a hardware-in-the-loop check for display output earlier in the process — the mirroring bug existed for a while before board bring-up surfaced it, and simulation alone didn’t catch it.