Zynq-7000のAXIスレーブ比較

Zynq-7000のPL(Programmable Logic)にAXIマスタのユーザー回路を実装した場合、その接続先はPS(Processing System)のAXIスレーブ・インターフェースです。例えば、ユーザー回路からメイン・メモリをアクセスしたい場合にはこのような構成になります。

AXI接続

AXI接続

このとき、AXIスレーブは次の3種類から選べます。

  • S_AXI_GP: 汎用
  • S_AXI_HP: ハイ・パフォーマンス用
  • S_AXI_ACP: CPUとキャッシュ・コヒーレント

では、同一のユーザー回路を3種類のAXIスレーブに接続した場合、その種類によって「AXIの応答に違いはあるのか」を実験で確認してみました。

AXIスレーブの応答比較

3種類のAXIスレーブ

Zynq-7000の仕様書によると、各インターフェースには次のような特徴があります。

インターフェース名 ビット幅 最大クロック周波数 R/Wバンド幅 I/F数
S_AXI_GP 32 150MHz 1200Byte/Sec. 2
S_AXI_HP 64/32 150MHz 2400/1200Byte/Sec. 4
S_AXI_ACP 64 150MHz 2400Byte/Sec. 1

動作確認用ユーザー回路

次のような画像処理システムを、ユーザー回路としてPLに実装しました。ユーザー回路の動作周波数は50MHzです。

AXIスレーブを実験するユーザー回路

AXIスレーブを実験するユーザー回路

計測方法

AXI応答の計測は、PL内部に実装した計測用の回路で行いました。計測内容は、リードチャネルで3種類、ライトチャネルで3種類の合わせて6種類の項目を計測しました。

ライトチャネルの計測

項目 名称 説明
ライトA ライト・コマンドの受付サイクル数 AWVALID=HからAWREADY=Hまでのサイクル数
ライトB ライト・データの受付不可サイクル数 バースト長分のWVALID=H出力時のWREADY=Lのサイクル数
ライトC ライト・レスポンスのレイテンシ WLAST=HのデータからBVALID=Hまでのサイクル数
ライトチャネルの計測内容

ライトチャネルの計測内容

リードチャネルの計測

項目 名称 説明
リードA リード・コマンドの受付サイクル数 ARVALID=HからARREADY=Hまでのサイクル数
リードB リード・データの初期レイテンシ リード・コマンド受付から先頭データ(RVALID=H)までのサイクル数
リードC リード・データの無効サイクル数 先頭データからバースト長分のデータをリードするまでの無効サイクル数(RVALID=Lのサイクル数)
リードチャネルの計測内容

リードチャネルの計測内容

計測結果

AXIスレーブは3種類ですが、S_AXI_HPはデータ・バス幅として32ビットまたは64ビットが選択できるので、合計4種類のAXIスレーブについて計測を行いました(AXIの32/64データ・バス幅の対応はユーザー回路側で行っています)。

ライトチャネル

ライトAとライトBは、すべてが同じ応答でした。

ライトチャネルの応答AとB

ライトチャネルの計測結果AとB

具体的にはライトAはすべて1サイクル、またライトBはすべて0サイクルでした。つまり、ライト・コマンドとライト・データは、すべてウェイトなしでAXIインターフェースに送出されました。応答タイミングに違いがないということは、データ・バス幅を32ビットから64ビット化することで、実際に2倍のデータを同一タイミングで転送できそうです。ライト・チャネルについて、唯一違いが見られたのがライトCのレスポンス・レイテンシです。

ライトチャネルの計測C

ライトチャネルの計測結果C

WLAST受付からBVALIDが戻ってくるまでのサイクルは、S_AXI_ACPが5~8サイクル、S_AXH_HP64/32が9~12サイクル、S_AXI_GP32が13~16サイクルでした。

リードチャネル

リード・チャネルは、32ビットと64ビットのAXIで応答に違いが見られました。

リードチャネルの応答A

リードチャネルの応答A

ほとんどのリード・コマンドは1サイクルで受け付けられました。S_AXI_GPやS_AXI_ACPでは2~3サイクル後のコマンド受付も計測されましたが、全体の1%以下でした。次に、リードBの計測結果です。

リードチャネルの計測結果B

リードチャネルの計測結果B

同じデータ・バス幅のAXIスレーブは似た傾向の結果になりました。32ビットのS_AXI_HP32とS_AXI_GPは、一番低レイテンシが9~16サイクルで全体の約40%、高レイテンシの33サイクル以上が約30%という分布でした。64ビットのS_AXI_HP64とS_AXI_ACPは、1~8サイクルという低レイテンシのメモリ・リードも計測されました。最後に、リードCの計測結果です。

リードチャネルの計測結果C

リードチャネルの計測結果C

1回のリード・コマンドの応答として帰ってくるリード・データについて、無効サイクルはほとんどの場合に0~3サイクルでした。無効サイクルについては、64ビット系システムの方が32ビットシステムよりも多いという結果でした。特に、S_AXI_ACPは、約20%は無効サイクルが4サイクル以上でした。

描画時間

このユーザー回路は画像表示システムなので、描画速度の比較も行いました。描画速度の速い順に次のようになりました。

  • S_AXI_ACP
  • S_AXI_HP64
  • S_AXI_GP
  • S_AXI_HP32
描画時間

描画時間

AXIのバス幅が32ビットと64ビットの場合を比べると、64ビットの方が20~30%高速でした。32ビット同士を比較した場合、S_AXI_HP32よりもS_AXI_GPの方がわずかに高速という興味深い結果になりました。

まとめ

S_AXI_HPとS_AXI_ACPは、応答にもう少し違いが出ると予想していたのですが、あまり大きな違いはありませんでした。今回のユーザー回路は画像表示系なので、キャッシュ・フラッシュの頻度があまり高くありません(1/60秒に1回程度)。Zynq-7000の仕様書にも、キャッシュ・フラッシュの頻度がこの程度の場合には、あまりACPは効果的ではないと記載があるので、仕様書に記載されている通りの結果ともいえます。

スポンサーリンク







  • このエントリーをはてなブックマークに追加
スポンサーリンク