Un desarrollador ha recreado con éxito la experiencia de los juegos de PC de finales de los años 90 mediante la implementación de una versión en SystemVerilog de la tarjeta 3dfx Voodoo Graphics, denominada zSST. Este proyecto combina el renderizador con una CPU z486 y el hardware de PC circundante en una placa Xilinx KV260, un Sistema en un Chip (SoC) moderno basado en FPGA. El resultado, denominado z486 XL, permite que títulos clásicos como Tomb Raider se ejecuten utilizando su tubería de renderizado 3dfx original dentro de la lógica programable de la FPGA.

La implementación de zSST refleja las características principales de la Voodoo Graphics original, incluyendo triángulos preparados, filtrado de texturas, mipmapping y efectos de niebla. El proyecto se basa en el código fuente de Glide de 1999 y la especificación SST-1, que definen un contrato específico entre el software y el hardware: la CPU anfitriona maneja las transformaciones de geometría 3D y la iluminación de vértices, mientras que el acelerador FPGA se encarga de la rasterización y las operaciones píxel por píxel. Esta tubería de función fija permite que la tarjeta alcance un pico de un píxel con textura y prueba de profundidad por ciclo de reloj. Para replicar esto, el desarrollador implementó una tubería de múltiples etapas donde diferentes píxeles se procesan simultáneamente; por ejemplo, un píxel se está texturizando mientras uno anterior se está mezclando y escribiendo en el framebuffer.

Diagrama esquemático de la tarjeta Voodoo Graphics que muestra las conexiones TMU y FBI
Un esquema de la arquitectura original de Voodoo Graphics, destacando las rutas de memoria separadas para la Unidad de Mapeo de Texturas y la Interfaz del Buffer de Cuadros.nand2mario.github.io

Este diagrama ilustra la arquitectura de hardware original que el proyecto zSST pretende replicar utilizando lógica FPGA moderna.

Diagrama de un rasterizador de triángulos alimentando una tubería de píxeles de múltiples etapas
Una representación de la tubería de múltiples etapas donde diferentes píxeles se procesan simultáneamente para lograr un píxel con textura por ciclo de reloj.nand2mario.github.io

Esta figura ilustra el diseño de la tubería utilizado para mantener un alto rendimiento a pesar de las complejidades de la latencia de memoria moderna.

Uno de los principales obstáculos de ingeniería fue replicar la arquitectura de memoria de la tarjeta original. La Voodoo original utilizaba dos ASICs dedicados: la Unidad de Mapeo de Texturas (TMU) y la Interfaz del Buffer de Cuadros (FBI), cada una con su propia ruta de memoria de 64 bits hacia una memoria EDO RAM dedicada. Esto permitía el acceso paralelizado a las texturas y al framebuffer. En contraste, la placa KV260 utiliza memoria DDR compartida accedida a través de puertos AXI, donde el renderizador debe competir con la CPU y el sistema operativo por el ancho de banda. Debido a que las pequeñas solicitudes de memoria en esta plataforma sufren de una alta latencia (aproximadamente 28 ciclos a 100 MHz), el desarrollador tuvo que diseñar un sistema de memoria complejo que involucra cachés y búferes de reordenamiento para mantener alimentada la tubería. Si bien la ruta aritmética del renderizador es relativamente sencilla, el proyecto demuestra que el desafío más significativo en la recreación de hardware a menudo reside en gestionar el movimiento de datos requerido para mantener operaciones de alto rendimiento. Actualmente, el sistema se valida principalmente en Tomb Raider, mientras que la compatibilidad más amplia y el soporte para generaciones posteriores de Voodoo permanecen como trabajo futuro.

Diagrama de comparación de las rutas de memoria SST-1 frente a la memoria DDR compartida de la KV260
Comparación de las rutas de memoria EDO RAM dedicadas de la SST-1 original frente a la arquitectura de memoria DDR compartida de la placa KV260.nand2mario.github.io

Esta imagen explica el principal obstáculo de ingeniería: la transición de rutas de memoria dedicadas a un sistema DDR compartido de alta latencia.