FPGA開発日記

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

自作CPUのVIPTキャッシュポリシ導入検討 (2. 実装について)

自作CPUのキャッシュについて,VIPTを導入して実装を開始した. データキャッシュについては,VIPTとPIPTの両方をサポートする必要があり(LSUパイプラインはVIPT,それ以外のポートはPIPT),そのあたりの詳細を詰めている.

とりあえずPIPTのままで維持していいポートはそのままで,LSUのアクセスポートのみをVIPTに置き換えている.

VIPTでは、キャッシュのインデックス・アクセスのためには仮想アドレスを用い、タグ比較には物理アドレスを使用する。 例えば、512ビット(=64B)で4-wayを持つキャッシュにおいて、32KBの容量を用意したい場合、キャッシュのライン数は以下のようになるだろう。

 32\text{KB} / 64\text{B} / 4\text{-way} = 128 インデックス

仮想アドレスのうち、下位の64B分(6ビット)はキャッシュライン内のため省略する。すると上位の128インデックス分(7ビット)がキャッシュ・インデックス・アクセスのために使用される。

ところが、仮想アドレスが物理アドレスに変換されると、一致しているのはアドレスのページ内ビット(12ビット分)のみであり、上記の例だと一番上の12ビット目は仮想アドレスと物理アドレスで異なる可能性がある。

この一番上のビットをColor Bitと名付け、以降ではこれを引き回していくことになる。