AXIMインターフェースの概要
AXIプロトコルとは
AXI(Advanced eXtensible Interface)プロトコルは、既にCortex-RやCortex-Aでは採用されており、高性能、高周波システム設計をサポートするプロトコルです。Cortex-Mシリーズでは、M7が初めて搭載しました。
AXIプロトコルはAMBA規格をベースにしていますが、その長所を存分に活かして、システム性能と柔軟性を大幅に向上させるものです。一番の特徴は単方向チャネルアーキテクチャです。読み出し、書き込み、アドレス/制御の各チャネルを効率的に使用することによって、高いレベルの性能と効率性を実現します。
AXIプロトコルは
- 高帯域幅と短いウェイト時間の設計に適する。
- 複雑なブリッジを使わずに、それが高周波動作可能。
- 様々なコンポーネントのインターフェース要求を満たす。
- 初期アクセス時のウェイト時間が長いメモリコントローラに適する。
- 相互接続アーキテクチャのインプリメンテーションにおいて、柔軟性を提供する。
- 既存のAHBとAPBインターフェースの仕様や機能を包含している(後方互換性有り)。
AXIプロトコルの重要な機能は
- 個別のアドレッシング/コントロールとデータフェーズ。
- アンアラインドデータの転送サポートは、バイト単位で実施。
- バーストベースのトランザクションは、開始アドレスだけ発行。
- 別個の読み出し/書き込みデータチャネルが低コストのDMAをサポート。
- マルチアドレスの発行をサポート。
- アウトオブオーダートランザクションをサポート。
AXIプロトコルは、低消費電力動作のための信号をカバーする拡張機能をオプションで持っています。AXIプロトコルは、AXI4-Lite仕様、コンポーネント内のより簡単なコントロールレジスタースタイルインターフェースとの通信のためのAXI4のサブセットを含みます。
AXIアーキテクチャ
AXIのデータ転送は、基本的にバースト転送です。次に示すような独立したトランザクションのチャネルで定義されています。
見ていただくとわかりますが、従来の「~バス」が「~チャネル」になっています。各チャネルは独立して情報を送出できます。「アドレスが来てから、次にデータを出す」の様なチャネル間の関係に制約がありません。他のチャネルのタイミングに関係なくデータを転送できます。
- 読み出しアドレス
- 読み出しデータ
- 書き込みアドレス
- 書き込みデータ
- 書き込み反応
アドレスチャンネルは、転送されるデータの性質を説明するコントロール情報を伝えます。
データは、マスタとスレーブの間で以下を使って転送されます
- データをマスタからスレーブに移す書き込みデータチャネル。書き込みトランザクションにおいて、スレーブは、マスタに転送の完成を信号で伝えるために、書き込み反応チャンネルを使用する。
- データをスレーブからマスタに移す読み出しデータチャネル。
AXIプロトコル
- 実際のデータ転送の前でアドレス情報を出すことの許可。
- 複数のアウトスタンディング(未処理)トランザクションをサポート。
- アウトオブオーダートランザクションをサポート。
マスターインターフェース&ストアバッファ
マスターインターフェース
Cortex-M7のコアにはAXIを制御するマスタ機能が搭載されています。AXIインターフェースは前述したように、外部記憶装置への高性能アクセスを提供するシステムです。
AXIM(AXIマスター)は、Arm CoreLink L2C-310レベル2キャッシュコントローラの仕様をサポートします。L2C-310排他的キャッシュコンフィギュレーションはサポートしていません。マイコンベンダーが、この仕様に従ってL2キャッシュを搭載する際は、AXIインターフェースに接続し、AXIMが制御します。
AXIMインターフェースは単一の64ビット幅のインターフェースです。外部メモリシステムと接続されます。
- 64-bit AMBA4 AXIマスターインターフェース、データと命令用
- TCMまたはAHBPによってカバーされないアドレスの主なインターフェース
- オプションの命令キャッシュとデータキャッシュをサポート
- キャッシュできないNormalのメモリデータアクセス
- DeviceとStrongly-orderedタイプのデータを通常周辺とアクセス
Arm AMBA AXIとACE Protocol Specificationにおいて記述されるようにAXIMインターフェースがAXI4標準規格に対応します。AXI標準規格内では、AXIMインターフェースは、内側のメモリ属性とリクエストソースを示すために、多くの拡張信号を用いています。
また、AXIMインターフェースはプロセッサと同じ周波数またはそれよりも低い周波数で動作可能です(実際に、バス動作速度がCPUの動作速度よりも遅い製品がありますので製品を選択する際は要注意です)。
ストアバッファ(STB)
メモリシステムは、データがキャッシュRAMに書かれる前に、データ保持用のストアバッファを持っています。また、ストアバッファは、データをAXIMインターフェースに渡す前のデータ保持にも使われます。
ストアバッファは、メモリマップのAXIM領域のへのすべてのストアデータを保持します。エントリーは4つあり、各々のエントリーは、データの64ビットと32ビットアドレスを含むことができます。
①ストアバッファの振る舞い
ストアバッファは書き込み要求を次のブロックに指示します。
- キャッシュがヒットした時のキャッシュコントローラ:ストアバッファは、キャッシュが特定ラインにヒットしたことをチェックするために、キャッシュルックアップを送ります。もしヒットしたならば、ストアーバッファは、キャッシュの中でそのデータをマージします。
- AXIMインターフェース:キャッシュ不可、ライトスルーキャッシュ可能、書き込み割り当て無しのライトバックでキャッシュがミスった時は書き込みアクセスはAXIM上で行われます。
ライトバック用に、データキャッシュがミスした時のライトアロケートが、データキャッシュがミスしたデータをストアーします。ラインフイルが、2つのラインフィルバッファのうちのどちらかを使い始めます。ラインフィルデータが外部メモリシステムから戻される時には、ストアバッファ内のデータはラインフィルバッファとマージされ、その後キャッシュに書き込まれます。
②ストアバッファの排出
ストアバッファのエントリーは、次の場合には排出されます。
- エントリーのすべてのバイトが書かれた時。
- エントリーがラインフィルバッファと結合される時。
- エントリーは、DeviceメモリまたはStrongly-orderedメモリへのストアの場合も含んでいます。
- エントリーはキャッシュ不可、ライトスルーで、あまりにも長い間データを結合するときには、待ち状態に入ります。
次の場合、ストアバッファは完全に排出されます。
- 以下のための明らかな排出要求があった。
- キャッシュ・メンテナンス命令。
- DMBまたはDSB命令。
- 共用メモリ(shared Memory)への排他的なストア。
- ストアバッファは一杯であるか、または、一杯になりそうな場合、ロードがStrongly-orderedメモリまたはDeviceメモリに行われる前に、ストアバッファはStrongly-orderedメモリまたはDeviceメモリのすべてのストアを排出します。
L1/L2キャッシュ
L1/L2のLはレベル(Level)の意味です。1/2次キャッシュという言い方もあります。コアから近い順にL1(1次)、L2(2次)…と呼びます。
ライトバック(Write-back)
キャッシュが一杯になるまではキャッシュ上で演算を行い、キャッシュのブロックが追い出されるときにその追い出されるデータをメインメモリに書き込む方式。
ライトスルー(Write through)
キャッシュに書き込むとき同時にメインメモリにも同じデータを書き込む方式。
ラインフィル(line fills)
全体のキャッシュライン用のバス上の読み出しリクエスト。
詳細は、第8回(2016年3月更新)の「豆知識5」参照。
AXIの制限&AXIコンセプト&Cortex-M7のAXIの利点
ストアバッファとキャッシュとAXIインターフェースの関係を下図に示します。
AXI転送の制限
AXIトランザクションを行う際の主な制限を以下に示します。詳細な制限事項は、AXI転送(第11回参照)で説明します。
- バーストは、最大32バイト。
- バースト長さは、最大4転送。
- メモリの32バイト境界を越えるトランザクションは無し。
- 8ビット16ビットサイズの転送の場合は、バーストは常に1転送。
- 64ビットAXIなので、転送サイズは64ビットよりも大きくならない。
- DeviceメモリとStrongly-orderedメモリへのトランザクションは、常に、転送サイズに整列されたアドレスになる。
- 排他的なアクセスは、常に、転送サイズのために整列されたアドレスになる。
あわせて読みたい
AXIコンセプト
AXIは関係するリクエストとデータフェーズを併せたものです。リクエストは、メモリ待ち時間にバスが利用可能ならば、その対応したデータから独立しています。リクエストのための1バスと1データは同等です。そして、書き込みアクノレッジのための1つはオプショナルです。
機能的な関係がなければ、順序違いも可能(例えば、命令フェッチとデータフェッチ)です。
AXIの読み出しバスと書き込みバスは分かれています。読み出しは、同じサイクル内で書き込みよりも早く始めることができます。
同等の5つのバスは、「読み出しリクエスト」、「データ読み出し」、「書き込みリクエスト」、「データ書き込み」、「書き込みアクノレッジ」で構成されます。
Cortex-M7のAXIの利点
CM7は、「独立」相当のいくつかの「マスター」を持っています。「命令キャッシュコントローラー」、「データキャッシュコントローラ」、「ストアバッファ」等々…です。その結果、AXI転送の間に、Cortext-M7は次の操作が可能です。例えば、内蔵Flash等の低速メモリからの命令読み出し、外部メモリ等のキャッシュ可能な低速メモリからのデータ読み出し、外部SDRAM等のデータキャッシュラインを取り戻すための、低速メモリへの書き込み、キャッシュ可能なメモリへの0WS(ゼロウエイト)読み出しまたは書き込みです。
こちらも是非
“もっと見る” 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でも採用されています。