データキャッシュの構造とアクセス

データキャッシュ(D-cache)の構造とアクセスについて記載します。
なお、命令キャッシュも同じ構造と考えて下さい。データキャッシュはデータのロード(読み出し)やストア(書き込み)がありますが、命令キャッシュは命令を読み出すだけ(データキャッシュでいうデータのロード)になります。


データキャッシュの構造

indexが目印になるラインに分かれており、ライン毎に、アクセスしたいデータかを判定するためのタグ(物理アドレスを使用)と、データからなる。

例えば、データキャッシュの容量が16KB、1ラインあたりの容量が32バイトの場合、アドレスの下位14bit(bit13~0…16KB)のうち、bit13~5(512個のライン)がindexを指定し、bit4~0(32バイトのデータ)がデータの位置を指定する。

図1.データキャッシュの構造

データキャッシュへのアクセス

データキャッシュを持つ高性能なマイコンのアドレスは、プログラムを書く仮想アドレス(論理アドレス)と、ROMやRAM等の外部デバイスにアクセスする物理アドレスを持ち、データキャッシュへのアクセスは、ロード命令やストア命令でデータをアクセスする際に使う仮想アドレスを使用する(データキャッシュへのアクセスに物理アドレスを使うマイコンもある)。タグには、アクセスしたい外部デバイスの物理アドレスを使用する。

例えば、データキャッシュの容量が16KB、1ラインあたりの容量が32バイトの場合、仮想アドレスの下位14bit(bit13~0…16KB)のうち、bit13~5(512個のライン)がindexを指定し、bit4~0(32バイトのデータ)がデータの位置を指定する。
ここで、仮想アドレス0x8000_0000のデータにアクセスする場合を考える。Step1)bit13~5は0なのでindex0を指定。
Step2)index0のタグ(物理アドレス)を読み出し、並行して、TLB(Translation Lookaside Buffer)から仮想アドレスに対する物理アドレスを読み出して比較。
Step3)Step2の比較結果が一致すれば、bit4~0は0なので、0の位置のデータにアクセスできる(下図の赤枠)。

仮想アドレス0x8000_0044のデータにアクセスする場合、bit13~5は2なのでindex2を指定し、タグが一致すれば、bit4~0は4なので4の位置のデータにアクセスできることになる(下図の緑枠)。

図2.データキャッシュへのアクセス

最後に…(キャッシュ構成)

図2のようなキャッシュ構成をダイレクトマップと呼び、横に2つ並んだ構成を2wayのキャッシュ(2wayセットアソシアティブ)、4つ並ぶと4wayのキャッシュ(4wayセットアソシアティブ)と呼ぶ。最近の高性能なマイコンだと4wayの64KBをよく聞きますが、要は上記の16KBのキャッシュが4つ並んだとお考え下さい。4wayのキャッシュだと、index0にアクセスできる仮想アドレスは、0x8000_0000、0x8000_4000、0x8000_8000、0x8000_c000などで、様々なアドレスにアクセスする組み込みシステムのプログラムには有効なキャッシュ構成となる(要は様々なアドレスにアクセスしてもデータや命令をキャッシュに保存でき、ミスヒットが起こりにくくなり、高速処理が可能になる)。

いいなと思ったら応援しよう!