FC2カウンター FPGAの部屋 2012年11月07日
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