FC2カウンター FPGAの部屋 2017年03月20日

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

FPGAの部屋

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

Vivado HLS で生成した AXI4 Master DMA IP を使用したカメラ画像表示システム3(ILAコアの挿入)

Vivado HLS で生成した AXI4 Master DMA IP を使用したカメラ画像表示システム1(プロジェクト作成)
Vivado HLS で生成した AXI4 Master DMA IP を使用したカメラ画像表示システム2(SDK)”の続き。

前にやったのは半年くらい前だが、DMA Read IPが動作しないということで止まっていた。しかし、”「Vivado HLS で DMA Read IP を作る2(絶対アドレス指定版)」を使って合成後の機能シミュレーション3”で論理合成しても機能シミュレーションが問題なくなったということで、もう一度やってみようと思う。

cam_disp_axis_162 プロジェクトはVivado 2016.2 なので、”Vivado 2016.2 からVivado 2016.4 へアップグレード”を参照して、Vivado 2016.4 のcam_disp_axis プロジェクトを作成した。
DMA_Read_IP_34_170319.png
当然、Target language はVHDL にしてある。
(2017/04/20 : 追記)この時点ではアプリケーションソフトがバグっていてディスプレイに表示できませんが、アプリケーションソフトのバグフィックス後に、Target language を Verilog にしても動作しました。論理合成後の機能シミュレーションを行うときに強瀬された EDIF からVerilog に変換するツールがバグっているようです。

論理合成、インプリメント、ビットストリームの生成を行ったところ、成功した。
リソース使用量は以前と変化が無い。今回のProject Summary はキャプチャするのを忘れてしまったので、以前のVivado 2016.2 のときのProject Summary を貼っておく。
cam_disp_axis_6_160821.png

ハードウェアをエクスポートして、SDKを立ち上げた。
cam_disp_hls プロジェクトを作成し、cam_disp_hls.c をコピー&ペーストした。
ビットストリームをZYBO にダウンロードして、cam_disp_hls.elf を起動したが、動作しなかった。
DMA_Read_IP_35_170319.png

Vivado 2016.4 になって変わったVivado Analyzer を試してみようということで、ブロックデザインでDMA_Read_addr_0 のm_axi_in_r と outs とDMA_Write_0 の m_axi_out_r を選択して、右クリックし右クリックメニューからDebug を選択した。
DMA_Read_IP_36_170319.png

選択したラインにデバックマークが付き、上に Run Connection Automation が出るので、クリックした。
DMA_Read_IP_37_170319.png

Run Connection Automation が表示された。OK ボタンをクリックした。
DMA_Read_IP_38_170319.png

system_ila が挿入された。ILA コアがブロックデザイン上に挿入されるようになった。
DMA_Read_IP_39_170319.png

論理合成、インプリメント、ビットストリームの生成を行った。結果を示す。
DMA_Read_IP_40_170319.png
全体的にリソース使用量が増えている。これはILA コアを入れたので、当然と言えば当然だ。

Vivado Analyzer はPL の回路にクロックが来ないと起動できない。ソフトウェアを起動しないと回路にクロックが供給されないので、Vivado Analyzer は起動しない。
と言う訳で、ZYBO にビットストリームをダウンロードしてから、cam_disp_hls.elf を起動した。
DMA_Read_IP_41_170319.png

その後で、Flow Navigator -> Program and Debug -> Open Hardware Manager -> Auto Connect を選択した。
DMA_Read_IP_42_170319.png

Hardware Manager が立ち上がった。
DMA_Read_IP_43_170319.png

Status ペインで Run trigger immediate for this ILA core をクリックすると、すぐに波形がキャプチャされる。
DMA_Read_IP_44_170319.png

Vivado 2016.4 では、AXI バスはステータスを表示してくれるようだ。トランザクションが全く見えなかった。
DMA_Read_IP_47_170319.png

よくわからなかったので、DMA_Write_0 の ins も追加した。
DMA_Read_IP_48_170319.png

論理合成、インプリメント、ビットストリームの生成を行った。成功した。
Project Summary を示す。
DMA_Read_IP_49_170319.png

Hardware Manager で net_slot_3_axis_tvalid = R (DMA_Write_0 の ins)でトリガをかけて Run trigger for this ILA core をクリックした。
DMA_Read_IP_50_170319.png

DMA_Write_0 の ins と m_axi_out_r は波形が出力されていることが分かった。
DMA_Read_IP_51_170319.png

次に、net_slot_0_axi_arvalid = R (DMA_Read_addr_0 の m_axi_in_r)でトリガをかけたが掛からなかった。
DMA_Read_IP_52_170319.png

これは、電源ON の少し間だけのみ DMA_Read_addr_0 の m_axi_in_r と outs が動作しているかもしれない。ということで、Hello_World プロジェクトを作成し、これを起動して、PL へクロックを供給してから cam_disp_hls.elf を起動することにした。

Hello_World プロジェクトを作成した。起動した。
DMA_Read_IP_53_170319.png

Flow Navigator -> Program and Debug -> Open Hardware Manager -> Auto Connect を選択し、Hardware Manager を起動する。
net_slot_0_axi_arvalid = R (DMA_Read_addr_0 の m_axi_in_r)でトリガをかけた。
DMA_Read_IP_54_170319.png

これで、SDK で、cam_disp_hls.elf を起動した。すると、トリガがかかってDMA_Read_addr_0 のm_axi_in_r と outs の波形が表示された。
DMA_Read_IP_55_170319.png

これを見るときちんとDMA_Read_addr_0 の m_axi_in_r はAXI4 Master Read ができていて、AXI4-Stream の outs にもきちんと出力できているように見える。しかし、途中で tready が 1 から 0 になってしまっている。これは、AXI4-Stream 版のビットマップ・ディスプレイ・コントローラのピクセル用FIFO がフルになってしまっているからだと思われる。
AXI4-Stream 版のビットマップ・ディスプレイ・コントローラがおかしい可能性が出てきた。
  1. 2017年03月20日 07:16 |
  2. ZYBO
  3. | トラックバック:0
  4. | コメント:0