チートシート

AXI4、AXI4-Lite、AXI4-Streamチートシート

チャネル、ハンドシェイクの規則、信号表、バースト種別、応答コード、そして初めてのAXI設計で必ず出会うバグを1ページにまとめます。

AMDAlteraMicrochip最終確認 2026年11月13日· AMBA AXI Issue L (2025), AXI4-Stream IHI0051B, Vivado 2026.1 IP interfaces

このページは、AXIインターフェースを手で書く、またはデバッグするエンジニアのためのものです。FPGAで出会う3つの変種を扱います。メモリマップドのバースト転送のためのフルAXI4、レジスタのためのAXI4-Lite、アドレスを持たないデータのためのAXI4-Streamです。権威はArmのAMBA仕様書です。以下のバージョンは、本稿執筆時点でAMD、Altera、MicrochipデバイスのベンダーIPとSoCファブリックが前提としているものです。

たった1つの規則

すべてのチャネルはVALID/READYの組です。転送は両方がHighになっているクロックエッジで起こります。

規則 帰結
ソースはデータがあるときにVALIDをアサートし、READYがHighと観測されるまでペイロードを変えずにVALIDをHighに保たなければならない シンクが遅いからといってVALIDを引っ込めることはできない
VALIDはREADYに依存してはならない VALIDを上げる前にREADYを待つソースは、READYを上げる前にVALIDを待つシンクとデッドロックしうる
READYはVALIDに依存してよい シンクはREADYをアサートする前にVALIDを待ってよいが、1サイクルの代償がある
READYはVALIDより先にアサートしてよく、VALIDが来る前に落としてもよい VALIDがLowのときのHighなREADYは転送ではない
リセット: VALIDはリセット中とリセット後の最初のサイクルにLowでなければならない リセット付きのフロップから駆動し、グリッチしうる組み合わせ論理から駆動しない
ストールが1回あるAXI4-Streamのハンドシェイク。転送はサイクル3、4、6で起こります。サイクル5ではTREADYがLowなので、D2はストールの間保持されます。clktvalidtreadytdataD0D1D2
ストールが1回あるAXI4-Streamのハンドシェイク。転送はサイクル3、4、6で起こります。サイクル5ではTREADYがLowなので、D2はストールの間保持されます。

チャネル

変種 チャネル 目的
AXI4 AW、W、B、AR、R 書き込みアドレス、書き込みデータ、書き込み応答、読み出しアドレス、読み出しデータ。読み出しと書き込みは独立で、同時に未完了のまま進められる。
AXI4-Lite 同じ5つ トランザクションごとに1転送、バーストなし、IDなし、データは32ビットか64ビットのみ
AXI4-Stream T チャネルは1つ。アドレスなし。データはソース(マスター)からシンク(スレーブ)へ流れる。

チャネルの接頭辞はすべての信号に付き(awvalid、wdata、bresp、rlast、tvalid)、ベンダーIPはさらにs_axi_のようなインターフェース接頭辞を加えます。

AXI4の信号

幅の欄では、Wはデータ幅(ビット)、Aはアドレス幅を表します。

チャネル 信号 幅 意味
AW awaddr A バーストの開始アドレス(バイトアドレス)
AW awlen 8 ビート数マイナス1(AXI4では0〜255、AXI3では0〜15)
AW awsize 3 ビートあたりのバイト数をlog2で表す: 0 = 1バイト、2 = 4バイト、3 = 8バイト
AW awburst 2 FIXED、INCR、WRAP(後述)
AW awid n トランザクションID。同じIDの応答は順序通りに返る
AW awprot、awcache、awlock、awqos、awregion、awuser 3、4、1、4、4、n 属性。大半のFPGAファブリックが尊重するのはawprot[1](セキュア)と、コヒーレンシポートのawcacheだけ
W wdata W 書き込みデータ
W wstrb W/8 バイトイネーブル。バイトレーンごとに1ビット
W wlast 1 バーストの最後のビートでHigh
B bresp 2 書き込み応答(下表)
B bid n awidのエコー
AR / R araddr、arlen、arsize、arburst、arid AWと同じ 読み出しについて同じ意味
R rdata、rresp、rlast、rid W、2、1、n ビートごとの読み出しデータと応答

AXI4にはwidがありません。AXI3にはありましたが、書き込みデータのインターリーブはAXI4で削除されました。

AXI4-Lite

信号群 有無 備考
awaddr、awprot、awvalid、awready あり awprotは通常0に固定する
wdata、wstrb、wvalid、wready あり レジスタへのバイト書き込みではwstrbが重要
bresp、bvalid、bready あり
araddr、arprot、arvalid、arready あり
rdata、rresp、rvalid、rready あり
ID、len、size、burst、last、lock、cache、qos なし すべてのトランザクションは1ビート

LiteのスレーブはAWとWをどちらの順序で受け取ることもあります。独立に取り込み、両方が揃ってからBを発行してください。

バースト種別

awburstまたはarburst 名前 ビートnのアドレス 用途
0b00 FIXED 毎ビート同じアドレス FIFOのようなペリフェラルのレジスタ
0b01 INCR 開始アドレス+n×ビートあたりバイト数 通常のメモリアクセス
0b10 WRAP インクリメントし、バースト長(バイト)に等しい境界で折り返す。長さは2、4、8、16ビートのいずれかで、開始アドレスはビートサイズに整列していなければならない キャッシュラインの充填
0b11 予約

バーストは4 KBのアドレス境界をまたいではなりません。INCRバーストは1〜256ビートです。ナロー転送(awsizeがバス幅より小さい)は合法ですが、大半のFPGA IPはフル幅のビートを好みます。

応答コード

brespまたはrresp 名前 意味
0b00 OKAY 正常終了、または排他アクセスの失敗
0b01 EXOKAY 排他アクセスの成功
0b10 SLVERR スレーブには到達したがエラーを返した(スレーブ内の不正アドレス、読み出し専用レジスタへの書き込み)
0b11 DECERR そのアドレスにスレーブがない(インターコネクトのデコードエラー)

ZynqやVersalのプロセッシングシステムではDECERRは通常データアボートになるため、未マップのアドレスはゴミを返すのではなくLinuxをクラッシュさせることがあります。

AXI4-Stream

信号 幅 必須 意味
tvalid、tready 1 tvalidは必須、treadyは任意 ハンドシェイク。treadyのないシンクは常にレディ。
tdata 8n 任意 ペイロード。整数バイト数
tstrb n 任意 バイトがデータ(1)か位置(0)か。FPGA IPではほとんど使われない。
tkeep n 任意 バイトが有効(1)かヌル(0)か。バス幅を埋めないパケット末尾に使う。
tlast 1 任意 パケットの最後のビート
tid、tdest n 任意 ストリーム識別子とルーティング先
tuser n 任意 サイドバンドビット。ビデオIPはフレーム開始に、Ethernet IPはエラーに使う。

AXI DMAなどのAMD IPは、tkeepのヌルバイトをtlastビートでのみ、レーン0から連続する形でしか許しません。サイドバンドの意味は標準化されていないので、各コアの製品ガイドを確認してください。

よくあるバグ

バグ 現れる症状 対処
VALIDがREADYを待つ そのようなブロック同士をつなぐとデッドロック、あるいは特定ベンダーのIPとしか動かない VALIDは状態からアサートし、決してreadyから作らない
VALIDがHighでREADYがLowの間にペイロードが変わる データ化け、プロトコルチェッカが検出 ペイロードをVALIDと同じイネーブルでレジスタに保持する
wlastがない、または違うビートに付く DMAがハング、インターコネクトが永遠にストール awlenプラス1からビートを数える
全Wビートを受理する前にB応答を返す インターコネクトが順序を入れ替え、データが失われる wlastのビートの後にだけBを発行する
4 KB境界をまたぐ 1つのスレーブ直結では動くが、インターコネクト経由で失敗 マスター側で4 KBごとにバーストを分割する
読み出しデータのID順序が違う 同じIDの読み出しが順不同で返る IDを1つにするか、リオーダバッファを使う
READYを通る組み合わせループ タイミングが失敗、シミュレータが発振 READYをレジスタ化するか、スキッドバッファでループを切る
トランザクション途中のリセット 未完了数が狂ってスレーブが固まる 両側を同時にリセットし、解除後1サイクルはVALIDをLowに保つ
ストリーム幅の不一致 幅変換器がtkeepビットを黙って落とす tkeepは全段で付けるか、まったく付けないかのどちらかにする
ストールしうるシンクでtreadyが未接続 データ損失 treadyを接続するか、バックプレッシャー付きのFIFOを追加する

出典

誤りやバージョン変更に気づいたら 訂正の手順をご覧ください。