Ant64 System Overview
A federation of specialised subsystems — each focused, each deterministic, all connected.
FireStorm — Main CPU and Chipset (GoWin GW5AST FPGA)
The Ant64's processing fabric is one FPGA containing both a 64-bit RISC-V CPU (FireStorm) and the custom chipset alongside it — graphics, audio, blitter, copper, rasteriser. CPU and chipset share the FPGA's memory ports and timing fabric, so the CPU and the hardware aren't separated by a driver layer or a memory copy — they're the same silicon, running in the same clock domain.
FireStorm Execution Engine
GoWin GW5AST-138 · ~$26/chip volume · 22nm
FireStorm EE (RV64GC + 7 custom extensions)
|
+--> User applications (C++ · Dear ImGui · game logic)
+--> Audio engine setup, AI, pathfinding, game state
+--> Chipset register writes (one address space)
- RV64GC compatible — vanilla RISC-V binaries run unchanged from the HyperRAM narrow region
- Wide mode — hot-path code in 36-bit SRAM has 64 GPRs, 64 FPRs, wider immediates, predicated execution, dual-issue
- Seven custom extensions — Xcrisp (memory primitives), Xstack (BSRAM stacks), Xcond (predication), Xlate (translators), Xctx (hardware contexts), Xmath (games/audio/DSP math), and the implicit Xwide
- Shallow OoO microarchitecture — register scoreboarding, dual-issue, DSP-block-backed multipliers, ~380 MHz on the GW5AST
Chipset (in the same FPGA)
| Block | Detail |
|---|---|
| Display pipeline | Up to 16 hardware layers, copper-driven raster effects |
| Blitter | Memory moves, transforms, blends, transparency |
| Audio engine | 128+ voices · FM / VA / sample / granular / physical modelling · WM8960/WM8962 codec |
| Copper | Beam-synchronised list processor for mid-scanline register changes |
| 2D rasteriser | ImGui draw-list backend · triangle setup · scanline fill · texture sampling |
| Raycaster / voxel | Hardware ray queries, voxel column rendering |
The CPU writes a sprite attribute and the next scanline shows it. No driver, no DMA-and-flush, no abstraction wall. More about FireStorm »
Memory System
| Bus | Width | Purpose |
|---|---|---|
| DDR3 (external) | 72-bit | Main code/data — 1.125 GB (Ant64S) / 2.25 GB (Ant64) / 4.5 GB (Ant64C); SODIMM-upgradable to 4.5 GB |
| Wide-mode SRAM | 36-bit | Hot-path code for FireStorm wide mode — up to 1M × 36-bit (~4.5MB) |
| HyperRAM (external) | 8-bit | Narrow mode (standard RV64GC) — unmodified RISC-V code/data runs here. Two banks, 32 MB total (the second on a private bus); shared with personality ROM |
| On-chip BSRAM | varies | Sprite line buffers, palette, copper lists, scratchpad |
| OPI | — | Pulse — chip register window |
| PCIe ×1 | — | DeMon (CM5) — bidirectional comms (register + data) |
| HDMI RX (×2, from DeMon/CM) | — | HDMI0 over-plane + HDMI1 under-plane video |
| MIPI RX (×1, from Pulse) | 2-lane + clock, 1.5 Gbps/lane = 3 Gbps | Pulse sequencer UI feed (composited as a display layer) |
Wide mode — and the wide-mode-only extensions (Xcond predication, wider immediates, indexed loads via 0x7F escape) — runs off the 36-bit SRAM bus; software need not special-case the model.
DeMon — System Supervisor (Raspberry Pi CM4 / CM5)
DeMon is the glue — it boots, watches, bridges, displays the boot UI, and provides connectivity.
DeMon is now built around a Raspberry Pi Compute Module — a CM5 lite (quad-core ARM: Cortex-A72 on CM4, A76 on CM5), 1–8 GB RAM, with a VideoCore GPU — paired with an ESP32-C5 (Wi-Fi 6, Bluetooth 5.3, Thread, Zigbee) for wireless. AntOS runs on the CM, on a real Linux underneath, not on FireStorm, so the OS keeps running even when the FPGA bitstream is reloaded (a personality cartridge swap, for example). The VideoCore GPU also runs AntOS's ImGui UI on stock GLES — no software rasterisation — so the FPGA's primitive-render accelerator is no longer needed.
- Programs the FireStorm FPGA (bitstream, flash, hardware debug across the whole Ant64)
- 2× HDMI → FireStorm — HDMI0 carries the 720p ImGui over-plane and HDMI1 carries the under-plane video; CM↔FPGA data uses PCIe
- PCIe ×1 → FireStorm — bidirectional comms to the FPGA's PCIe / SerDes hard IP (register + data return path)
- MIPI DSI → 4″ keyboard touch TFT (local UI surface, right of the keyboard) — always live, independent of FPGA state
- Triple SID engine (L/C/R, 9 SID voices) and SAM speech synthesizer (formant TTS) — run in software on the CM; system sounds, FX, SID-file playback, voice prompts, accessibility, dialogue; streamed to FireStorm over HDMI / PCIe
- SPI master → Pulse, cartridge, keyboard TFT (bidirectional peer link to Pulse)
- Phreak wireless subsystem — WiFi / BT / Thread / Zigbee via ESP32-C5 · optional LoRa Plus (LR2021 / Wio-LR2021) · optional GPS (NEO-M10)
- Machine identity — ATECC608C secure element (unique, verifiable serial) · RTC MCP79410 with CR2450 backup
- Watchdog · hardware debug · USB host (keyboard, mouse)
- Storage — internal HS USB hub: DBFS master (D:) + shadow (D!:) + internal general drive (B:) + external memory stick (E:) · external SD card slot (A:) · cartridge (C:, Ant64 only)
The CM drives the keyboard touch TFT over MIPI directly, so DeMon can show a boot UI before FireStorm is even loaded — recovery screens, splash images, error messages — on that always-live surface, while the main display (FPGA-driven) picks up the CM's HDMI overlay once FireStorm is running.
Pulse — Music, Sequencer & Performance MCU (ESP32-P4 + 32MB PSRAM)
Pulse is the hands-on musical brain — every knob, dial, MIDI socket, and the sequencer UI itself live here.
Pulse is built on an ESP32-P4 SoC, with 32MB of embedded PSRAM and a MIPI display engine that feeds its own UI directly into the FireStorm display compositor. Where DeMon owns boot, recovery, network, and the supervisor overlay, Pulse owns everything performance-related — MIDI, jog dials, sample storage, sequencer logic, software synth emulators, and the sequencer / mixer / sample-browser UI. Pulse runs a dedicated real-time RTOS — fixed tasks, no user scripting — which lets it act as the higher-throughput, lower-jitter data pump to FireStorm — thanks to having no OS load to time-slice against, not a wider bus (Pulse uses an OPI register window; the CM5-based DeMon connects over PCIe) — where the script-running DeMon is the busier general-purpose host.
- MIDI — DIN In/Out/Thru (Ant64C, via UART optoisolators; MIDI 1.0) + USB MIDI 2.0 (host port + device port) + MPE support
- 8× RGB jog dials with integrated push buttons + RGB LEDs
- Joypads via Sticky controller (SPI master)
- MIPI display TX → FireStorm (sequencer UI + sprite/tilemap layer descriptions, rendered by FireStorm)
- OPI → FireStorm (chipset register window; small-packet path parallel to MIPI)
- SPI ↔ DeMon (bidirectional command/data link — master + slave channels each side)
- 32MB PSRAM for sample libraries, AMY patch banks, sequencer state, software synth working memory
- AMY synthesis library (github.com/shorepine/amy) running natively on the ESP32-P4 — additive / FM / PCM / partials / filters / envelopes; audio streamed to FireStorm for mixing with the chipset's hardware voices
- Classic synth emulators in firmware (speech synthesis lives on DeMon — see SAM)
- Round TFT display (separate SPI) for jog dial labels and per-knob state
- 4× 3.5mm trigger / CV inputs (Kick · Snare · Sync · Foot)
Sticky — 5V Input Protection (AVR128DB64)
Cheap, replaceable, electrically isolated.
The Sticky MCU handles 5V joystick / paddle / 9-pin-mouse inputs without exposing the FPGA to surges or back-EMF:
- 4 joypad ports — Atari/C64 compatible · Sega 3-/6-button · paddles · 9-pin mice
- Per-port I2C or serial TX/RX modes
- Talks only to Pulse over SPI
- Replaceable as a socketed part — sacrificial protection layer
Heavy Compute — No Separate Accelerator
Earlier designs added a Raspberry Pi Zero 2W on the FPGA's expansion header as an optional accelerator. That's retired: DeMon is now itself a quad-core Raspberry Pi CM5, so the application-class CPU this slot was meant to add is already at the centre of the system, and the FPGA's high-speed links are committed to it (PCIe + 2× HDMI).
Heavy work now runs where the silicon already is:
- On DeMon (the CM) — emulation cores, codec work, software audio plugins, Linux services, and larger AI / DSP / ML inference (quad ARM + NEON + VideoCore GPU).
- On the FPGA's on-die A25 hard core — an 800 MHz RISC-V coprocessor, present under any image, for latency-sensitive kernels.
- Via Xaccel — FireStorm handing compute kernels to the A25 (over AXI) or to the CM (over PCIe), with results returned through the register scoreboard.
Small AI / DSP work also runs on Pulse's ESP32-P4 PIE extensions. None of it needs a separate board — Ant64 boots and runs with the compute it already has.
Outputs
Audio
| Output | Notes |
|---|---|
| 2× stereo speakers | Internal |
| Phono line out | Standard RCA |
| HDMI audio | Via video output |
| Optical S/PDIF | Ant64C only |
| Headphone | 3.5mm |
Video
| Output | Notes |
|---|---|
| HDMI | All models — 4K@60 via Parade PS176 DP→HDMI bridge fed by FPGA SerDes |
| VGA + 3.5mm audio | All models — DE-15 + 3.5mm jack via AG6201 HDMI→VGA bridge fed by FPGA fabric HDMI TX |
| Light synth | Generative visual output |
| Supervisor UI feeds | DeMon's ImGui overlay (720p, via HDMI from the CM) + Pulse's sequencer UI (MIPI), composited as layers on the main display |
| Keyboard touchscreen | DeMon-driven (MIPI DSI), always active regardless of FPGA state |
| Circular display on case | Pulse-driven, SPI, always active regardless of FPGA state — far left of case, above keyboard |
Network & Connectivity
| Interface | Notes |
|---|---|
| WiFi 2.4GHz | All models (via ESP32-C5) |
| WiFi 5GHz / 6 | All models (via ESP32-C5) |
| Gigabit Ethernet | All models (built into the CM5) |
| BT 5.3 · Thread · Zigbee | Via ESP32-C5 |
| Gossip P2P mesh | AntOS built-in |
| TCP/IP debug server | AntOS built-in |
| LoRa | Optional (LR2021 / Wio-LR2021) |
Storage & I/O
- Internal DBFS drive (D:) + shadow drive (D!:) + general drive (HS USB hub via DeMon) · external SD card slot · external USB memory-stick port
- Cartridge port (30-pin)
- USB keyboard / mouse
- 4× 3.5mm trigger / CV inputs
Interconnects
| Bus | Used For |
|---|---|
| PCIe ×1 | FireStorm ↔ DeMon (CM5) — bidirectional comms (register + data), incl. FireStorm → DeMon return |
| HDMI (×2) | DeMon (CM5) → FireStorm — HDMI0 over-plane + HDMI1 under-plane video |
| OPI | FireStorm ↔ Pulse — chip register window (small-packet path) |
| MIPI 2-lane | Pulse (ESP32-P4) → FireStorm — sequencer UI overlay + bulk data |
| OPI (8-bit SPI) | FireStorm → Pulse — mixer readback, telemetry, audio/data return (+ Tempest interrupt) |
| MIPI DSI | DeMon (CM5) → keyboard touch TFT |
| FPGA config / debug | DeMon (CM5) → FireStorm — bitstream, flash, hardware debug |
| SPI bidirectional | DeMon ↔ Pulse (master + slave each side — peer command/data) · DeMon ↔ cart |
| Hi-speed UART | DeMon ↔ Pulse |
Software Stack
+--------------------------------------------------+
| User app (C++ / Luau / Dear ImGui) |
| Music workstation · games · demos · tools |
+--------------------------------------------------+
| AntOS (on DeMon/CM4-5) · Linux · Luau · DBFS |
| TCP/IP debug server · Gossip P2P |
+--------------------------------------------------+
| FireStorm EE (RV64GC + 7 extensions, in FPGA) |
| Runs the user app; AntOS UI composited as layer |
+--------------------------------------------------+
| Chipset in same FPGA: Display · Audio · Blitter |
| Copper · Raster · Raycaster |
+--------------------------------------------------+
| DeMon (RPi CM5 + ESP32-C5) · Pulse (ESP32-P4)|
+--------------------------------------------------+
AntOS runs on DeMon (the CM5 supervisor), providing OS-level services — filesystem, network, scripting, debug server, UI — independently of the FPGA. User applications, games, and demos run on FireStorm in the FPGA, with direct access to the chipset (sprites, blitter, copper, audio engine). DeMon and FireStorm communicate over the CM's PCIe link and HDMI overlay; Pulse reaches FireStorm over its own OPI register window and MIPI feed. Because AntOS lives outside the FPGA, FPGA reconfigures (personality cartridges, development iteration, recovery) do not require an OS reboot — just a brief main-display blackout while the FPGA loads its new state. On power-on or reset the FPGA auto-loads its native Ant64 chipset from its own flash in a fraction of a second; a personality cartridge load takes up to ~1 second. The keyboard touchscreen (driven by DeMon) and the circular display above the keyboard (driven by Pulse) remain visible throughout, so the user always has feedback.
Model Comparison
| Feature | Ant64S | Ant64 | Ant64C |
|---|---|---|---|
| FPGA | GoWin GW5AST-138 | GoWin GW5AST-138 | GoWin GW5AST-138 |
| FireStorm EE | RV64GC + extensions + 32-bit-pair dual-issue | RV64GC + extensions + 32-bit-pair dual-issue | RV64GC + extensions + 32-bit-pair dual-issue |
| FPGA hard RISC-V coprocessor | 800 MHz, 32-bit (debug / monitor) | 800 MHz, 32-bit (debug / monitor) | 800 MHz, 32-bit (debug / monitor) |
| DDR3 | 1.125GB→4.5GB, 72-bit (7.2 GB/s) | 2.25GB→4.5GB, 72-bit (7.2 GB/s) | 4.5GB, 72-bit (7.2 GB/s) |
| Wide-mode SRAM | 1M × 36-bit (~4.5MB) | 1M × 36-bit (~4.5MB) | 1M × 36-bit (~4.5MB) |
| Supervisor | DeMon (RPi CM5 + ESP32-C5) | DeMon (RPi CM5 + ESP32-C5) | DeMon (RPi CM5 + ESP32-C5) |
| Music/control | Pulse (ESP32-P4 + 32MB PSRAM) | Pulse (ESP32-P4 + 32MB PSRAM) | Pulse (ESP32-P4 + 32MB PSRAM) |
| WiFi | 2.4 + 5 GHz (Wi-Fi 6) | 2.4 + 5 GHz (Wi-Fi 6) | 2.4 + 5 GHz (Wi-Fi 6) |
| Ethernet | Gigabit | Gigabit | Gigabit |
| DIN MIDI | No | No | In / Out / Thru |
| Optical audio | No | No | S/PDIF |
| Video out | Main HDMI + retro VGA/audio | Main HDMI + retro VGA/audio | Main HDMI + retro VGA/audio |