FC2カウンター FPGAの部屋 FPGA+SoC+Linux実践勉強会での課題をやってみた3(Vivado 編2 ACPポートを使用)
FC2ブログ

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

FPGAの部屋

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

FPGA+SoC+Linux実践勉強会での課題をやってみた3(Vivado 編2 ACPポートを使用)

FPGA+SoC+Linux実践勉強会での課題をやってみた2(Vivado 編)”の続き。

「”FPGA+SoC+Linux実践勉強会”でZYBO Z7 を使用し、Vivado HLS でDMA IPを作成して、Vivado で回路にして、SDK でベアメタル・アプリケーションでDMA IP を動作させようとしたら動作しなかった。
そこで、DMA IP を仕上げてデバイツリー・オーバーレイやudmabuf などを確かめてみよう。」ということで、前回はPS のHP ポートを使用して、Vivado HLS で作成したDMA_pow2 IP を接続して使用することができた。今回は、ACP ポートにDMA_pow2 IP を接続して使用してみようと思う。

FPGA+SoC+Linux実践勉強会での課題をやってみた2(Vivado 編)”をプロジェクト・フォルダごとコピー&ペーストして、フォルダの名前をtest_dma_ACP に変更した。
FPGA-SoC-Linux4ZYBO_Z7_41_171206.png

PS をダブルクリックして、ダイアログを開き、HP ポートを削除し、ACP ポートをTie off AxUSER 付きで追加した。
FPGA-SoC-Linux4ZYBO_Z7_43_171206.png

ブロック・デザインを示す。
FPGA-SoC-Linux4ZYBO_Z7_42_171206.png

Address Editor 画面を示す。
FPGA-SoC-Linux4ZYBO_Z7_54_171209.png

論理合成、インプリメント、ビットストリームの生成を行った。結果を示す。
FPGA-SoC-Linux4ZYBO_Z7_44_171206.png
FPGA-SoC-Linux4ZYBO_Z7_45_171206.png

成功した。
ビットストリーム付きで、ハードウェアをエクスポートし、SDK を立ち上げた。
FPGA-SoC-Linux4ZYBO_Z7_46_171206.png

Vivado Analyzer で波形を観測するためにHello_World を起動してから、Vivado Analyzer を起動して、その後、test_dma.elf を十個したところ、成功した。
FPGA-SoC-Linux4ZYBO_Z7_40_171206.png

Vivado Analyzer の波形を示す。
Read 波形を示す。
FPGA-SoC-Linux4ZYBO_Z7_39_171206.png

Write 波形を示す。
FPGA-SoC-Linux4ZYBO_Z7_40_171206.png

ここで、最後にBVALID が 1 になっていることに注目してほしい。
ここまでは昨日の夜やっていたのだが、一夜明けて、朝もう一度やってみたところ、Tera Termに全く表示されなくなった。
その時の波形を示す。

Read から示す。
FPGA-SoC-Linux4ZYBO_Z7_47_171207.png

一見普通のトランザクションに見えるのだが、最後の 9 をRead するところで、データのRead が 1 買いだけになってしまっているのが分かると思う。つまり、トランザクションが足りない。

次にWrite を見てみよう。
FPGA-SoC-Linux4ZYBO_Z7_48_171207.png

こちらも 64 はWrite できているが、91 が無い。しかもBVALID のアサートもない。
つまり、Write 応答チャネルに反応が無いようなのだ。メモリに書けていないようなのだ。しかし、一回はうまく行ったのに、一夜明けると失敗するのだろう?不可解だ。。。
なお、HP ポートはいつでも成功していて安定している。

(追記)
ACPポートが使えるようになりました。ikzwm さんに教えてもらったのですが、AWCACHEとARCACHE はXilinxのデフォルトでは 0011 のCacheable and bufferable, do not allocate だが、これではL2 キャッシュには書かれないそうだ。(”Zynq の ACP を使う時の AxCACHE 信号とAxUSER 信号の値”参照)

Zynq の ACP を使う時の AxCACHE 信号とAxUSER 信号の値”によるとAxCACHE 信号とAxUSER 信号の値は、Cacheable write-back, allocate on both read and write の 1111 ということで、これを設定してやってみた。

DMA_pow2 IP をダブルクリックして、設定ダイアログを表示させた。
CACHE value を ”1111”に変更した。
FPGA-SoC-Linux4ZYBO_Z7_49_171207.png

これで、論理合成、インプリメント、ビットストリームの生成を行って、成功した。

ハードウェアをエクスポートして、SDK を立ち上げた。
FPGA-SoC-Linux4ZYBO_Z7_50_171207.png

HP ポートでも result[] が 0 になるコードを実行したが、きちんと二乗の計算ができてる。
FPGA-SoC-Linux4ZYBO_Z7_51_171207.png

Vivado Analyzer でAXI4 Master の波形を取ってみたので貼っておく。
Read
FPGA-SoC-Linux4ZYBO_Z7_52_171207.png

Write
FPGA-SoC-Linux4ZYBO_Z7_53_171207.png

これで、デバイスツリー・オーバーレイや udmabuf を試してみよう。
  1. 2017年12月07日 04:57 |
  2. ZYBO Z7
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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