キャッシュ(中編)

キャッシュポリシー

ライトスルー(Write-through)ポリシー

データ・キャッシュにヒットする書き込みアクセスは、キャッシュRAMにデータを書き込みます。もし、メモリ領域が、Write-Throughにマークされているのであれば、書き込み動作はAXIMインターフェース上でも実行されて、外部メモリにも同じデータがストアされ、外部メモリとキャッシュの一貫性が保たれます。外部メモリとの間に2次キャッシュ(L2キャッシュ)が有る場合も、同じように同時にデータがストアされます。そして、L1キャッシュ内の有効ビットVが有効になります。

図1

ライトバック(Write-back)ポリシー

メモリ領域が、ライトバック(Write-back)であれば、L1キャッシュ内の有効ビットVとダーティビットDが有効になり、キャッシュラインはダーティとしてマークされます。書き込みは、エビクションの場合にAXIのみで実行されます。ダーティのキャッシュラインがエビクションされる時に、データは、外部メモリシステムに書き込むAXIMインタフェース内の書き込みバッファを通って書き込まれます。

図2

メモリのデフォルトマッピングと属性

デフォルト属性

前述したように、メモリ属性はデフォルトでメモリ領域ごとに下表の様に設定されています。

アドレス 名称 メモリタイプ XN キャッシュ 説明
0x0000 0000~0x1FFF FFFF Code Normal - WT 一般的に、ROMまたはFlashメモリ。リセットにおいてシステムコードのためのベクトルテーブルをサポートするためにアドレス0x0から必要なメモリ
0x2000 0000~0x3FFF FFFF SRAM Normal - WBWA SRAM領域。一般に、内蔵RAM用
0x4000 0000~0x5FFF FFFF Peripheral Device XN - 内蔵周辺機能アドレス空間
0x6000 0000~0x7FFF FFFF RAM Normal - WBWA L2/L3キャッシュをサポートするライトバックメモリ、書き込み割り当て、キャッシュ属性
0x8000 0000~0x9FFF FFFF RAM Normal - WT ライトスルーキャッシュ属性用メモリ
0xA000 0000~0xBFFF FFFF Device Device、Shareable XN - 共有デバイス空間
0xC000 0000~0xDFFF FFFF Device Device、Non-shareable XN - 共有されないデバイス空間
0xE000 0000~0xE00F FFFF PPB Strongly-Ordered XN - 1MB領域がPPBとして確保されています。これはキーリソース(システムコントロール領域とデバッグ領域を含)をサポートします。
0xE010 0000~0xFFFF FFFF Vendor_SYS Device XN - ベンダーシステム領域

MPU(MPU_RASR:MPU Region Attribute and Size Register)

メモリ属性のデフォルトを変更するにはMPU(MPU_RASR:MPU Region Attribute and Size Register)を使用します。

図3

ラインフィルとエビクションバッファ

AXIインタフェースの章で述べましたが、命令用のラインフィルバッファは1つ、データ用のラインフィルバッファは2つ、書き込みバッファは1つあり、各々32Byteです。

図3

データラインフィルバッファ

  • ●ロード開始およびストア開始されたラインフィルのために使われます。
  • ●ストアバッファからのストアはラインフィルバッファにマージすることができます。
  • ●キャッシュされない読み出しバーストに使われます。

すなわち、ライトバック用に、データキャッシュがミスした時のライトアロケートが、データキャッシュがミスしたデータをストアーします。ラインフイルが、2つのラインフィルバッファのうちのどちらかを使い始めます。ラインフィルデータが外部メモリシステムから戻される時には、ストアバッファ内のデータはラインフィルバッファとマージされ、その後キャッシュに書き込まれます。

書き込みバッファ

  • ●エビクションに使われます
  • ●ライトスルー(Write-through)、読み出しアロケートとキャッシュ不可の書き込みバーストに使われます。

ECC(Error Correcting Code)概要

ECC

Cortex-M7のキャッシュは、ECCを持っていて、ECCでキャッシュRAMの中をチェックことができます。そして、キャッシュRAMで検出されたエラーの回復/無効化/リトライができます。エラーが検出されると、下表に示すように、対応したインデックス/ウエイはクリーンされて、無効にされます。クリーンと無効化が終わると、要求者はそのアクセスをリトライします。また、ECCは、RAMの単一ビットエラーを訂正するためにも使うことができます。

ECC(Error Correcting Code)はマイコンメーカー向けのオプションですので、各製品仕様に依存します。実際に搭載されていない製品がありますので、必ずマニュアルを確認してください。

もし、キャッシュにECCが内蔵されていて有効になっていれば、タグの個々のラインと結合されています。キャッシュにおいてルックアップが実行される時には、いつでも、キャッシュから読まれたデータがチェックされます。そして、そのデータが訂正可能ならば、プロセッサがそのデータを使う前に訂正されます。

命令キャッシュ

ラインの無効化が十分行われるので、ラインは常にクリーンです。アクセスがリトライされると、外部メモリから正しい値がフェッチされます。

データキャッシュ

データキャッシュでは、キャッシュラインをダーティにすることができます。キャッシュRAMの内容の訂正はキャッシュのためのクリーンと無効化操作の一部として実行されます。これは書き込みバッファ内で起こり、訂正されたデータは、外部メモリにライトバックされます。アクセスがリトライされると、外部メモリから正しい値が読み出されます。その時にデータが訂正できないならば、エラーは回復できなかったことになります。

RAMタイプ 保護 回復可能なエラー 回復不能なエラー ハードエラーサポート
データ タグRAM SEC-DED ECC シングルビットエラーとみなされるエラー 複数のビットエラーとみなされるエラー 2つのハードエラーまで
キャッシュデータRAM SEC-DED ECC シングルビットエラーとみなされるエラー ダーティラインの上の複数のビットエラーとみなされるエラー
命令 タグRAM SEC-DED ECC RAMにストアーされるタグ、または有効なシングルビットかダブルビットのエラー なし(*)
キャッシュデータRAM SEC-DED ECC RAMにストアーされるデータに関するエラー なし(*)
  • (*)キャッシュを無効にして、命令を再び試みることによってキャッシュRAMエラーが常に回復可能であるので、命令キャッシュは決してダーティにはなりません。