✨ From vibe coding to vibe deployment. UBOS MCP turns ideas into infra with one message.

Learn more
Andrii Bidochko
  • Updated: March 22, 2026
  • 7 min read

Recreating the 3dfx Voodoo 1 GPU on FPGA: A Breakthrough in Retro Gaming Hardware

The 3dfx Voodoo 1 GPU can be faithfully recreated on an FPGA using SpinalHDL, overcoming register‑semantics quirks, pipeline timing hazards, and debugging challenges with modern RTL tooling.

Recreating the Legendary 3dfx Voodoo 1 GPU on FPGA with SpinalHDL: Design Challenges, Pipeline Timing, and the Power of Modern RTL Tools

FPGA recreation of Voodoo 1 GPU

Why a Voodoo 1 FPGA Matters Today

The Voodoo 1, released in 1996, was the first consumer graphics card to bring hardware‑accelerated 3D rendering to the mass market. Its fixed‑function pipeline, while simple compared to today’s programmable shaders, packs a dense set of hard‑wired operations—gradient interpolation, texture sampling, mip‑mapping, bilinear filtering, depth testing, fog, and more. Re‑implementing this chip on an FPGA does more than satisfy nostalgia; it provides a living laboratory for learning low‑level graphics pipelines, exploring hardware‑level timing, and testing modern RTL languages like SpinalHDL.

For hardware engineers, retro‑gaming hobbyists, and students, the project demonstrates how a classic GPU can be expressed in a high‑level, type‑safe hardware description language, simulated with cycle‑accurate tools, and finally synthesized onto a contemporary FPGA board.

Technical Deep‑Dive: Mapping Voodoo 1 Architecture to SpinalHDL

SpinalHDL, built on Scala, lets designers describe hardware with object‑oriented abstractions while generating clean Verilog. The Voodoo 1 recreation follows a clear, MECE‑structured hierarchy:

  • Bus Interface Layer: Implements the PCI‑like register map using RegIf constructs.
  • Pipeline Core: Consists of rasterizer, texture‑mapping unit (TMU), color‑combiner, and framebuffer access stages.
  • Control & Synchronization: Handles the four distinct register behaviors (FIFO, FIFO + Stall, Direct, Float‑Converted).

Each Voodoo register is declared once with full metadata—address, reset value, access type, and category—using a custom newRegAtWithCategory helper. For example:

val startR = busif
  .newRegAtWithCategory(0x020, "startR", RegisterCategory.FifoNoSync)
  .field(AFix.SQ(24 bits, 12 bits), AccessType.WO, 255 << 12, "Starting red gradient")
  .withFloatAlias()
  .asOutput()

This single line encodes the address, FIFO semantics, fixed‑point format, and the optional floating‑point alias that the original Voodoo exposed. The RegIf generator then emits the necessary bus decode logic, write‑back queues, and conversion circuitry automatically.

Beyond register mapping, the pipeline stages are expressed as composable Component blocks. The rasterizer walks gradients per pixel, the TMU performs perspective‑correct texture sampling, and the color combiner merges source and destination colors according to the Voodoo’s blending equations. Because SpinalHDL retains type information, mismatched widths or sign errors surface at compile time, dramatically reducing the debugging burden.

All generated Verilog is then fed to the Xilinx or Intel FPGA toolchain, where timing constraints are applied to meet the original Voodoo’s 75 MHz clock target. The result is a cycle‑accurate replica that can render classic demos such as “Screamer 2” directly from the FPGA.

Design Challenges and How They Were Solved

1. Register Semantics & State Propagation

The Voodoo’s register interface is not a simple configuration bus. Some registers must take effect immediately (e.g., startR), others must travel with in‑flight triangles, and a few require the pipeline to be empty before they can be applied. Mis‑sequencing leads to subtle visual artifacts—transparent patches, wrong texture filtering, or incorrect depth testing.

Solution: By extending RegIf with a RegisterCategory enum, each register’s behavior is encoded directly in the HDL. A PciFifo wrapper automatically queues FIFO writes, stalls on FIFO+Stall categories, and forwards float‑to‑fixed conversions. This eliminates scattered “if‑else” bus logic and guarantees that the architectural contract is enforced by the compiler.

2. Pipeline Timing & Hazard Management

The Voodoo’s deep pipeline processes multiple pixels concurrently. A new triangle can be issued while previous pixels are still traversing the rasterizer, TMU, and combiner. If a register changes too early, later pipeline stages may read the wrong configuration, producing “bleeding” artifacts.

Solution: A pipeline‑drain detector monitors the occupancy of each stage. When a FIFO+Stall register is written, the detector asserts a stall signal until the pipeline depth counter reaches zero. This hardware‑level flow control mirrors the original silicon’s behavior without requiring software‑side delays.

3. Precision & Fixed‑Point Rounding

The original Voodoo performed early quantization of the homogeneous coordinate W and texture coordinates S/T. Modern floating‑point simulations often preserve extra bits, causing mismatches in mip‑level selection and perspective correction.

Solution: The SpinalHDL model deliberately truncates W after the rasterizer stage, matching the hardware’s 16.16 fixed‑point format. The TMU then applies the same rounding rules used by the silicon, ensuring that mip‑map boundaries line up exactly with reference outputs.

4. Debugging a Deep Graphics Pipeline

Traditional waveform viewers become overwhelming when dozens of signals change every nanosecond across five pipeline stages. Isolating the exact pixel that misbehaves can take hours.

Solution: The project integrates Workflow automation studio with Web app editor on UBOS to generate conetrace queries. Instead of scrolling raw waveforms, engineers issue high‑level commands like:

conetrace rv path core_1.rasterizer_1.o core_1.tmu_1.io_output \
  --track 5241000 payload={x:396,y:189}

This netlist‑aware trace follows a pixel through each stage, exposing where the value diverges from the reference. The approach turned a “memory‑ordering bug” myth into a concrete fix: preserve higher‑precision accumulators, correct perspective rounding, and use dither‑subtracted destination colors in the blend factor.

Why Modern RTL Tools Make This Project Feasible for One Engineer

When the Voodoo 1 was originally designed, engineers relied on hand‑written Verilog, static timing analysis, and manual test‑bench stimulus. Today, SpinalHDL, advanced simulation kernels, and AI‑enhanced debugging dramatically reduce the cognitive load.

  • Single‑Source Architecture: Register semantics, bus decoding, and pipeline control live in one place, eliminating duplication.
  • Type Safety: Compile‑time checks catch width mismatches before synthesis.
  • Automated Documentation: The RegIf metadata can export SystemRDL files, keeping software drivers in sync.
  • AI‑Assisted Trace: Integrated with AI marketing agents that suggest likely root causes based on pattern recognition in trace logs.

These capabilities not only accelerate development but also open new research avenues: extending the Voodoo with modern shader emulation, exploring hybrid CPU‑FPGA graphics pipelines, or using the design as a teaching platform in university labs.

Future Directions: From Retro GPU to AI‑Powered Graphics Engine

With the core pipeline stable, the next logical step is to integrate AI‑driven features. For instance, an OpenAI ChatGPT integration could generate shader‑like effects on‑the‑fly, while a Chroma DB integration could store texture palettes for rapid lookup.

Other exciting extensions include:

  1. Embedding ElevenLabs AI voice integration to provide spoken diagnostics of pipeline health.
  2. Connecting the Enterprise AI platform by UBOS for large‑scale batch rendering farms.
  3. Leveraging the UBOS templates for quick start to spin up web‑based demos that let users upload classic demos and see them rendered in real time on the FPGA.

These hybrid scenarios illustrate how a classic fixed‑function GPU can become a sandbox for modern AI‑augmented graphics research.

Conclusion

Recreating the 3dfx Voodoo 1 on an FPGA with SpinalHDL proves that even the most intricate fixed‑function hardware can be expressed cleanly, simulated accurately, and debugged efficiently using today’s RTL ecosystem. The project showcases the power of proper register‑semantic modeling, pipeline‑aware timing control, and AI‑enhanced trace tools.

If you’re a hardware hobbyist or a university instructor looking for a compelling teaching platform, the open‑source repository is ready for you. Dive in, experiment with the UBOS partner program, and consider extending the design with AI services from the AI marketing agents suite.

Stay tuned for upcoming tutorials on integrating Telegram integration on UBOS and building a web‑based control panel using the Web app editor on UBOS. The future of retro‑graphics on modern hardware is just a few lines of SpinalHDL away.


Andrii Bidochko

CTO UBOS

Andrii Bidochko is an AI entrepreneur and researcher focused on AI agents, reinforcement learning, and autonomous systems. He writes about the technologies shaping the future of machine intelligence, from frontier models and agent architectures to real-world AI applications.

Sign up for our newsletter

Stay up to date with the roadmap progress, announcements and exclusive discounts feel free to sign up with your email.

Sign In

Register

Reset Password

Please enter your username or email address, you will receive a link to create a new password via email.