Building an FPGA 3dfx Voodoo with Modern RTL Tools
3 hours ago
- #3dfx Voodoo
- #RTL Tools
- #FPGA
- The article discusses building an FPGA reimplementation of the 3dfx Voodoo 1 using modern RTL tools like SpinalHDL.
- The Voodoo 1's complexity comes from its fixed-function hardware, which includes various rendering behaviors like texture sampling, mipmapping, and depth testing.
- The author highlights two key abstractions that made the project manageable: representing the Voodoo's register semantics in SpinalHDL and debugging using netlist-aware waveform queries in conetrace.
- The Voodoo's register interface is deeply pipelined, requiring careful handling of register writes to avoid subtle corruption.
- Voodoo registers are categorized into four types (FIFO, FIFO + Stall, Direct, Float) based on their behavior, which is architectural and not just software-facing.
- SpinalHDL's `RegIf` abstraction allows encoding Voodoo-specific register semantics directly in the HDL, making the design more manageable.
- Debugging involved tracing failing pixels through the rasterizer using conetrace, revealing a stack of small hardware-accuracy mismatches rather than a single catastrophic bug.
- Modern RTL tools like SpinalHDL and conetrace help manage complexity by allowing architectural intent to be encoded directly and enabling more efficient debugging.