キャッシュポリシー
ライトスルー(Write-through)ポリシー
データ・キャッシュにヒットする書き込みアクセスは、キャッシュRAMにデータを書き込みます。もし、メモリ領域が、Write-Throughにマークされているのであれば、書き込み動作はAXIMインターフェース上でも実行されて、外部メモリにも同じデータがストアされ、外部メモリとキャッシュの一貫性が保たれます。外部メモリとの間に2次キャッシュ(L2キャッシュ)が有る場合も、同じように同時にデータがストアされます。そして、L1キャッシュ内の有効ビットVが有効になります。
ライトバック(Write-back)ポリシー
メモリ領域が、ライトバック(Write-back)であれば、L1キャッシュ内の有効ビットVとダーティビットDが有効になり、キャッシュラインはダーティとしてマークされます。書き込みは、エビクションの場合にAXIのみで実行されます。ダーティのキャッシュラインがエビクションされる時に、データは、外部メモリシステムに書き込むAXIMインタフェース内の書き込みバッファを通って書き込まれます。
メモリのデフォルトマッピングと属性
デフォルト属性
前述したように、メモリ属性はデフォルトでメモリ領域ごとに下表の様に設定されています。
アドレス | 名称 | メモリタイプ | 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)を使用します。
ラインフィルとエビクションバッファ
AXIインタフェースの章で述べましたが、命令用のラインフィルバッファは1つ、データ用のラインフィルバッファは2つ、書き込みバッファは1つあり、各々32Byteです。
データラインフィルバッファ
- ロード開始およびストア開始されたラインフィルのために使われます。
- ストアバッファからのストアはラインフィルバッファにマージすることができます。
- キャッシュされない読み出しバーストに使われます。
すなわち、ライトバック用に、データキャッシュがミスした時のライトアロケートが、データキャッシュがミスしたデータをストアーします。ラインフイルが、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エラーが常に回復可能であるので、命令キャッシュは決してダーティにはなりません。
こちらも是非
“もっと見る” Cortex-M7編
電力管理、コアデバッグ、浮動小数点ユニット
Cortex-M7もCortex-M3/M4と同じように低消費電力モードをサポートしています。基本はCortex-M3/M4と同じです。Cortex-M7にはWIC(ウェイクアップ割り込みコントローラ)を含むと3種類のスリープを持っていることになります。
AXI転送
AXI転送を行う際には、次に示す制限があります。バーストは、最大32バイト。バースト長さは、最大4転送。Strongly-orderedメモリまたはDeviceメモリの書き込みバーストの最大長は2転送です。Strongly-orderedメモリまたはDeviceメモリの読み出しは、常に1転送です。
キャッシュの初期化と有効化
Cortex-Aで採用されているユニフィケーションのポイント(Point of unification:PoU)と一貫性のポイント(Point of coherency :PoC)の考え方がCortex-M7でも採用されています。