はじめに
これは
ISer Advent Calendar 2021 - Adventar
の記事として,大遅刻して書かれました.
基本的には、コア係に関することが書かれています。
何をするのか
レイトレのプログラムをコンパイルして,FPGAに送って実行結果を得ることです.
これを3,4人班で行います.それぞれ係があり,
- 神 (シミュレータ係ともいう)
- コンパイラ係
- FPU/メモリ係
- コア係
となっています.行うべきタスクは次のようなものがあります.
- ISAの決定
- アセンブリをシミュレートするシミュレータの作成
- バイナリの受け取り,結果を返すUARTモジュールの作成
- ISAを実行するユニットの作成
- プログラムをコンパイルするコンパイラの作成
- FPUモジュールの作成
- MIGの使い方の調査とその使用
- アセンブリの作成
以上をそれっぽい係の人が担います.
班全体の仕事
ISAの仕様
これはコア係だけでは決定が無理です.班全体で決めるとよさそうですが,主張がある班員が決めればいいと思います.RISCV風にするのが簡単だと思います. (RISCVが簡単なので)
アセンブリの作成
誰が作ってもいいですが,テスト用のバイナリ*1がコア係が1番最初に欲しくなったので骨組みを作りました.しばらくしたら,自分の班はシミュレータ係が拡張やデアセンブリを作っていました.
班によってはコンパイラ係が作ったりしているようです.
コア係の仕事
ISAを実行するユニットの作成
これがメインのお仕事です. 基本的には,シングルサイクル方式,マルチサイクル方式,パイプライン化等の順番に構成していく人が多いですが,始めからパイプラインプロセッサを作っている人もいました.OoOは論文があるらしいですが,余裕がなさそうです.
これは適切にverilogシミュレーションをすればほとんどのバグは消えると思います.
バイナリの受け取り,結果を返すUARTモジュールの作成
これ,私はFIFOの仕様書をちゃんと読まなくて2週間苦しんでいましたが,3Sで作ったやつの使いまわしをすればいいです.
全部をくっつける
メモリについては,配線を指定してメモリ係にキャッシュ回りを作ってもらい,自分がそれを拡張しました. シミュレーションで動かせるようにすると,バグがいくつか取れてよかったです.
おわりに
参考になったのでしょうか.今年から立派なFPGAではないものを使っているので動いている班を見てもあんまり早くはないですね.自分はまだ動いていないので早く動かしたいです.
*1:正確にはバイナリのテキストファイル