東大CPU実験のレイトレを自作CPUの上で動かした話
from マルチサイクル RISC-V CPU を作成したい
発表内容を検討するページ。
ただCPUを作る話なら他の人と同じなので、レイトレに特化した話がいいかな?
覚えて帰って欲しいこと
CPU実験やれるかも!という気持ちになってもらいたい
案1
自己紹介
今日話すこと
CPU実験とは?
例のレイトレを動かすまでに行ったこと
RISC-V CPUの作成
できあいのモジュールを利用
作成したCPUのスペック
例のレイトレの開発環境
例のレイトレを動かすの必要なFPGAのスペック
例のレイトレをDockerで動かす
例のレイトレを動かすのに苦労したところ
例のレイトレを動かすのに工夫したポイント
例のレイトレを動かすまでの最短ルート
案2
https://www.notion.so/CPU-1a2dcf8eb75380279918e957c28389b7
タイトル
例のレイトレを自作CPUで動かした話
自己紹介
畠山 貴(はたけやま たかし)
永和システムマネジメント所属
RubyなどでWebアプリケーション開発をしている
低レイヤーは趣味
今日お話しすること
自作CPUを作り、その上でレイトレを動かすまでの流れ
各ステップの課題と工夫
自作CPUの設計と実装
MinCamlコンパイラの移植
ライブラリ関数の移植
レイトレの組み込みとデバッグ地獄
東大CPU実験とは?
東大で行われる授業
4人1組でCPUを設計
MinCamlコンパイラを改造し、自作CPU向けのアセンブリを出力
MinCaml製のレイトレーサーを実行し、速度を競う
やばいポイント
CPU設計の解説なし。「自力でやれ」
余裕のある班はUNIXを移植して遊ぶ
始めたきっかけ
東大CPU実験を個人で試してみたくなった
作成したCPU
開発環境
FPGAボード
ULX3S
合成・配置配線ツール
yosys + nextpnr
必要なFPGAのスペック
(気になってる人も多いので最初に)
CPUアーキテクチャ
32ビットRISC-V(RV32IFのサブセット)
整数演算 + 単精度浮動小数点演算
5ステージのマルチサイクル構成
Fetch → Decode → Execute → Memory → Writeback
手抜き
パイプラインなし
割り込みなし
クロックは25MHz(高速化したい!)
メモリ構成
ROM(ブロックRAM):256KB
RAM(SDRAM):32MB
メモリバス:PicoRV32 Native Memory Interface を利用
周辺機器
以下をメモリマップドIOで接続
UARTコントローラ
LEDコントローラ
利用した既存のモジュール
FPU
https://github.com/dawsonjon/fpu
UART
https://github.com/freecores/osdvu
SDRAMコントローラ
https://github.com/machdyne/zucker/blob/main/rtl/sdram.v
実装した命令
(あとで書く)
MinCamlコンパイラの移植
(ファームウェアの開発環境なども入れたい)
MinCamlコンパイラの移植のしかた
ライブラリ関数の移植
レイトレの組み込みとデバッグ地獄
(ファームウェアの開発環境)
苦労したこととやって良かったこと
やってよかったこと
CPUが動いて例の画像が表示された瞬間の感動
低レイヤの理解が深まった
おすすめの資料
本
ウェブサイト