CPU自作記

⚠️ただのポエムです。ちゃんとしたのは気が向いたら書くかもしれません。

やったこと

アウトオブオーダ実行という技術(?)を導入したCPUをFPGA上に作りました。 CPU入門から完成するまでのタイムラインは、以下のような感じです。

2020/10/06: 「CPUの創りかた」を買った
2020/10/07: 読了
2020/10/09: 「ディジタル回路設計とコンピュータアーキテクチャ」を買った
2020/10/14: 読了、FPGAを発注
2020/10/21: 「コンピュータアーキテクチャ: 定量的アプローチ」を買った
2020/10/30: FPGAが届く
2020/10/31: パイプラインCPUが動く
2020/12/15: アウトオブオーダ実行を達成

最初の第一歩

回路を自分で作るのいいなーと憧れたので、「CPUの創りかた」を10月6日に渋谷のジュンク堂で買いました。 読んでておもしろかったので、翌日には読了しました。 この本はすごくわかりやすく書いてあるので、入門書として良かったです。

ただ、「CPUの創りかた」は初歩的な内容の本なので、「ディジタル回路設計とコンピュータアーキテクチャ」を買って読んでみました。 トランジスタの原理からはじまり、パイプライン処理までが主に解説されています。 大学の教科書ふうな本で、文体が少しかたいですが、練習問題とかを飛ばしたので楽しく読めました。 HDL入門の章があるのもありがたかったです。

ここまで学んだ時点で、自分で作ろうという方針が固まったので、とりあえずFPGAを注文しました。 安価な開発ボードという基準で、DE10-LiteDE0-CVが候補に上がったのですが、ネット上の事例が多いDE0-CVを選びました。 アカデミック版があるので少し安くなりました。

パイプラインCPUを作る

FPGAを注文したものの、届くまで2週間かかるそうなので、先に作り始めることにしました。 HDLは初めてだったので、最初はディジタル回路設計の本を参考に、ALUとか小さい部分をSystemVerilogで書くことから始めました。

また、最近よく見かけるRISC-V(RV32IM: 32bitの整数演算だけのもの)をISAに選定して、仕様書を眺めながら、デコーダなども作っていきました。 パイプラインCPUについては、ディジタル回路設計の本が懇切丁寧なので、仕組みを理解すればなんとかなります。

実装をだいたい終えた10月末、FPGAが到着したので、実際に動かしてみました。 最初は正しく動いたと勘違いしたのですが、まあ不具合だらけだとわかり、2日くらいかけてなんとかバグを取り除きました。 シミュレータがどうも動かず、7セグLEDで実機デバッグを繰り返す羽目になって大変でした。

アウトオブオーダ

上に書いたパイプラインCPUと並行して、「コンピュータアーキテクチャ: 定量的アプローチ」を買って読みました。 この本はなんか難しめで読むのが面倒になっちゃったので、練習問題などを飛ばし、付録ABCと1~4章をざっくり読んだだけになっています。

RIDECOREというRISC-V実装のドキュメントと、その論文も参照しました。 ただ、パクりになりたくないし、見たら負けという気がしたので、ソースコードはまだ見てません。

そんなこんなで、CPUの設計をルーズリーフに落書きして、ひと月半くらいかけて実装とデバッグをしました。 ここでも7セグLEDでデバッグしましたが、単純なパイプラインより複雑になったぶん、だいぶ地獄でした。

CPUの設計について書くのはサボります🙇が、下の図のような感じになっています。投機実行と2-wayスーパースカラもついてます。

アウトオブオーダ実行するCPUの概略図

そして動きました。 たしか12月15日くらいだったと思います。

動いてる写真

感想とか

自分がCPU自作することになるとは思ってませんでしたが、やってみればなんとかなるし、やらなければ永遠にできないんだなぁという知見を得ました。 ただ、シミュレータ無しでこんな複雑なものを作るのは、だいぶつらいので二度としない気がします。

お受験

このCPUの作成を活動実績にしてAOに出願したら、東工大に合格できました💮