一名开发者通过实现 3dfx Voodoo Graphics 显卡的 SystemVerilog 版本(命名为 zSST),成功重现了 1990 年代末的 PC 游戏体验。该项目将渲染器与 z486 CPU 以及周边的 PC 硬件整合在 Xilinx KV260 板卡上——这是一款现代的基于 FPGA 的系统级芯片(SoC)。最终产出的系统被称为 z486 XL,它允许像《古墓丽影》这样的经典游戏在 FPGA 的可编程逻辑中,利用其原始的 3dfx 渲染管线运行。

zSST 的实现镜像了原始 Voodoo Graphics 的核心功能,包括预处理三角形、纹理过滤、Mipmapping 和雾效。该项目依赖于 1999 年的 Glide 源代码和 SST-1 规范,这些规范定义了软件与硬件之间的特定契约:主机 CPU 处理 3D 几何变换和顶点光照,而 FPGA 加速器负责光栅化和逐像素操作。这种固定功能管线允许显卡达到每时钟周期处理一个经过纹理处理且通过深度测试的像素的峰值性能。为了复制这一性能,开发者实现了一个多级管线,其中不同的像素被同时处理——例如,一个像素正在进行纹理处理,而之前的像素正在进行混合并写入帧缓冲区。

显示 TMU 和 FBI 连接的 Voodoo Graphics 显卡原理图
原始 Voodoo Graphics 架构的原理图,突出了纹理映射单元和帧缓冲区接口的独立内存路径。nand2mario.github.io

此图展示了 zSST 项目旨在利用现代 FPGA 逻辑复制的原始硬件架构。

三角形光栅化器为多级像素管线供料的图表
多级管线的示意图,其中不同像素被同时处理以实现每时钟周期处理一个纹理像素。nand2mario.github.io

此图展示了用于在复杂的现代内存延迟下维持高吞吐量的管线设计。

主要的工程障碍之一是复制原始显卡的内存架构。原始 Voodoo 使用两个专用 ASIC——纹理映射单元(TMU)和帧缓冲区接口(FBI)——每个都有独立的 64 位内存路径连接到专用的 EDO RAM。这实现了并行化的纹理获取和帧缓冲区访问。相比之下,KV260 板卡使用通过 AXI 端口访问的共享 DDR 内存,其中渲染器必须与 CPU 和操作系统竞争带宽。由于该平台上的小内存请求面临高延迟(在 100 MHz 时约为 28 个时钟周期),开发者必须设计一个包含缓存和重排序缓冲的复杂内存系统,以确保管线能够持续供料。虽然渲染器的算术路径相对简单,但该项目证明了硬件重现中最显著的挑战往往在于管理维持高吞吐量操作所需的数据移动。目前,该系统主要在《古墓丽影》上进行了验证,更广泛的兼容性和对后续 Voodoo 代次的支持仍作为未来的工作内容。

SST-1 内存路径与 KV260 共享 DDR 内存的对比图
原始 SST-1 专用 EDO RAM 路径与 KV260 板卡共享 DDR 内存架构的对比。nand2mario.github.io

此视觉效果解释了主要的工程障碍:从专用内存路径转向共享的高延迟 DDR 系统。