高度な拡張インターフェース

AXI(Advanced eXtensible Interface)は、オンチップ通信バスプロトコルであり、AMBA(Advanced Microcontroller Bus Architecture )仕様の一部です。 [ 1 ] [ 2 ] AXIはロイヤリティフリーで、その仕様はARMから無料で入手できます。

AMBA AXIは多くのオプション信号を指定しており、設計の特定の要件に応じてこれらを含めることができるため、[ 3 ] AXIは多くのアプリケーションに使用できる多用途のバスとなっています。

AXIバス上の通信は単一のイニシエーターと単一のターゲットの間で行われますが、仕様にはN:M相互接続を含む詳細な記述と信号が含まれており、複数のイニシエーターとターゲットを持つトポロジーにバスを拡張できます。[ 4 ]

AXI3は2003年にAMBA3仕様とともに導入されました。2010年には、AMBAの新しい改訂版であるAMBA4が、AXI4、AXI4-Lite、AXI4-Streamプロトコルを定義しました。AMBA AXI4、AXI4-Lite、AXI4-Streamは、ザイリンクスとその多くのパートナー企業によって、自社製品の主要通信バスとして採用されています。 [ 5 ] [ 6 ] AXI5を搭載したAMBA5は2022年にリリースされ、アトミック性、データ保護、キャッシュ操作が追加されました。新しいACE(AXIコヒーレンシ拡張)が規定されています。[ 7 ]

スレッドID

スレッドIDを使用すると、単一のイニシエーターポートで複数のスレッドをサポートできます。各スレッドはAXIアドレス空間に順序どおりにアクセスできますが、単一のイニシエーターポートから開始された各スレッドIDは、互いに順序どおりに完了しない可能性があります。たとえば、1つのスレッドIDが低速の周辺機器によってブロックされた場合、別のスレッドIDが最初のスレッドIDの順序とは無関係に続行される場合があります。別の例として、CPU上の1つのスレッドに、read addr1、write addr1、read addr1などの特定のイニシエーターポートメモリアクセス用のスレッドIDが割り当てられている場合、各トランザクションは同じイニシエーターポートスレッドIDを持つため、このシーケンスは順序どおりに完了します。CPU上で実行されている別のスレッドに別のイニシエーターポートスレッドIDが割り当てられている場合、そのメモリアクセスも順序どおりに実行されますが、最初のスレッドIDのトランザクションと混在する可能性があります。[ 8 ]

イニシエータポート上のスレッドIDはグローバルに定義されていないため、複数のイニシエータポートを持つAXIスイッチは、内部的にイニシエータポートインデックスをスレッドIDの先頭に付加し、この連結されたスレッドIDをターゲットデバイスに提供します。その後、トランザクションが元のイニシエータポートに戻ると、このスレッドIDプレフィックスを使用してイニシエータポートが特定され、プレフィックスは切り捨てられます。これが、ターゲットポートのスレッドIDがイニシエータポートのスレッドIDよりもビット数が大きい理由です。[ 9 ]

AXI-Liteバスは、イニシエーターごとに1つのIDスレッドのみをサポートするAXIバスです。このバスは通常、UARTなどの単純な周辺機器など、一度に1つのイニシエーターデバイスとのみ通信する必要があるエンドポイントに使用されます対照的に、CPUは一度に複数の周辺機器やアドレス空間へのトランザクションを開始することができ、AXIイニシエーターポートとAXIターゲットポートで複数のスレッドIDをサポートします。そのため、CPUは通常、フルスペックAXIバスをサポートします。フロントサイドAXIスイッチの典型的な例としては、CPUイニシエーターに接続されたフルスペックAXIイニシエーターと、異なる周辺機器からAXIスイッチに接続された複数のAXI-Liteターゲットが挙げられます。[ 10 ]

(さらに、AXI-Lite バスは、トランザクションごとに 1 つのデータ ワードのトランザクション長のみをサポートするように制限されています。)

ハンドシェーク

AMBA AXIプロトコルの基本的なハンドシェイクメカニズム。この例では、宛先エンティティは、自身のREADYをアサートするために、高いVALIDを待機します。

AXIは、信号と信号で構成される基本的なハンドシェイク機構を定義しています。[ 11 ]この信号は、送信側エンティティによって駆動され、チャネル上のペイロードが有効であり、そのクロックサイクル以降に読み取ることができることを宛先エンティティに通知します。同様に、この信号は受信側エンティティによって駆動され、データを受信する準備が整ったことを通知します。 xVALIDxREADYxVALIDxREADY

xVALID信号と信号の両方xREADYが同じクロックサイクルでハイの場合、データペイロードは転送されたとみなされ、送信元はハイを維持して新しいデータペイロードを提供するか、xVALIDデアサートして転送を終了することができます。個々のデータ転送、つまり信号と信号の両方がハイであるxVALIDクロックサイクルは「ビート」と呼ばれます。 xVALIDxREADY

これらの信号の制御には、次の 2 つの主なルールが定義されています。

  • xREADYソースは、アサートするためにハイを待つことはできませんxVALID
  • 一度xVALIDアサートされると、ハンドシェイクが発生するまでソースはアサーションを維持する必要があります。

このハンドシェイクメカニズムのおかげで、送信元と送信先の両方がデータの流れを制御し、必要に応じて速度を調整できます。

チャンネル

AXI仕様では5つのチャネルが記述されている: [ 12 ]

  • 読み取りアドレスチャネル(AR)
  • 読み取りデータチャネル (R)
  • 書き込みアドレスチャネル(AW)
  • 書き込みデータチャネル (W)
  • 書き込み応答チャネル(B)

いくつかの基本的な順序付けルールを除けば、[ 13 ]チャネルは互いに独立しており、独自のハンドxVALID/xREADYシェイク信号を持っています。[ 14 ]

AXI読み取りチャネル
AXI 読み取りアドレス チャネルと読み取りデータ チャネル。
AXI書き込みチャネル
AXI 書き込みアドレス、書き込みデータ、および書き込み応答チャネル。

アキシ

信号

読み取りおよび書き込みアドレスチャネルの信号
信号の説明書き込みアドレスチャネル読み取りアドレスチャネル
単一チャネル上の複数のストリームを識別するためのアドレスIDAWID乾燥
バーストの最初のビートのアドレスアワドルアラダー
バースト内のビートの数オーレン[ nb 1 ]アーレン[ nb 1 ]
各ビートのサイズAWSサイズアースサイズ
バーストの種類AWBURSTアーバースト
アトミック操作を提供するためのロックタイプAWLOCK [ nb 1 ]アーロック[ nb 1 ]
メモリタイプ、トランザクションがシステム内でどのように進行するかAWCACHEアルカッシュ
保護の種類:特権、セキュリティ レベル、データ/命令アクセスAWPROTARPROT
取引のサービス品質AWQOS [注 2 ]ARQOS [注 2 ]
単一の物理インターフェースから複数の論理インターフェースにアクセスするための領域識別子AWREGION [ nb 2 ]地域[ nb 2 ]
ユーザー定義データAWUSER [注 2 ]ARUSER [ nb 2 ]
xVALID握手信号AWVALIDアルバリッド
xREADY握手信号すでにすでに
読み取りおよび書き込みデータチャネルの信号
信号の説明書き込みデータチャネルデータチャネルの読み取り
データID:単一チャネル上の複数のストリームを識別するWID [注 3 ]取り除く
データの読み取り/書き込みWデータRデータ
読み取り応答、現在のRDATA信号の状態を指定するRRESP
バイトストローブは、WDATA信号のどのバイトが有効かを示すWSTRB
最後のビート識別子WLASTRLAST
ユーザー定義データWUSER [ nb 2 ]RUSER [注 2 ]
xVALID握手信号有効RVALID
xREADY握手信号準備完了準備完了
書き込み応答チャネルの信号
信号の説明書き込み応答チャネル
単一チャネル上の複数のストリームを識別するための書き込みレスポンスID入札
バーストのステータスを指定するための書き込み応答ブレスプ
ユーザー定義データBUSER [ nb 2 ]
xVALID握手信号B有効
xREADY握手信号ブレディ

[ 15 ]

  1. ^ a b c d AXI3とAXI4の動作の違い
  2. ^ a b c d e f g h i AXI4でのみ利用可能
  3. ^ AXI3 のみで利用可能

バースト

FIXED、INCR、WRAPバーストの例

AXIはバーストベースのプロトコルであり[ 16 ]、単一のリクエストに対して複数のデータ転送(またはビート)が行われる可能性がある。これは、特定のアドレスパターンとの間で大量のデータを転送する必要がある場合に有効である。AXIでは、バーストには3つの種類があり、ARBURST(読み取り)またはAWBURST(書き込み)信号によって選択される。[ 17 ]

  • 修理済み
  • 増分
  • 包む

FIXEDバーストでは、転送中の各ビートは同じアドレスを持ちます。これは、 FIFOの読み取りや書き込みなど、同じメモリ位置への繰り返しアクセスに便利です。

ddressSt1つのrtddress{\displaystyle {\mathit {住所}}={\mathit {開始住所}}}

一方、INCRバーストでは、各ビートのアドレスは前のビートに転送サイズを加えた値になります。このバーストタイプは、連続したメモリ領域の読み書きによく使用されます。

ddressSt1つのrtddress+Tr1つのnsferSze{\displaystyle {\mathit {アドレス}}_{i}={\mathit {開始アドレス}}+{\mathit {i}}\cdot {\mathit {転送サイズ}}}

WRAPバーストはINCRバーストに似ており、各転送のアドレスは前の転送のアドレスに転送サイズを加えた値になります。ただし、WRAPバーストでは、現在のビートのアドレスが「上位アドレス境界」に達した場合、「ラップ境界」にリセットされます。

ddressWr1つのpBoあなたnd1つのry+St1つのrtddress+Tr1つのnsferSze メートルod BあなたrstLenグラムthTr1つのnsferSze{\displaystyle {\mathit {Address}}_{i}={\mathit {WrapBoundary}}+({\mathit {StartAddress}}+{\mathit {i}}\cdot {\mathit {TransferSize}})\ \mathrm {mod} \ ({\mathit {BurstLength}}\cdot {\mathit {TransferSize}})}

Wr1つのpBoあなたnd1つのrySt1つのrtddressあなたメートルberBytesBあなたrstLenグラムthあなたメートルberBytesBあなたrstLenグラムth{\displaystyle {\mathit {WrapBoundary}}=\left\lfloor {\frac {\mathit {StartAddress}}{{\mathit {NumberBytes}}\cdot {\mathit {BurstLength}}}}\right\rfloor \cdot ({\mathit {NumberBytes}}\cdot {\mathit {BurstLength}})}

取引

読む

AXI読み出しトランザクションの例。イニシエータは、アドレス0x0から始まるINCR型の4バイトのビート(ARLEN + 1 [ 18 ])を4回要求します。ターゲットは、アドレス0x0に対して0x10、アドレス0x4に対して0x11、アドレス0x8に対して0x12、アドレス0xcに対して0x13を、すべてOKAYステータスで返します。ここでは、最も関連性の高い信号のみを示しています。

読み取りトランザクションを開始するには、イニシエーターは読み取りアドレス チャネルで次の情報を提供する必要があります。

  • ARADDRの開始アドレス
  • ARBURST のバースト タイプ (FIXED、INCR、WRAP のいずれか) (存在する場合)
  • ARLEN のバースト長(存在する場合)。

さらに、他の補助信号が存在する場合は、より具体的な転送を定義するために使用されます。

通常の ARVALID/ARREADY ハンドシェイクの後、ターゲットは読み取りデータ チャネルで以下を提供する必要があります。

  • RDATA上の指定されたアドレスに対応するデータ
  • RRESPにおける各拍動の状態

加えて、その他のオプション信号も含みます。ターゲットからの応答の各ビートはRVALID/RREADYハンドシェイクによって行われ、最後の転送では、ターゲットはRLASTをアサートして、新しい読み取り要求がなければそれ以上ビートが続かないことを通知する必要があります。

書く

AXI書き込みトランザクションの例。イニシエータは、アドレス0x0から始まる4バイトの4ビート(AWLEN + 1 [ 18 ])をINCR型で駆動し、アドレス0x0に0x10、アドレス0x4に0x11、アドレス0x8に0x12、アドレス0xcに0x13を書き込みます。ターゲットは、トランザクション全体に対する書き込み応答として「OKAY」を返します。ここでは、最も関連性の高い信号のみを示しています。

書き込み操作を開始するには、イニシエーターはアドレス情報とデータ情報の両方を提供する必要があります。

アドレス情報は、読み取り操作と同様の方法で、書き込みアドレス チャネルを介して提供されます。

  • 開始アドレスはAWADDRに指定する必要があります
  • AWBURST のバースト タイプ (FIXED、INCR、WRAP のいずれか) (存在する場合)
  • AWLENのバースト長(存在する場合)

また、存在する場合は、すべてのオプション信号。

イニシエーターは、指定されたアドレスに関連するデータを書き込みデータ チャネルに提供する必要もあります。

  • WDATAのデータ
  • WSTRBの「ストローブ」ビット(存在する場合)。これは、個々のWDATAバイトを条件付きで「有効」または「無効」としてマークします。

読み取りパスと同様に、最後のデータ ワードでは、イニシエーターによって WLAST がアサートされる必要があります。

両方のトランザクションが完了したら、ターゲットは、BRESP 信号を介して結果を返すことにより、書き込み応答チャネルを介してイニシエーターに書き込みのステータスを送り返す必要があります。

サブセット

AXI-Lite

AXI4-LiteはAXI4プロトコルのサブセットであり、機能と複雑さを削減したレジスタのような構造を提供します。[ 19 ]注目すべき違いは次のとおりです。

  • すべてのバーストは1ビートのみで構成されています
  • すべてのデータアクセスは、32ビットまたは64ビットの全データバス幅を使用します。

AXI4-LiteはAXI4信号の一部を削除しますが、残りの信号についてはAXI4仕様に準拠しています。AXI4のサブセットであるAXI4-LiteのトランザクションはAXI4デバイスと完全に互換性があり、追加の変換ロジックなしでAXI4-LiteイニシエータとAXI4ターゲット間の相互運用性を実現します。[ 20 ]

信号

書き込みアドレスチャネル書き込みデータチャネル書き込み応答チャネル読み取りアドレスチャネルデータチャネルの読み取り
AWVALID有効B有効アルバリッドRVALID
すでに準備完了ブレディすでに準備完了
アワドルWデータブレスプアラダーRデータ
AWPROTWSTRBARPROTRRESP

[ 21 ]

AXIストリーム

AXI4-Streamは、高速ストリーミングデータアプリケーション向けに特別に設計された、簡素化された軽量バスプロトコルです。アドレス指定や複雑なハンドシェイクを必要とせず、単方向のデータフローのみをサポートします。AXI StreamはAXI書き込みデータチャネルに似ていますが、データの配置方法にいくつかの重要な違いがあります。

  • バーストはなく、代わりにデータはパケット、フレーム、データストリームに詰め込まれます。
  • データの長さに制限はなく、連続する可能性がある
  • データ幅は任意の整数バイト数にすることができます

AXI5 ストリーム プロトコルは、ウェイクアップ シグナリングとパリティを使用した信号保護を導入します。

単一の AXI Stream トランスミッタは、インターリーブ可能な複数のストリームを駆動できますが、順序の変更は許可されません。

信号ソース説明
ACLKクロック1ACLKはグローバルクロック信号です。すべての信号はACLKの立ち上がりエッジでサンプリングされます。
ARESETnリセット1ARESETn はグローバル リセット信号です。
TVALID送信機1TVALIDは、トランスミッタが有効な転送を実行していることを示します。TVALIDとTREADYの両方がアサートされると、転送が実行されます。
トレディ受信機1TREADY は、受信者が転送を受け入れることができることを示します。
Tデータ送信機TDATA_WIDTHTDATA は、インターフェースを介して渡されるデータを提供するために使用される主要なペイロードです。TDATA_WIDTH は整数バイト数で指定する必要があり、8、16、32、64、128、256、512、または 1024 ビットが推奨されます。
TSTRB送信機TDATA_WIDTH/8TSTRB は、TDATA の関連するバイトの内容がデータ バイトとして処理されるか、位置バイトとして処理されるかを示すバイト修飾子です。
ティーキープ送信機TDATA_WIDTH/8TKEEP は、TDATA の関連バイトの内容がデータ ストリームの一部として処理されるかどうかを示すバイト修飾子です。
信頼送信機1TLAST はパケットの境界を示します。
TID送信機TID_幅TIDはデータストリーム識別子です。TID_WIDTHは8以下にすることをお勧めします。
TDEST送信機TDEST_WIDTHTDEST はデータ ストリームのルーティング情報を提供します。TDEST_WIDTH は 8 以下が推奨されます。
チューザー送信機TUSER_WIDTHTUSER は、データストリームに沿って送信できるユーザー定義のサイドバンド情報です。TUSER_WIDTH は、TDATA_WIDTH/8 の整数倍にすることが推奨されます。
ウェイクアップ送信機1TWAKEUP は、AXI-Stream インターフェイスに関連付けられたすべてのアクティビティを識別します。

参照

参考文献

  1. ^ 「AMBA | ドキュメント」 Arm Holdings。
  2. ^ Toole, Christina (2016年10月24日). 「AXIプロトコル入門:AXIインターフェースの理解」 . arm.com . Arm Limited . 2023年9月11日閲覧今日、多くのSoC設計者が使用しているプロトコルはAXI(Advanced eXtensible Interface)であり、ArmのAdvanced Microcontroller Bus Architecture(AMBA)仕様の一部です。特にXilinxのZynqデバイスでは広く採用されており、チップのプロセッシングシステムとプログラマブルロジック部間のインターフェースとして利用されています。
  3. ^ Arm Holdings. 「AMBA AXIおよびACEプロトコル仕様」(PDF) . developer.arm.com . pp.  109– 118. 2019年7月5日時点のオリジナル(PDF)からのアーカイブ。 2019年7月5日閲覧
  4. ^ Arm Holdings. 「AMBA AXIおよびACEプロトコル仕様」(PDF) . developer.arm.com . pp.  23– 24. 2019年7月5日時点のオリジナル(PDF)からのアーカイブ。 2019年7月5日閲覧
  5. ^ 「AMBA AXI4 インターフェースプロトコル」 . www.xilinx.com . Xilinx Inc.
  6. ^ 「AXI4 IP」 . www.xilinx.com . Xilinx Inc.
  7. ^ ARM Ltd. 「AMBA 5」。Arm | デジタル世界のためのアーキテクチャ
  8. ^ 「AMBA AXIおよびACEプロトコル仕様」(PDF) Arm Ltd. 2013年2月22日. 2025年11月28日閲覧
  9. ^ 「AXI Interconnect v2.1 LogiCORE IP 製品ガイド」(PDF) . ザイリンクス. 2022年5月17日. 2025年11月28日閲覧
  10. ^ 「AXIスレッドID(TID)– SoCの基礎」(PDF) . Institute for Embedded Systems, TU Graz. 2021. 2025年11月28日閲覧
  11. ^ Arm Holdings. 「AMBA AXIおよびACEプロトコル仕様」(PDF) . developer.arm.com . pp.  37– 38. 2019年7月5日時点のオリジナル(PDF)からのアーカイブ。 2019年7月5日閲覧
  12. ^ Arm Holdings. 「AMBA AXIおよびACEプロトコル仕様」(PDF) . developer.arm.com . pp.  22– 23. 2019年7月5日時点のオリジナル(PDF)からのアーカイブ。 2019年7月5日閲覧
  13. ^ Arm Holdings. 「AMBA AXIおよびACEプロトコル仕様」(PDF) . developer.arm.com . p. 40. 2019年7月5日時点のオリジナル(PDF)からアーカイブ。 2019年7月5日閲覧
  14. ^ Arm Holdings. 「AMBA AXIおよびACEプロトコル仕様」(PDF) . developer.arm.com . p. 38. 2019年7月5日時点のオリジナル(PDF)からアーカイブ。 2019年7月5日閲覧
  15. ^ Arm Holdings. 「AMBA AXIおよびACEプロトコル仕様」(PDF) . developer.arm.com . pp.  28– 34. 2019年7月5日時点のオリジナル(PDF)からのアーカイブ。 2019年7月5日閲覧
  16. ^ Arm Holdings. 「AMBA AXIおよびACEプロトコル仕様」(PDF) . developer.arm.com . p. 22. 2019年7月5日時点のオリジナル(PDF)からアーカイブ。 2019年7月5日閲覧
  17. ^ Arm Holdings. 「AMBA AXIおよびACEプロトコル仕様」(PDF) . developer.arm.com . pp.  45– 47. 2019年7月5日時点のオリジナル(PDF)からのアーカイブ。 2019年7月5日閲覧
  18. ^ a b Arm Holdings. 「AMBA AXIおよびACEプロトコル仕様」(PDF) . developer.arm.com . p. 44. 2019年7月5日閲覧
  19. ^ Arm Holdings. 「AMBA AXIおよびACEプロトコル仕様」(PDF) . developer.arm.com . pp.  121– 128. 2019年7月5日時点のオリジナル(PDF)からのアーカイブ。 2019年7月5日閲覧
  20. ^ Arm Holdings. 「AMBA AXIおよびACEプロトコル仕様」(PDF) . developer.arm.com . p. 124. 2019年7月5日時点のオリジナル(PDF)からアーカイブ。 2019年7月5日閲覧
  21. ^ Arm Holdings. 「AMBA AXIおよびACEプロトコル仕様」(PDF) . developer.arm.com . p. 122. 2019年7月5日時点のオリジナル(PDF)からアーカイブ。 2019年7月5日閲覧