キャッシュは高速・小容量の読み書きができるメモリですので、基本構成は通常のSRAMと同じです。キャッシュと通常のメモリとの違いはキャッシュにヒットしたか、ヒットしなかったかを高速に判断し、さらにヒットした際に、高速に読み出すことができるかどうかです。
具体的な構成はマイコン各社によって異なりますが、一般的には、内部をタグ部とデータ部に分けており、ヒットしたかしなかったかは、タグ部を使って判断します。
さらに、タグ部の構成でいくつかの方式に分けられます。タグが1組の場合をダイレクトマップ方式(Direct Mapped)と呼びます。構造が単純ですがヒット率が他の方式に比べ低くなります。
複数のタグで構成する場合をセットアソシアティブ方式(Set Associative)と呼びます。タグの数が多いほどキャッシュヒット率は上昇しますが、構造が複雑になります。n個のタグにより構成された場合、nウエイセットアソシアティブ方式と呼びます。アドレスが与えられると全てのタグと比較される方式をフルアソシアティブ方式(Fully Associative)と呼びます。最も優れたヒット率が得られますが、コストが高くなるので通常は用いられません。
図6に最新のマイコンの例として、ARM Coretx-M7プロセッサを搭載した「STM32F7シリーズ」(STマイクロエレクトロニクス製)におけるキャッシュのブロック図を示します。
このマイコンはハーバードアーキテクチャ方式で、命令キャッシュは2-ウェイセットアソシアティブ、データキャッシュは4-ウェイセットアソシアティブ構造になっています。
ユーザーから見るとキャッシュと主メモリの2つのメモリが1つにしか見えませんので、2つのメモリの内容の一貫性を保たないと主メモリの内容が失われてしまいます。
CPUしか、メモリをアクセスしないのであれば、比較的一貫性を保つのが容易ですが、DMA(Direct Memory Access)などを併用すると、一貫性を保つことが難しくなります。
Q&Aで学ぶマイコン講座(29):「DMAのメリットって何?」でも述べましたが、CPUがメモリにデータを書いた時に、ライトスルー方式だと、キャッシュにデータを書き込まれると同時にメインメモリにも同じデータが書き込まれます。もし、その後、間違ってDMAが主メモリ上のデータを書き換えてしまうと、キャッシュのデータと主メモリのデータが異なってしまいます。その後、CPUがそのデータを読み出すと、キャッシュのデータが読まれてしまい、主メモリの値と異なる値を読み出すことになります(図7参照)。
キャッシュとDMAの間でハードウェアで一貫性を保つ仕組みが入っていれば良いのですが、ない場合は、ユーザーがデータの一貫性を管理しなくてはなりません。
Copyright © ITmedia, Inc. All Rights Reserved.