RISCBoy オープンソース ポータブル RISC‑V ゲームコンソール 概要

RISCBoy オープンソース ポータブル RISC‑V ゲームコンソール 概要

RISCBoy は低コスト FPGA 1 個でフルハンドヘルドゲームコンソールを実現

RISCBoy は完全にオープンソースのポータブルゲームコンソールで、カスタム RISC‑V CPU、ラスタグラフィックスパイプライン、フル周辺機器インフラストラクチャを iCE40‑HX8k FPGA 上に実装し、32 ビットのゲームシステムが小型で手頃なデバイスに収まることを示しています。


コアアーキテクチャ: RISC‑V CPU、バスファブリック、グラフィックス

RISCBoy は公式 RISC‑V コンパイアンススイートと形式検証チェックに合格した RV32IMC 互換プロセッサを統合しています。 CPU には M‑mode CSR、例外処理、ベクタ割り込み拡張が含まれ、ゲームソフトウェアの堅牢な基盤を提供します。

システムバスは APB 周辺機器(UART、GPIO、SPI、PWM など)を持つ AHB‑lite クロスバーロです。これにより CPU、メモリコントローラ、カスタムグラフィックスユニット間の効率的な通信が可能になります。

グラフィックスパイプラインはスキャンラインバッファベースのラスタエンジンで、プロジェクトの PDF ドキュメントに記載されたディスプレイコントローラを駆動します。この設計はクラシックな Game Boy Advance のレンダリング手法を鏡像化していますが、すべて合成可能な Verilog 2005 で実装されています。


FPGA ターゲット: iCE40‑HX8k 制約とツールチェーン

コンソール全体が Lattice iCE40‑HX8k FPGA(7680 ロジックエレメント)に収まります。 この密度を実現するには RTL 設計の慎重な検討とリソース意識の高いコーディングが必要でした。

オープンソースツールチェーン: 合成には Yosys、配置配線には nextpnr、ビットストリーム生成には Project Icestorm を使用します。これらのツールは Linux 上で動作し、Raspberry Pi でもビルド可能です。

代替 FPGA サポート: 実験的ビルドが Lattice ECP5(LEF5UM5G‑85F‑EVN)向けに用意されており、外部 512 KiB SRAM を内部 256 KiB 32‑ビット同期メモリに置き換えています。


ソフトウェアスタック: RV32IMC ツールチェーンとテストスイート

RV32IMC GNU ツールチェーン: 本プロジェクトは RV32IMC ISA 用に構成されたカスタム RISC‑V GNU ツールチェーンのビルド手順を提供します(--with-arch=rv32imc--with-abi=ilp32)。マルチリブ設定によりすべてのサポート ISA バリアント用の標準ライブラリが生成され、コンパイルされたバイナリとプロセッサ構成の不整合を防ぎます。

テスト: リポジトリには HDL レベルのリグレッションテストとシミュレータ上で実行されるソフトウェアテストが含まれています。シミュレーションフローは Linux 上の Xilinx ISIM 14.x を使用し、scripts/ ディレクトリに Makefile が配置されています。テストはサブモジュールを初期化した後、./runtests で起動できます。


PCB 設計と製造

KiCad PCB レイアウト: RISCBoy の Rev A ボードは 5 × 5 cm、4 層設計で iTead のプロトタイピングサービス(約 $65 で 10 枚)に対応しています。回路図は PDF(board/fpgaboy.pdf)として提供されています。

将来のリビジョン: Rev B はゲートウェアとブートローダが成熟するまで保留されており、開発者の現在のハードウェアは Snowflake FPGA ボードに似ています。


リポジトリ構造(簡易ナビゲーション)

  • board/ – メイン PCB と補助ボード用 KiCad ファイル。
  • doc/ – LaTeX ソースと PDF 形式のドキュメント、詳細なシステムアーキテクチャ図を含む。
  • hdl/ – Verilog RTL:
    • busfabric/ – AHB‑lite クロスバーロと APB 周辺機器。
    • graphics/ – ピクセル処理ユニット。
    • hazard5/ – 自立した RV32IMC コア。
    • mem/ – メモリコントローラとモデル。
    • peris/ – 小型周辺機器(UART、SPI、PWM)。
    • riscboy_core/ – すべてのコンポーネントのトップレベル統合。
    • riscboy_fpga/ – 各 FPGA ターゲット向けのボード固有ラッパー。
  • synth/ – フルシステム合成用 Makefile と制約ファイル。
  • test/ – Verilog テストベンチとソフトウェアテストケース。
  • software/ – システムレベルテストで使用される C ファイル集。

コミュニティの反応と注目コメント

“It is a Gameboy Advance from a parallel universe where RISC‑V existed in 2001. A love letter to the handheld consoles from my childhood, and a 3 AM drunk text to the technology that powered them.” – Project description.

“Oh this is Luke Wren’s work. He’s an ASIC design engineer at Raspberry Pi. Amazing project, I love it!” – HN comment highlighting the author’s credentials.

“The programmable scanline‑buffer‑based rendering pipeline described in the PDF is worth a read for fans of such things.” – HN comment praising the graphics design.

“The design was taped out on the first wafer.space run, but I have not heard if it actually worked or not.” – HN comment noting a silicon prototype attempt.


入門: クローン、ビルド、合成

# Clone with submodules
git clone --recursive https://github.com/Wren6991/RISCBoy.git riscboy

# Build the RV32IMC toolchain (Ubuntu 20.04 example)
sudo apt install -y autoconf automake autotools-dev curl python3 \
    libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex \
    texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev
cd /tmp
git clone --recursive https://github.com/riscv/riscv-gnu-toolchain
cd riscv-gnu-toolchain
./configure --prefix=/opt/riscv \
    --with-arch=rv32imc --with-abi=ilp32 \
    --with-multilib-generator="rv32i-ilp32--;rv32ic-ilp32--;rv32im-ilp32--;rv32imc-ilp32--"
sudo mkdir /opt/riscv && sudo chown $(whoami) /opt/riscv
make -j$(nproc)
# Synthesize for HX8k evaluation board
. sourceme
cd synth
make -f HX8k-EVN.mk bit

なぜ RISCBoy が重要なのか

RISCBoy は、オープンソースハードウェア、手頃な FPGA、そして自由に入手可能なツールチェーンだけで、フル機能の 32 ビットハンドヘルドゲームシステムが実現できることを示しています。シリコンレベルの RTL から PCB レイアウトまでの完全なリファレンス設計を提供し、ホビイスト、教育者、研究者がプロプライエタリな制約なしに RISC‑V ベースのゲームコンソールアーキテクチャを探求できるようにします。

Sources