自作CPUのキャッシュについて,VIPTを導入して実装を開始した.
データキャッシュについては,VIPTとPIPTの両方をサポートする必要があり(LSUパイプラインはVIPT,それ以外のポートはPIPT),そのあたりの詳細を詰めている.
とりあえずPIPTのままで維持していいポートはそのままで,LSUのアクセスポートのみをVIPTに置き換えている.
VIPTでは、キャッシュのインデックス・アクセスのためには仮想アドレスを用い、タグ比較には物理アドレスを使用する。
例えば、512ビット(=64B)で4-wayを持つキャッシュにおいて、32KBの容量を用意したい場合、キャッシュのライン数は以下のようになるだろう。
インデックス
仮想アドレスのうち、下位の64B分(6ビット)はキャッシュライン内のため省略する。すると上位の128インデックス分(7ビット)がキャッシュ・インデックス・アクセスのために使用される。
ところが、仮想アドレスが物理アドレスに変換されると、一致しているのはアドレスのページ内ビット(12ビット分)のみであり、上記の例だと一番上の12ビット目は仮想アドレスと物理アドレスで異なる可能性がある。
この一番上のビットをColor Bitと名付け、以降ではこれを引き回していくことになる。