FC2カウンター FPGAの部屋 Vivado HLS 2014.4で生成したラプラシアンフィルタIPをシミュレーション1
FC2ブログ

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

FPGAの部屋

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

Vivado HLS 2014.4で生成したラプラシアンフィルタIPをシミュレーション1

Vivado HLS 2014.1で生成したラプラシアンフィルタIPをシミュレーション6(シミュレーション)”で Vivado HLS 2014.1 で新たに作製したラプラシアンフィルタIP が動作しなったので、今度は、Vivado HLS 2014.4 で作製したラプラシアンフィルタIP をシミュレーションすることにした。

Vivado HLS 2014.1で生成したラプラシアンフィルタIPをシミュレーション5(シミュレーション用プロジェクトの作製)”と同様にVivado 2014.4 のプロジェクトを作製した。

Vivado 2014.4 で ZYBO 用の lap_fil_hls_14_4 プロジェクトを作製した。
lap_fil_hls_14_4_1_150317.png

lap_fil_hls_sim ブロック・デザインを作製した。完成した状態のブロック・デザインを示す。
lap_fil_hls_14_4_2_150317.png

前回との違いは、rst_clk_wiz_100M IP の dcm_locked を 1 に固定したことだ。違いは無いと思う。その他の IP は前回のものをそのまま使用した。

mem_sim_axi_slave_0 の DEFAULT_VALUE は INCREMENT に設定した。前回もそうだが、C_S_Axi_Id_Width を 2 にしてある。こうしないとブロック・デザインの Validate Design でエラーになる。
lap_fil_hls_14_4_3_150317.png

Address Editor ウインドウの内容を下に示す。前回は、lap_filter_axim_0 のData は mem_sim_axi_slave_0 の 1つだけだったが、今回は、Data_m_axi_cam_fb と Data_m_axi_lap_fb の 2 つができていて、それぞれの下に mem_sim_axi_slave_0 が入っている。
lap_fil_hls_14_4_4_150317.png

レジスタ設定用IP の reg_set_axi_lite_master_0 の設定ファイルである reg_set.txt の内容を示す。フォーマットはアドレス、データで、オールFのアドレスで reg_set.txt の読み込みを停止する。

44A00000
00000000
44A00004
00000000
44A00008
00000001
44A00018
01000000
44A00020
02000000
44A00000
00000001
ffffffff


これで、Flow Navigator から Simulation -> Run Simulation -> Run Behevioral Simulation を選択して論理シミュレーションを行った。
lap_fil_hls_14_4_5_150317.png

波形はすべてVivado HLS 2014.4 で作製したラプラシアンフィルタIPの入力、出力ポートを見ている。レジスタ設定用の s_axi_BUS_AXI4LS と画像データをDMA Read する m_axi_cam_fb、ラプラシアンフィルタ処理後の画像データをDMA Write する m_axi_lap_fb だ。
その内の、s_axi_BUS_AXI4LS のレジスタ設定処理を下に示す。
lap_fil_hls_14_4_6_150317.png

次に、ラプラシアンフィルタ処理後の画像データをDMA Write する m_axi_lap_fb を見ると 20us 辺りで、WREADY が 0 になって、WLAST が出力されても、AWVALID がアクティブにならずに 1 のままである。これはおかしい。
lap_fil_hls_14_4_7_150317.png

何処がおかしいかというと、ラプラシアンフィルタIPがつながっている AXI Interconnect だ。

ブロック・デザインに戻って、lap_filter_axim_0_axi_periph をダブルクリックして、Interconnect Optimization Strategy を Custom から Minimize Area に変更した。
lap_fil_hls_14_4_8_150317.png

もう一度、論理シミュレーションを行った。
今度は、 m_axi_lap_fb はきちんとしたAXIバスの処理がされている。問題ないようだ。
lap_fil_hls_14_4_9_150317.png

画像データをDMA Read する m_axi_cam_fb を見ると、トランザクションが表示されていた。
lap_fil_hls_14_4_10_150317.png

更に、10 ms シミュレーションを行うと、最初は3回 m_axi_cam_fb のDMA Read を行った後に、m_axi_lap_fb の DMA Write
が行われるはずだが、行われていない。その後は、1回 m_axi_cam_fb のDMA Read を行った後に、m_axi_lap_fb の DMA Write が行われるはずだが、それも行われていない。
lap_fil_hls_14_4_11_150317.png

この辺りが、ラプラシアンフィルタの変換に約27秒も掛かる原因なのか?それともVivado のシミュレーションがおかしいのかまだわからない?

(追記) Vivado HLS で合成したラプラシアンフィルタのバグの原因は、古いバグありラプラシアンフィルタのCソースコードを使用したためでした。正しいラプラシアンフィルタのCソースコードについては、”Vivado HLS 2014.4で生成したラプラシアンフィルタIPをシミュレーション3(原因が分かった)”をご覧ください。
但し、AXI Interconnect の不具合の原因は別です。

AXI Interconnect の Interconnect Optimization Strategy を Custom にしておくと明らかにシミュレーション結果がおかしい。しかし、AXI Interconnect の Interconnect Optimization Strategy を Custom でも、論理合成、インプリメントして実機で試すとデッドロックはせずにラプラシアンフィルタ処理は終了するので、AXIバスの動作としてはおかしくない。
つまり、シミュレーションでは動作がおかしいが、論理合成、インプリメントすると問題ないのかもしれない?

一度、AXI Interconnect の Interconnect Optimization Strategy を Minimize Area に変更して、実機で確認してみたいと思う。
  1. 2015年03月17日 05:40 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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