CPUにシンプルなL1キャッシュを実装する。単純なダイレクトマッピングで、最初はレイテンシについてもあまり考えない。 ヒットミス判定が正しく行え、正しくデータをパイプラインに流すことができることを至上命題としよう。
まず、いろいろ調査していると、以下のサンプルソースを発見した。
- Advanced Material: Implementing Cache Controllers
https://www.engr.colostate.edu/~sudeep/teaching/reading_452/CD5.9-P374493.pdf
これはおそらくパタヘネの付録だと思う。手元にパタヘネが無いので確認できないが、SystemVerilogで書かれたシンプルなL1キャッシュコントローラのモデルが書かれている。
これを使って、L1キャッシュを実装していこう。
モデルとしてはいたって単純だ。128ビットデータ幅のバスに接続され、データを読み書きするためのキャッシュコントローラ(ステートマシン)、データRAM、タグRAMが接続されている。
キャッシュコントローラはCPUからリクエストが発生すると、まずはタグ比較を行い、ミスならば外部バスに対してリクエストを発行する。 ヒットならばデータRAMからデータを取り出し、CPUに返す。ここでは難しいインタリーブなどの処理は行わず、シーケンシャルなステートマシンとして実装してこう。
まずは、CPUコア側を簡易AXIバスプロトコル、バスマスタ側をAXIプロトコルに変更して、実装をVerilog-HDLで書き換えた。 次は、実際にCPUに接続して、動作を確認していこう。