it.xnews.jp
生成: 2026-07-21 読了 約 3 分 model: claude-haiku-4-5 原文: https://www.armaangomes.com/blogs/doom/ raw.md

カスタムCPUでDOOMを実行し、動画が200万回再生された

TL;DR: Liam、Ryan Tang、Ozkl は1993年にid Softwareがリリースしたゲーム「DOOM」をロジックゲートレベルから設計したカスタムCPUで実行することに成功した。FPGAに展開されたこのシステムは最終的に15~20 FPS でDOOMを実行でき、その9秒間の動画は200万回以上の再生数を獲得した。

ゲームの伝説「何にでも DOOM は動く」を文字通りに実証するため、3人の開発者が自作のカスタムCPUを構築した。「DOOM は1993年にid Softwareがリリースしたビデオゲームである。ゲーム業界に革命をもたらし、世界中に広がり、現代のFPSを定義した」と説明される通り、その人気の高さから「DOOM は何にでも動く」という言葉が生まれ、マイコンからトースターまであらゆるデバイスへの移植が行われてきた。

CPU設計と構成

設計されたカスタムCPUは「ロジックゲートレベルで設計し、周辺機器を接続し、DOOM のソースコードを自分たちのマシンで動くよう改造し、FPGAにデプロイしてリアルタイム実行した」ものである。CPUは5段パイプライン設計(命令フェッチ、デコード、レジスタ読み込み、実行、ライトバック)を採用し、ICache とDCache はそれぞれ2048本のキャッシュラインを持ち、1本あたり4ワードのデータを格納する。キャッシュラインには有効ビットとダーティビットの2つのステータスビットが含まれる。メモリアクセスはDCache をDCache より優先する統一インターフェースで抽象化された。

クロック周波数は初期の100 MHz から125 MHz に引き上げられ、これにより20%のフレームレート向上が実現された。

パフォーマンスの最適化プロセス

DOOMは元々14メガバイトのshareware版(doom1.wad)であり、FPGAのBRAMが1メガバイト未満という制約下での実行は多くの課題をもたらした。初期のパフォーマンスは0.7 FPS にとどまっていた。段階的な最適化により、フェッチステージの修正で2.5 FPS、乗算演算子の実装(RV32I-ZMMUL対応)で3.5 FPS、キャッシュ読み込みのパイプライン化とVGA書き込み戦略の修正で6.7 FPS へと向上した。

最終的にはコンパイラ最適化を行うことで15~20 FPS の実用的なパフォーマンスを達成した。この過程では、ハードウェアタイマーのMMIOポインタが volatile として マークされていなかったため、コンパイラによって最適化されるという問題も発見・修正された。

周辺機器の実装

Xilinx の Memory Interface Generator(MIG)を用いてDDR3メモリインターフェースが実装され、Clock Domain Crossings(CDC)とFIFOによりタイミングの問題に対応した。VGAコントローラは12ビットカラー対応で構築され、HDMIに接続された。ハードウェアタイマーはマイクロ秒単位で時間を追跡し、UARTトランスミッターは出力用のFIFOバッファを備え、UARTレシーバーはラップトップからのキープレス入力を受け取った。

ポーティングと検証

Doomgeneric を使用してポーティングプロセスを簡略化したが、ファイルシステムの問題、レンダリングの課題、printf の問題など複数の障害に直面した。バグはCPUの設計エラー(無限ループやランダムジャンプ)を露呈させ、初期段階ではメモリが初期化されていないため、メモリ領域がゼロで埋められていないというハードウェア側の問題によりDOOMが動作しなかった。これらの課題を段階的に解決し、最終的に9秒間の動画として実行例を投稿したところ、現在200万回以上の再生数を達成している。

筆者の見立て

この記事は元記事の事実のみに基づいて自動生成されました。

出典

元記事: Running DOOM on our Custom CPU and Going Viral URL: https://www.armaangomes.com/blogs/doom/

この記事をシェア