”
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(アナデバのリファレンス・デザイン)”同様のサンプル画像と音が出てきた。
更に、今回はXPSプロジェクトなので、スタートメニューから、ISE14.1のChipScope Pro Analyzer を単独で起動した。
・Open Cabel/Sreach JTAG Chain ボタンをクリックして、Zynqを認識させた。
・信号名が入っていないDataportが表示されたので、ProjectウインドウのUNIT:0 の右クリックメニューからimport... を選択した。こうすると、各UNIT毎に.cdc ファイルを適用できる。
・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 ボタンをクリックすると波形が現れた。
VDMAのHP0ポートの波形を示す。
最初のトランザクションの塊を引き伸ばして、タイミングを見た。RDATAは64ビット幅になっている。
データを連続バースト転送している幅は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になっているところを拡大してみた。
最初の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% 使用している。
表示空間はこのくらいのデータ帯域を使用していると思う。ブランク期間はデータ帯域を使用していないはずだ。
(追記:AXIマスタとしてReadしているVDMAがHP0ポートを待たせている(RREADY = 0)。これで問題ないのだろうか?PCI-Xの仕様ではRead要求したデータはWaitせずに受けること、となっていたと思う。AXIはバスとは言ってもクロスバーになので、他のデバイスのスループットやレイテンシに問題はないのだと思う)
- 2012年11月07日 05:08 |
- ZedBoard
-
| トラックバック:0
-
| コメント:0