FC2カウンター FPGAの部屋 ZynqのAXI_ACPポートとAXI_HPポートの性能の違い2(AXI_HPポート)
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

ZynqのAXI_ACPポートとAXI_HPポートの性能の違い2(AXI_HPポート)

ZynqのAXI_ACPポートとAXI_HPポートの性能の違い1(AXI_ACPポート)”の続き。

前回は、AXI_ACPポートを使って、ビットマップ・ディスプレイ・コントローラIPを使用して、AXI_ACPポートからピクセル・データをReadするのをChipScope Proで観察するという方法で性能を見た。今回は、AXI_HP0 ポートを使用して同様に性能を見ようと思う。

最初にAXI_HPポートの Project Navigator のプロジェクトを示す。
Zynq_ACP_HP_10_140325.png

XPSプロジェクトを下に示す。Processing_System_7_0 の S_AXI_HP0 ポートに bitmap_disp_cntrler_axi_master_0 の M_AXIポートが接続されているのがわかる。
Zynq_ACP_HP_11_140325.png

Project Navigator で、論理合成、インプリメント、ビットストリームの生成を行い成功した。
ハードウェア構成をエクスポートして、SDKを立ちあげた。
Zynq_ACP_HP_12_140325.png

FPGAにビットストリームをダウンロードして、ソフトウェアを起動したところ、キャラクタが表示されたが、AXI_ACPポートと違って、AXI_HPポートは、ARMプロセッサでキャッシュをフラシュする命令を実行していないため、表示キャラクタがボロボロになっている。これは、フレームバッファ領域もデータ・キャッシュがONされていることで起こる。
Zynq_ACP_HP_16_140325.jpg

ChipScope Pro を立ちあげて、ARVALIDでトリガしたAXI_HP0 ポートの Read Transaction の波形を下に示す。
Zynq_ACP_HP_13_140325.png

RVALIDは、データ・チャネルの転送の間はずっと1でReadデータが供給できているのがわかる。

最初のトランザクションを引き伸ばした。
Zynq_ACP_HP_14_140325.png

トランザクション全体の経過時間は 85クロックだった。85クロック x 10nsec(100MHz) = 850 nsec となった。

次に、ARVALIDが 1 になった後で、最初に RVALID が 1 になった時間を計測してみた。これは、アドレスが入ってからデータが出てくるまでのレイテンシに相当する。これは、21クロックだった。つまり、210 nsec となった。
Zynq_ACP_HP_15_140325.png

トランザクション全体の経過時間から、データが出るまでのレイテンシを引くとデータ・トランザクション時間になる。これは、640 nsec となった。
次に、データ転送帯域の使用率を計算する。64バーストのデータをフルスピードで転送すると、640 nsec のはずなので、640 nsec / 640 nsec x 100 = 100 % になる。つまりデータ転送帯域幅の 100 % のスループットとなった。

AXI_HP0 ポートのデータ転送帯域使用率は、100 % という結果になった。ChipScope Pro で見えたトランザクションはすべて、RVALIDがデータ・チャネルの転送中はずっと 1、つまり、データ転送帯域使用率は、100 % だった。

ここで、AXI_ACPポートとAXI_HP0ポートのデータをまとめる。

・データ転送帯域使用率
AXI_ACPポート:35 % ~ 71 %      AXI_HP0ポート:100 %

・データが出てくるまでのレイテンシ
AXI_ACPポート:10クロック(100 nsec)  AXI_HP0ポート:21クロック(210 nsec)


上記の様な結果になった。

AXI_ACPポートはキャッシュのコヒーレンシを維持した状態で転送が出来るが、連続バーストするとキャッシュに入っているかいないかを検査する必要がある。キャッシュにない場合には、SDRAMから読んでくる必要があるので、遅くなる可能性がある。これは、画像のピクセル・データをReadするポートとしては向いていない。AXI_HPポートを使うべきである。
一方、AXI_ACPポートは、データが出てくるまでのレイテンシは短いので、メールボックスなど、プロセッサと専用ハードウェアの情報のやりとりに向いていると思う。

(追記)
ちょっと誤解を招く表現だったかもしれないので、追記する。

今回は、画像を表示するため、ピクセル・データをDMAするという状況でのテストだった。つまり、キャラクタを書くスピードは人間の認識できるスピードだった。AXI_HPポートを使用する場合は、ARMプロセッサが書いてからキャッシュをフラシュするするのが正常な手順だ。そうしないと、上の写真に示したように、キャッシュが書き戻された領域と、書き戻されていない領域に別れて、正常に表示されない。キャッシュのフラッシュはソフトウェアで明示的に行う。現在はそのキャッシュのフラッシュのコストを見積もっていない。前述したように、このピクセル・データのDMA用途では、ReadのDMAが殆どを占めて、Writeの方は殆ど専有時間は無い。つまり、キャシュのフラッシュ時間は人間が目に見える時間に行えば良いということになる。キャッシュのフラッシュのコストが問題にならない用途だと言える。(ピクセル・データがL2キャッシュにも入らないので、AXI_HPポートを使うのが適当だとは思う)
次に、MPI通信などのコンピュータ同士の通信用途を考えてみよう。今度は、ARMプロセッサから書かれたデータは1度で必ずRDMAされなければならない。その場合には、FPGA側にDMAコントローラがある場合は、ARMプロセッサのキャッシュをフラッシュしたら、フラッシュ命令の完了を待って、FPGA側のDMAコントローラを起動する必要がある。よって、キャッシュをフラッシュするコストは隠蔽されずに見えてくることになる。その時に、キャッシュをフラッシュする必要があるAXI_HPポートのRDMAが有利か、それともキャッシュをフラッシュしなくても済むAXI_ACPポートの方が有利かは検証していないので、まだわからない?ということになる。(DMA領域をDキャッシュONにしているという条件付き。キャッシュの容量も関係してきます)

つまり、まだ限定された条件での比較ですよ、ということを言いたい訳です。。。
  1. 2014年03月26日 04:14 |
  2. Zynq
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog.fc2.com/tb.php/2774-32758e61
この記事にトラックバックする(FC2ブログユーザー)