Zynq-7000のAXIスレーブ比較

FPGA

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_GP32150MHz1200Byte/Sec.2
S_AXI_HP64/32150MHz2400/1200Byte/Sec.4
S_AXI_ACP64150MHz2400Byte/Sec.1

動作確認用ユーザー回路

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

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

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

GitHub - Kenji-Ishimaru/polyphony: 3D graphics rendering system for FPGA, the project contains hardware rasterizer, software geometry engine, and application middleware.
3DgraphicsrenderingsystemforFPGA,theprojectcontainshardwarerasterizer,softwaregeometryengine,andapplicationmiddleware.-GitHub-Kenji-Ishimaru/polyphony:3Dgraphic...

計測方法

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は効果的ではないと記載があるので、仕様書に記載されている通りの結果ともいえます。

タイトルとURLをコピーしました