ある開発者が、3dfx Voodoo GraphicsカードのSystemVerilog版である「zSST」を実装することで、1990年代後半のPCゲーム体験を再現することに成功しました。このプロジェクトは、現代のFPGAベースのSystem-on-Chip(SoC)であるXilinx KV260ボード上で、レンダラーをz486 CPUおよび周辺のPCハードウェアと組み合わせています。その結果、「z486 XL」と呼ばれるシステムが構築され、Tomb Raiderのようなクラシックなタイトルを、FPGAのプログラマブルロジック内でオリジナルの3dfxレンダリングパイプラインを使用して実行することが可能になりました。
zSSTの実装は、プリパアド・トライアングル、テクスチャフィルタリング、ミップマッピング、フォグ効果など、オリジナルのVoodoo Graphicsの主要な機能を反映しています。このプロジェクトは、ソフトウェアとハードウェアの間の特定の契約を定義する1999年のGlideソースコードとSST-1仕様に依拠しています。具体的には、ホストCPUが3Dジオメトリ変換と頂点ライティングを処理し、FPGAアクセラレータがラスタライズとピクセルごとの操作を処理します。この固定機能パイプラインにより、カードは1クロックあたり1つのテクスチャ済み・深度テスト済みピクセルというピーク性能を達成します。これを再現するために、開発者は異なるピクセルを同時に処理するマルチステージパイプラインを実装しました。例えば、あるピクセルにテクスチャを適用している間に、それより前のピクセルをブレンドしてフレームバッファに書き込むといった処理を並行して行います。
この図は、zSSTプロジェクトが現代のFPGAロジックを使用して再現しようとしているオリジナルのハードウェアアーキテクチャを示しています。
この図は、現代のメモリレイテンシの複雑さにもかかわらず、高いスループットを維持するために使用されたパイプライン設計を説明しています。
主なエンジニアリング上の障壁の一つは、オリジナルのカードのメモリアーキテクチャを再現することでした。オリジナルのVoodooは、Texture Mapping Unit(TMU)とFrame Buffer Interface(FBI)という2つの専用ASICを使用しており、それぞれが専用のEDO RAMへの独自の64ビットメモリパスを持っていました。これにより、テクスチャのフェッチとフレームバッファへのアクセスを並列化することができました。対照的に、KV260ボードはAXIポートを介してアクセスされる共有DDRメモリを使用しており、レンダラーはCPUやオペレーティングシステムと帯域を奪い合う必要があります。このプラットフォームでは小さなメモリ要求が高いレイテンシ(100 MHzで約28クロック)に苦しむため、開発者はパイプラインにデータを供給し続けるために、キャッシュやリオーダーバッファを含む複雑なメモリシステムを設計する必要がありました。レンダラーの算術パスは比較的単純ですが、このプロジェクトは、ハードウェアの再現における最も大きな課題が、高スループット操作を維持するために必要なデータ移動の管理にあることを示しています。現在、システムは主にTomb Raiderで検証されており、より広範な互換性や後のVoodoo世代への対応は今後の課題となっています。
この視覚資料は、主要なエンジニアリング上の障壁である、専用メモリパスから共有の高レイテンシDDRシステムへの移行を説明しています。