世界を動かす技術を、日本語で。

現代のRTLツールを用いたFPGA「3dfx Voodoo」の構築

2026年3月22日原文(noquiche.fyi)

概要

  • Voodoo 1 のFPGA実装における 設計・デバッグ手法 の解説
  • 固定機能チップ の複雑さと レジスタ挙動の分類 について説明
  • SpinalHDL によるレジスタ意味論のエンコード方法
  • conetrace を用いた 波形スクロールに頼らないデバッグ
  • 現代RTLツール の進化がもたらす設計効率化の実例

A Fixed-Function Chip That Is Harder Than It Looks

  • Voodoo 1 は、三角形の高速描画専用の メモリマップ型アクセラレータ
  • 変換・ライティング機能なし、3D計算はCPU側で実行
  • 一つの三角形描画にも 補間色、テクスチャサンプリング、ミップ選択、フィルタリング、クリッピング、フォグ など多様な固定機能処理
  • これらは プログラム可能でなく、全てシリコンに焼き込まれた動作
  • 現代GPU は柔軟性に複雑さが宿るが、 Voodoo 1固定機能の多様さ が複雑さの源泉

Why Register Writes Cannot All Behave the Same Way

  • Voodooのレジスタインターフェースは 固定機能設計 を色濃く反映
  • triangleCmdftriangleCmdレジスタ書き込みで 三角形描画開始
  • その他のレジスタで 描画方法やテスト条件などを指定
  • 深いパイプライン構造 により、複数ピクセルが同時進行
  • 状態変更のタイミング を誤ると、前の三角形に新しい設定が混入し、 描画破綻 を招く
  • 対策は「 パイプライン空き待ち適用」または「 インフライトワークと一緒に状態を運ぶ」のいずれか

The Voodoo's Four Register Behaviors

  • Voodooのレジスタは 4つのカテゴリ に分類
    • FIFO :順番に適用
    • FIFO + Stall :パイプライン空き待ち後に適用
    • Direct :即時適用
    • Float :変換後、固定小数点レジスタに書き込み
  • この分類は アーキテクチャ上の契約 であり、単なるソフトウェア上の区別ではない
  • 新しい状態が古い処理に混入しない保証 のため、明示的なモデル化が必要

Encoding Register Semantics in SpinalHDL

  • Voodooは 430個の設定フィールド を多様なレジスタに分散
  • 従来HDL (例:Verilog)では、レジスタ型の違いが設計全体に分散
  • SpinalHDLRegIf抽象化で、レジスタ定義と制御ロジックを自然に記述可能
  • 拡張により、 Voodoo独自のFIFO動作や同期書き込み、Floatエイリアス なども一括記述
    • 例:startRレジスタはアドレス、型、カテゴリ、初期値、Floatエイリアスを一箇所で宣言
  • Floatエイリアス :固定小数点レジスタの128アドレス上に浮動小数点書き込み用レジスタを提供
  • レジスタメタデータ を活用し、 外部ヘッダやSystemRDL などにもエクスポート可能
  • PciFifo コンポーネントでVoodooのレジスタセマンティクスをエミュレート
    • FIFO書き込みはキューイング
    • 同期書き込みはパイプライン空きまで待機
    • Floatエイリアスは変換後に元アドレスへリライト
  • 設計上の意味論が一元管理 されることで、 ドキュメントと実装の乖離低減

Querying Execution Instead of Scrolling Waveforms

  • 設計記述だけでなく デバッグ も重要
  • 半透明オーバーレイやテキスト描画のバグ で、特定ピクセルだけが消失する現象を観測
  • フレームバッファハザード (メモリ順序問題)を疑い、様々な対策を実施するも解決せず
  • conetrace による ネットリスト対応トレース で、問題ピクセルの各パイプライン段階を追跡
    • ラスタライザ→TMU→カラーブレンド→フレームバッファ出力までピクセルの流れを解析
    • 問題はフレームバッファ到達前から既に発生しており、 キャッシュ理論が否定
  • 実際は以下の 小さな精度差の積み重ね によるもの
    • W値の量子化タイミング早すぎ
    • パースペクティブ補正やLOD計算の端数処理ずれ
    • ブレンド時のdither減算処理の有無
  • 各要素は単独では目立たないが、 特定条件下で積み重なり描画破綻
  • ステージごとの動作一致 を優先し、各精度・演算方法を修正することで解決
  • 従来の波形ビューア は信号観察に留まるが、 ネットリスト対応ツール は設計意図に即した根本原因解析が可能

What Modern RTL Tools Actually Changed

  • 現代RTLツール (例:SpinalHDL、conetrace)は
    • 設計意図の直接表現
    • 制御論理の自動生成
    • 実装とドキュメントの一元化
    • 抽象度の高いデバッグ
  • 個人でも高精度なハードウェア設計・デバッグが可能 になったことを実証

Hackerたちの意見

初めてのビデオカード。1999年頃にLinuxで動かすのは本当に大変だった。特にLinuxの経験がないティーンエイジャーにはね。ネットワークカードも動かなかったから、友達の家までダイヤルアップのインターネットを借りに走ったり、Altavistaで助けを探したりしてた。すごくクールなプロジェクトだね。今でも自分には難しすぎるけど!

Voodoo 1を買うために、ティーンエイジャーの貯金を全部使っちゃった。Linuxサポートがあったからね。確か当時はRed Hatを使ってたから、インストールはRPMを2つ入れるだけだったかな?そのカードでQ3やUnrealをたくさんプレイしたよ。

自分も最初は*nixでドライバーを動かすのが大変だった。90年代中頃…いつも楽しい挑戦だった。モデムの問題もあって、マニュアルをめくって初期化文字列AT&FX1を見つけた。

同じく。tdfxって名前のカーネルモジュールかビデオドライバーを覚えてる。あと、DRI(Direct Rendering Infrastructure)をオンにしてX11を動かそうと奮闘してた。何日もかけてシステムの半分をコンパイルして、何が悪いのかを探りながら、glxinfoの出力でそれが有効になったのを見たときはすごく嬉しかった。特に、インターネットへのアクセスが限られてた時期だったから、ハードウェアアクセラレーションでGLtronを起動できたときは感動した。あの頃はQuake 3やAmerica's Armyもプレイしてたな。楽しい時代だったけど、今はLinuxがすごく簡単になっちゃって、あの自分で全部やらなきゃいけなかった時代がちょっと懐かしい。

3dfx Voodoo Bansheeは、僕が初めて買ったグラフィックカードだった。EverQuestのベータ版をプレイするために買ったんだけど、それが1999年頃だったと思う。初めてそのゲームにログインしたときは、人生が変わるような体験だった。実際、そうだったんだよね。理由はわからないけど、3dfxのスプラッシュスクリーンがすごく好きだったのを覚えてる。多分、そのカードでちゃんと動いた唯一のものだったからかな。でも、それでも僕は忠実な3dfxユーザーだった - 誰かがコメントで言ってたマーケティングのおかげかも - それが数年後に倒産したときは悲しかったな。

あの時代の名前やブランディングが大好き。今の技術はずっと進んでるけど、消費者にとってのワクワク感はあの頃には敵わないよね。

バーがかなり低かったと思う。あの頃、これに気づいているだけで、すでに熱心なファンだって暗黙の了解があったよね。

同意だけど、懐かしさが影響してるかも。最近、自分のVoodooカードがどのPowerMacに刺さってたのか調べてみたら、「PowerPC 8600」みたいなモデル名に懐かしさがこみ上げてきた。客観的にはすごくつまらない名前だけど、人生のある時期にはすごく意味があった気がする。

プロジェクト自体はクールだけど、LLMが生成したブログはちょっと頭が痛くなる。

+1

「現代的」な部分が何なのか全然わからない。例えば、「ネットリストを意識したトレース」…せいぜい80年代の最先端って感じだよね。

同じように感じることが多いけど、そこから抜け出そうと頑張ってるよ。文章を書くのはまあまあ得意だけど、教育背景や自然な適性のせいで、高度な数学はほとんどできないんだ。エンジニアとしてはそれが足かせになってるけど、ハードウェアやソフトウェアの仕事ではそこそこ成功してるんだよね。仲間には明らかなトリックを見逃しがちだけど、役立つアイデアが出せたときは、仲間や顧客とコミュニケーションが取れる。文章を書くのにLLMの助けは必要ないし、欲しくもないけど、最近のモデルが数学の問題を解決するのに助けになってるのは否定できない。明らかに定量的なエンジニアリングに強い人がいるけど、英語で結果を伝えるのが苦手な人もいるよね。両方のスキルセットは同じくらい重要だと思うから、英語で「チート」するためにAIを使ってるのを非難する権利はないよね。自分が数学の不足をカバーするために最先端のツールを使ってるのに、相手はその障害を隠せないから不公平だと思う。こういうことに対してもっと前向きな考え方を持ちたいし、他の人にもそうしてほしい。この記事は無意味なものじゃないし、そんな風に拒絶されるべきじゃない。そもそも、AIによる文章作成を非難することは、もうすぐできなくなると思う。今でも後でも、乗り越えなきゃいけないんだから。

Hacker Newsで議論の続きを見る