← All projects
ShippedSummer 2026Solo

Tsukiji Fish Market Announcer

An auctioneer display for a Tsukiji-style fish market, built entirely in Verilog on a Basys 3 — scrolling variable-length messages across a 4-digit alphanumeric display.

A themed diagram of the Basys 3 board running the fish market announcer, labeling the bouncing 7-segment display, mode-advance button, pause button, and reset button.

The problem

A standard 4-digit 7-segment display is built for numbers, not names and prices scrolling by in an auction. Getting variable-length text onto it means treating the display as a small window that scrolls across a longer message — and building a 7-segment decoder that can render letters, not just digits.

Approach

Messages live in a string ROM, and a character-select window mux picks which four characters of the current message are visible at any moment, scrolling the window across longer strings. The 7-segment decoder was extended from the standard digit-only mapping to alphanumeric output, so it can drive real letters for names and prices, not just numeric readouts. A priority-based reset/pause controller sits underneath: reset always preempts pause, enforced consistently across every FSM state.

What broke

Getting reset priority right across every state — not just the “obvious” ones — was the real correctness work here. It’s easy to handle reset correctly in the states you’re thinking about and miss it in an edge case elsewhere in the FSM; the fix was verifying reset behavior systematically across the full state set rather than spot-checking a few transitions.

Results

A working scrolling alphanumeric display driven entirely by a hand-written Verilog datapath and FSM — no soft microcontroller, no framework, just RTL directly driving the board’s 7-segment output.

What I’d do differently

Pending — this project’s retrospective wasn’t in the source material this case study was drafted from. Krithik: what would you change if you did this again?