← All projects
ShippedSummer 2026Solo

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.

A themed diagram of the Basys 3 board running the IC card refill kiosk, labeling the digit display, mode-advance button, pause button, and reset button.

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.