”
Vitis Vision Library を使用する時の Vitis HLS 2020.2 の設定方法(dilation 編 1)”の続き。
前回は、
Vitis Vision Library User Guide の Getting Started with HLS に従って、 Vitis HLS 2020.2 の dilation プロジェクトを作成し、Vitis Vision を使用する上での設定を行った。今回は、Vitis Vision Library の dilation プロジェクトの C シミュレーション、 C コードの合成などを行っていこう。
前回、書いていなかったが、 dilation の合成される関数 dilation_accel() の動作を説明する。
1. xf::cv::Array2xfMat() で配列から DMA したピクセルデータを xf::cv::Mat 形式の画像に変換する。
2. その xf::cv::Mat 形式の画像に対して xf::cv::dilate() で 膨張フィルタ処理を行う。
3. 膨張フィルタ処理された xf::cv::Mat の画像を DMA して配列に書く。
つまり、メモリベースで画像をやり取りしている。後で、 xf::cv::AXIvideo2xfMat() と xf::cv::xfMat2AXIVideo() を使用する AXI4-Stream ベースの Vitis Vision Library を使用した関数を書いてみよう。
それでは、 C シミュレーションを行った。
Project メニューから Run C Simulation を選択し、 C シミュレーションを実行した。
C Simulation Dialog が表示された。Input Arguments に 128x128.png がフルパスで入っている。

C シミュレーションが終了した。成功のようだ。

しかし、 dilation/solution1/csim/build ディレクトリの hw_out.jpg を見ると出力がおかしいようだ?
ソフトウェアの OpenCV の結果である out_ocv.jpg と同じ結果であるはず?
out_error.jpg は違いが見えないのだが?

C シミュレーション結果はおかしいと思うのだが、 C コードの合成をやってみた。
まずは合成の Top Function を設定する必要があるので、Project メニューから Project Settings... をクリックする。
Project Settings (dilation) ダイアログが開く。
Synthesis をクリックして、 Top Function に dilation_accel を設定した。
Solution メニューから Run C Synthesis -> C Synthesis を選択し、 C Synthesis を実行した。



次に C/RTL 協調シミュレーションを行った。
Solution メニューから Run C/RTL Cosimulation を選択した。
Co-simulation Dialog が表示された。
Input Arguments に 128x128.png をフルパスで指定した。
Dump Trace を all に設定した。

C/RTL 協調シミュレーションが終了した。

Latency は 17967 クロックだった。 128 x 128 ピクセルの画像なので、総画像数は 16384 ピクセルだった。
17967 クロック / 16384 ピクセル ≒ 1.10 クロック/ピクセルの性能だった。まずまずだろうと思う。
dilation/solution1/sim/wrapc ディレクトリの hw_out.jpg も C シミュレーションと同様の結果だった。

RTL シミュレーション結果の dilation/solution1/sim/wrapc_pc ディレクトリの hw_out.jpg も C シミュレーションと同様の結果だった。

いよいよ、 dilation がおかしい気がする。
最後に Export RTL をやってみよう。
Solution メニューから Export RTL を選択した。
Export RTL ダイアログが開く。
Vivado synthsis, place and route にチェックを入れる。こうすると IP 単体ではあるが、 Vivado を起動し、配置配線を行って、レポートを作成させよう。

Export RTL の結果を示す。
- 2020年12月28日 04:22 |
- Vitis_Vision
-
| トラックバック:0
-
| コメント:0