FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

シンプルなL1キャッシュをVerilog実装する(1. シンプルなモデルを調査)

CPUにシンプルなL1キャッシュを実装する。単純なダイレクトマッピングで、最初はレイテンシについてもあまり考えない。 ヒットミス判定が正しく行え、正しくデータをパイプラインに流すことができることを至上命題としよう。

まず、いろいろ調査していると、以下のサンプルソースを発見した。

  • Advanced Material: Implementing Cache Controllers

https://www.engr.colostate.edu/~sudeep/teaching/reading_452/CD5.9-P374493.pdf

これはおそらくパタヘネの付録だと思う。手元にパタヘネが無いので確認できないが、SystemVerilogで書かれたシンプルなL1キャッシュコントローラのモデルが書かれている。

これを使って、L1キャッシュを実装していこう。

f:id:msyksphinz:20161011012728p:plain

モデルとしてはいたって単純だ。128ビットデータ幅のバスに接続され、データを読み書きするためのキャッシュコントローラ(ステートマシン)、データRAM、タグRAMが接続されている。

キャッシュコントローラはCPUからリクエストが発生すると、まずはタグ比較を行い、ミスならば外部バスに対してリクエストを発行する。 ヒットならばデータRAMからデータを取り出し、CPUに返す。ここでは難しいインタリーブなどの処理は行わず、シーケンシャルなステートマシンとして実装してこう。

まずは、CPUコア側を簡易AXIバスプロトコル、バスマスタ側をAXIプロトコルに変更して、実装をVerilog-HDLで書き換えた。 次は、実際にCPUに接続して、動作を確認していこう。