FC2カウンター FPGAの部屋 XF_8UC3 を XF_8UC4 に変換する xf_8uc3_2rgb プロジェクトを作成する2
fc2ブログ

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

FPGAの部屋

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

XF_8UC3 を XF_8UC4 に変換する xf_8uc3_2rgb プロジェクトを作成する2

XF_8UC3 を XF_8UC4 に変換する xf_8uc3_2rgb プロジェクトを作成する1”の続き。

XF_8UC3 を XF_8UC4 に変換する xf_8uc3_2rgb プロジェクトを作成してみようと思うということで、前回はソースコードとテストベンチを貼って、 Vitis HLS 2020.2 のプロジェクトを示した。今回は、 C シミュレーション、 C コードの合成、 C/RTL 協調シミュレーション、 Export RTL を行う。

Vitis HLS 2020.2 の xf_8uc3_2rgb プロジェクトの設定を示す。
Vitis HLS 2020.1 から Vitis HLS に同梱される OpenCV のインストールは無いということだ。よって、OpenCV を使用しているテストベンチのインクルード・パスとリンク・パスの設定が必要となる。
Project メニューから Project Settings... を選択して、ダイアログを表示させる。
Simulation をクリックして、 CFLAGS にインストール済みの OpenCV のインクルード・パスを入力する。

-I/usr/local/include


Linker Flagに

-L/usr/local/lib -lopencv_core -lopencv_imgcodecs -lopencv_imgproc

を入力する。
Input Argument に画像のファイル名

128x128_blue123.png

を入力する。
xf_8uc3_2rgb_2_210114.png

C シミュレーションから。ここでは、

#define DEBUG

のコメントアウトを外す。
結果を示す。
xf_8uc3_2rgb_3_210114.png

最初は CV_8UC3 のフォーマットの 10 個の入力値が表示され、その下の 10 個の出力値が CV_8UC4 で出力されていることが分かる。

次に、

#define DEBUG

のコメントアウトを行う。
xf_8uc3_2rgb_4_210114.png

これで C コードの合成を行った。結果を示す。
xf_8uc3_2rgb_5_210114.png
xf_8uc3_2rgb_6_210114.png

レイテンシは 480053 クロックだった。 LOOP_TRIPCOUNT が 480000 だったので、レイテンシは良い感じだ。

C/RTL 協調シミュレーションを行ったが、当初 INTERFACE 指示子の m_axi オプションの depth が画像ピッタリのサイズの指定ではなかったため当初はエラーになってしまった。
xf_8uc3_2rgb_8_210114.png

このようなエラーが起こった場合は、 INTERFACE 指示子の m_axi オプションの depth が画像ピッタリのサイズになっているか?をチェックすることをお勧めする。なお、Vivado HLS 2019.2 と Vitis HLS 2020.1 は Vitis HLS 2020.2 よりも進んで、C/RTL 協調シミュレーションの波形は出力されるが、最終的にエラーになる。

さて、C/RTL 協調シミュレーションを行うには、今回は、画像ファイルのファイル名を指定する必要がある。
C/RTL 協調シミュレーションを開始したら、 Co-Simulation Dialog が表示されるので、 Input Argument に画像ファイルの名前を入れる。波形を観察するために Dump Trace も all にしておく。
xf_8uc3_2rgb_7_210114.png

結果を示す。
xf_8uc3_2rgb_10_210114.png

レイテンシは 16446 クロックだった。画像の総ピクセル数は 16384 なので、優秀だ。

C/RTL 協調シミュレーションの波形を示す。
xf_8uc3_2rgb_11_210114.png

WVALID がほとんど 1 なのが分かる。

波形の最初の部分を拡大してみよう。
xf_8uc3_2rgb_12_210114.png

無事に CV_8UC4 に変換されていることが分かる。

Export RTL を行って、IP にした。結果を示す。
xf_8uc3_2rgb_9_210114.png

AXI4 Lite のレジスタマップを示す。

// ==============================================================
// Vitis HLS - High-Level Synthesis from C, C++ and OpenCL v2020.2 (64-bit)
// Copyright 1986-2020 Xilinx, Inc. All Rights Reserved.
// ==============================================================
// control
// 0x00 : Control signals
//        bit 0  - ap_start (Read/Write/COH)
//        bit 1  - ap_done (Read/COR)
//        bit 2  - ap_idle (Read)
//        bit 3  - ap_ready (Read)
//        bit 7  - auto_restart (Read/Write)
//        others - reserved
// 0x04 : Global Interrupt Enable Register
//        bit 0  - Global Interrupt Enable (Read/Write)
//        others - reserved
// 0x08 : IP Interrupt Enable Register (Read/Write)
//        bit 0  - enable ap_done interrupt (Read/Write)
//        bit 1  - enable ap_ready interrupt (Read/Write)
//        others - reserved
// 0x0c : IP Interrupt Status Register (Read/TOW)
//        bit 0  - ap_done (COR/TOW)
//        bit 1  - ap_ready (COR/TOW)
//        others - reserved
// 0x10 : Data signal of ap_return
//        bit 31~0 - ap_return[31:0] (Read)
// 0x18 : Data signal of p_src
//        bit 31~0 - p_src[31:0] (Read/Write)
// 0x1c : reserved
// 0x20 : Data signal of rows
//        bit 31~0 - rows[31:0] (Read/Write)
// 0x24 : reserved
// 0x28 : Data signal of cols
//        bit 31~0 - cols[31:0] (Read/Write)
// 0x2c : reserved
// 0x30 : Data signal of p_dst
//        bit 31~0 - p_dst[31:0] (Read/Write)
// 0x34 : reserved
// (SC = Self Clear, COR = Clear on Read, TOW = Toggle on Write, COH = Clear on Handshake)

  1. 2021年01月15日 04:36 |
  2. Vitis_Vision
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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