AXI転送の制限
AXI転送を行う際には、次に示す制限があります。
- バーストは、最大32バイト
- バースト長さは、最大4転送
- Strongly-orderedメモリまたはDeviceメモリの書き込みバーストの最大長は2転送です
- Strongly-orderedメモリまたはDeviceメモリの読み出しは、常に1転送です
- メモリの32バイト境界を越えるトランザクションはありません。プロセッサは、キャッシュラインの境界である32バイト境界にまたがるアドレスにアクセスするとき、AXIバーストを分割します。1つまたは2つの32バイト境界にまたがってメモリにアクセスする命令は、それぞれ2つまたは3つのAXIバーストを生成します
- 固定バーストは使用されません
- 書き込みアドレスチャネルは常にインクリメントタイプバーストで、決してラッピング(アドレスがメモリの末尾に達すると、メモリの先頭に戻ってアクセスを続ける)または固定ではありません
- ラッピングタイプメモリは、
- —キャッシュ可能なNormalメモリのラインフィル(読み出し)に使用されます
- —常に64ビットサイズで4転送です
- —常に64ビット境界のスタートアドレスです
- (参考)Normalのキャッシュ可能メモリからのロードおよび命令フェッチがキャッシュにヒットして、対応するキャッシュが動作している場合、キャッシュのラインフィルが発生します。キャッシュのラインフィルについて、ARADDRM、ARBURSTM、ARSIZEM、ARLENMの値を、下表に示します
アドレス[4:0](*) | ARADDRM | ARBURSTM | ARSIZEM | ARLENM |
---|---|---|---|---|
0x00~0x07 | 0x00 | ラッピング | 64ビット | 4つのデータ転送 |
0x08~0x0F | 0x08 | ラッピング | 64ビット | 4つのデータ転送 |
0x10~0x17 | 0x10 | ラッピング | 64ビット | 4つのデータ転送 |
0x18~0x1F | 0x18 | ラッピング | 64ビット | 4つのデータ転送 |
- 8ビット16ビットサイズの転送の場合は、バースト長は常に1転送です
- 64ビットAXIなので、転送サイズは64ビットよりも大きくなりません
- 命令フェッチは、常に64ビットの転送サイズです、そして、決してロックされないか、排他的ではありません
- DeviceメモリとStrongly-orderedメモリへのトランザクションは、常に、転送サイズに整列されたアドレスに対して行われます。DeviceメモリまたはStrongly-orderedメモリとの間でのロード/ストア命令では、命令によって指定されるものと同じサイズのAXIトランザクションが生成されます。DeviceメモリまたはStrongly-orderedメモリに対して、LDM、STM、LDRD、STRD命令を使用して行われるアクセスは、すべて32ビットの転送として実行されます
- 排他的なアクセスは、常に、転送サイズに応じて揃えられたアドレスに対して行われます
- 共有メモリ(shared memory)への排他的アクセスだけが、結果的に、AXIMの上で排他的なアクセスになります
データキャッシュ
データキャッシュが有る場合のAXIトランザクション
データキャッシュが有る場合に、AXIトランザクションが生成できるのは以下のケースです。
Normal、キャッシュ対応メモリ
- ラッピング4(WRAP4)64ビット読み出し、ロードとライトバックと書き込み割り当てのラインフィルへのストアと命令ラインフィル用
- インクリメント4(INCR4)64ビット書き込み、エビクション用
- インクリメントN(INCR N)(1-4)64ビット書き込み転送、連携した個別ライトスルーまたはライトバック、またはライトアロケートなしのストア用
- インクリメントN(INCR N)(1-4)64ビット読み出し転送、データキャッシュが無効の場合のロード用、または命令キャッシュが無効の場合の命令フェッチ用
Normal、キャッシュ非対応メモリ
- インクリメントN(INCR N)(1-4)64ビット書き込み転送、個別ストアと複数ストア用
- インクリメントN(INCR N)(1-4)64ビット読み出し転送、個別ロードと複数ロード用
- インクリメントN(INCR N)(1-4)64ビット読み出し転送、命令フェッチ用
- インクリメント1(INCR 1)8ビットと16ビットと32ビット、排他的読出しと書き込み、共有された排他的なもの用
Strongly OrderedメモリまたはDevice
- インクリメント1(INCR 1)8ビットと16ビットと32ビット、読出しと書き込み、個別ロードとストア用
- インクリメント1(INCR 1)32ビット、読出し転送、複数ロード用
- インクリメントN(INCR N)(1-2)32ビット、書き込み転送、複数ストア用
- インクリメント1(INCR 1)8ビットと16ビットと32ビット、排他的読み出しと書き込み、共有された排他的なもの用
固定バーストは使用されない
Normalメモリへの書き込みバーストは、次の最適化を使用することができます
- ストローブセット無しのビート全体
- 1ビートあたりの非連続的なストローブ
これらは、AHBブリッジがインプリメントされているAXI上で許可されます。
データキャッシュが無い場合のAXIトランザクション
データキャッシュが無い場合に、AXIトランザクションが生成できるのは以下のケースです。
Normalメモリ
- ラッピング4(WRAP4)64ビット読出し、命令キャッシュを含む命令ラインフィル
- インクリメントN(INCR N)(1-4)64ビット読出し転送、個別ロードと複数ロード用
- インクリメントN(INCR N)(1-4)64ビット書き込み転送、個別ストアと複数ストア用
- インクリメントN(INCR N)(1-4)64ビット読出し転送用、 キャッシュ不可の命令フェッチ用、または命令キャッシュが無い場合のすべての命令フェッチ用
- インクリメント1(INCR 1)8ビットと16ビットと32ビット、排他的読出しと書き込み、共有された排他的なもの用
Strongly Orderedメモリ
- インクリメントN(INCR N)(1-2)32ビット書き込み転送、個別ストアと複数ストア用
- インクリメントN(INCR N)(1-2)32ビット読出し転送、個別ロードと複数ロード用
- インクリメント1(INCR 1)8ビット/16ビット/32ビット、排他的読出しと書き込み、共有された排他的なもの用
固定バーストは使用されない
Normalメモリへの書き込みバーストは、次の最適化を使用することができます
- ストローブセット無しのビート全体
- 1ビートあたりの非連続的なストローブ
これらは、AHBブリッジがインプリメントされているAXI上で許可されます。
ID
以下のID読み出し/書き込みが、AXI上で可能です。
読み出しID
- ID0 – シングルNormalキャッシュ不可メモリとDeviceとStrongly Orderedメモリ読み出し
- ID1 – ラインフィルバッファ0からのデータキャッシュラインフィル
- ID2 – ラインフィルバッファ1からのデータキャッシュラインフィル
- ID3 – 命令フェッチ
書き込みID
- ID0 – Normalキャッシュ不可メモリと排他的ストア転送
- ID1 – Normalキャッシュ可能なライトスルー、ライトバック、ライトアロケート無しのメモリへの書き込み
- ID2 – DeviceまたはStrongly-orderedメモリへの書き込み
- ID3 – Normalキャッシュ可能なライトバックメモリへのエビクション
こちらも是非
“もっと見る” Cortex-M7編
電力管理、コアデバッグ、浮動小数点ユニット
Cortex-M7もCortex-M3/M4と同じように低消費電力モードをサポートしています。基本はCortex-M3/M4と同じです。Cortex-M7にはWIC(ウェイクアップ割り込みコントローラ)を含むと3種類のスリープを持っていることになります。
キャッシュの初期化と有効化
Cortex-Aで採用されているユニフィケーションのポイント(Point of unification:PoU)と一貫性のポイント(Point of coherency :PoC)の考え方がCortex-M7でも採用されています。
キャッシュと属性
データ・キャッシュにヒットする書き込みアクセスは、キャッシュRAMにデータを書き込みます。もし、メモリ領域が、Write-Throughにマークされているのであれば、書き込み動作はAXIMインターフェース上でも実行されて、外部メモリにも同じデータがストアされ、外部メモリとキャッシュの一貫性が保たれます。