FC2カウンター FPGAの部屋 ZedBoardでHDMI出力3(ChipScope AXI Monitor でAXIバスを観察2)
fc2ブログ

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

FPGAの部屋

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

ZedBoardでHDMI出力3(ChipScope AXI Monitor でAXIバスを観察2)

ZedBoardでHDMI出力2(ChipScope AXI Monitor でAXIバスを観察1)”の続き。

前回は、ChipScope Integrated Controller を1つ、ChipScope AXI Monitor をHPバス用と、VDMAのAXI Stream 用に2つ追加追加して、XPSでインプリメントが終了し、SDKでコンパイルが終了した。
cf_adv_7511_zedの右クリックメニューでRun as -> Run Configurations... を選択し、cf_adv_7511_zed Debugコンフィグレーションを作成して、Runしたら、”ZedBoardでHDMI出力1(アナデバのリファレンス・デザイン)”同様のサンプル画像と音が出てきた。
ZedBoard_HDMI_14_121029.jpg

更に、今回はXPSプロジェクトなので、スタートメニューから、ISE14.1のChipScope Pro Analyzer を単独で起動した。
・Open Cabel/Sreach JTAG Chain ボタンをクリックして、Zynqを認識させた。

・信号名が入っていないDataportが表示されたので、ProjectウインドウのUNIT:0 の右クリックメニューからimport... を選択した。こうすると、各UNIT毎に.cdc ファイルを適用できる。
ZedBoard_HDMI_17_121107.png

・cf_adv7511_zed\cf_adv7511_zed\implementation\chipscope_axi_monitor_0_wrapper フォルダにあるchipscope_axi_monitor_0.cdc を指定した。

・ProjectウインドウのUNIT:1 の右クリックメニューからimport... を選択した。

・cf_adv7511_zed\cf_adv7511_zed\implementation\chipscope_axi_monitor_stream_wrapper フォルダにあるchipscope_axi_monitor_stream.cdc を指定した。

これで、ChipScopeの設定が終了した。Triger Immediate ボタンをクリックすると波形が現れた。
ZedBoard_HDMI_18_121107.png

VDMAのHP0ポートの波形を示す。
ZedBoard_HDMI_19_121107.png

最初のトランザクションの塊を引き伸ばして、タイミングを見た。RDATAは64ビット幅になっている。
ZedBoard_HDMI_20_121107.png

データを連続バースト転送している幅は84クロックだった。ARVALIDが1になるよりも前にRVALIDとRREADYが同時に1になっているのがわかるだろうか?これは以前のトランザクションが遅延して残っているようだ。84クロックはHP0ポートのバッファ量を示しているのではないか?と思う。それにしても、1クロックの遅延もなくデータのバースト転送が続くのは見事だと思う。スループットが最大になっている。processing_system_7_0::FCLK_CLK1 は200MHzだったので、64ビットデータ幅=8バイト、8バイト x 200MHz = 1.6GB/sec の転送スピードとなる。ビットに直せば12.8Gbit/sec だ。しかしどうして、連続アドレスにアクセスしていると思うのだが、バースト長を長くしないのだろう?

1番目と2番めにARVALIDが1になっているところを拡大してみた。
ZedBoard_HDMI_21_121107.png

最初のARVALIDが1のアドレスが 021E2500 で、次のアドレスが、021E2580 になっている。つまり0x80分のアドレスの差があることになる。つまり、1つのトランザクションで、128バイト転送していることになる。バースト数は128バイト / 8バイト(64ビットバス幅) = 16バーストとなる。
次に、ARVALIDが1になる時の各制御信号を見ていこう。信号の意味は、”AXI4バスのパラメータの意味”を参照のこと。

ARLEN = 0F : 16バースト転送
ARSIZE = 3 : 1回に転送するバイト数は8バイト
ARBURST = 1 : INCR(アドレスをインクリメント)
ARCACHE = 3 : Normal Non-cacheable Bufferable


ZedBoardにビットマップ・ディスプレイ・コントローラを追加する13(char_wirte_axi_master IPを追加4)”でchar_write_axi_master IP、つまりAXIバスのWrite マスタを追加した時には、ARCACHE = 3、つまりBufferableにすると、BRESPに”10”、SLVERR (Slave error) が帰ってきた。Writeではダメだが、ReadではARCACHEを 3 Bufferable にしても良いようだ。

(2013/10/21:追記)
ISE14.6を使用して、AWCACHE、ARCACHEの値を 3 にして、AXIバスのデータ転送を行ってみました。Write もRead もBRESP、RRESPの返り値が 0 で問題ないことが分かりました。”AXI4バスでのAWCACHE、ARCACHEの値”を参照下さい。


VDMAのRead Transaction Issuance Limit はAuto になっていたが、たぶんデフォルトでは8だと思うので、8個のアドレスまで発行できる。つまり今のデータ転送はどこのアドレスなのか、この部分を切り取っただけでは分からない。

VDMAは性能が良いと思った。これならば、使わせてもらって、自分の回路を修正しても良いかな?

最後にHP0ポート、最大性能1.6GB/sec の帯域のどのくらいを使用しているか?だが、この時点では、84 / 226 x 100 = 37% 使用している。
ZedBoard_HDMI_22_121107.png

表示空間はこのくらいのデータ帯域を使用していると思う。ブランク期間はデータ帯域を使用していないはずだ。

(追記:AXIマスタとしてReadしているVDMAがHP0ポートを待たせている(RREADY = 0)。これで問題ないのだろうか?PCI-Xの仕様ではRead要求したデータはWaitせずに受けること、となっていたと思う。AXIはバスとは言ってもクロスバーになので、他のデバイスのスループットやレイテンシに問題はないのだと思う)
  1. 2012年11月07日 05:08 |
  2. ZedBoard
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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