FC2カウンター FPGAの部屋 Alveo
fc2ブログ

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

FPGAの部屋

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

ACRiルームの Alveo U50 で Emulation-SW と Emulation-HW を試す2

ACRiルームの Alveo U50 で Emulation-SW と Emulation-HW を試す1”の続き。

Assistant ウインドウをすべて展開した。
Emulation-SW, Emulation-HW 共に、vadd-Default の下に Run Summary があるのが分かる。
ACRi_U50_99_201114.png

Emulation-SW -> vadd-Default -> Run Summary (xclbin) を右クリックし、右クリックメニューから Open in Vitis Analyzer を選択した。
ACRi_U50_100_201114.png

Run Summary ウインドウが表示された。
ACRi_U50_101_201114.png

Profile Summary を示す。
ACRi_U50_102_201115.png

Application Timeline を示す。
ACRi_U50_103_201115.png

波形がある部分を拡大した。
ACRi_U50_104_201115.png

更に拡大した。
ACRi_U50_105_201115.png

次に、Emulation-HW -> vadd-Default -> Run Summary (binary_container_1.xclbin) を右クリックし、右クリックメニューから Open in Vitis Analyzer を選択した。
ACRi_U50_106_201115.png

Run Summary ウインドウが表示された。
ACRi_U50_107_201115.png

System Diagram を示す。
ACRi_U50_108_201115.png

Platform Diagram を示す。
ACRi_U50_109_201115.png

Run Guidance の一部を示す。
ACRi_U50_110_201115.png

Profile Summary を示す。
ACRi_U50_111_201115.png

Application Timeline を示す。
ACRi_U50_112_201115.png

拡大した。
ACRi_U50_113_201115.png
  1. 2020年11月15日 05:03 |
  2. Alveo
  3. | トラックバック:0
  4. | コメント:0

ACRiルームの Alveo U50 で Emulation-SW と Emulation-HW を試す1

今までは Ultra96V2 の自作の Vitis アクセラレーション・プラットフォームを使ってきたので、QEMU が設定されていなかった。よって、 Emulation-SW と Emulation-HW を試したことが無かった。今回は、ACRiルームの Alveo U50 を使用するので、 Emulation-SW と Emulation-HW を試してみたい。

ACRiルームの Alveo U50 で ChipScope Debug を試す2”で vadd に wait_for_enter() 関数を追加したが、それをコメントアウトした。
vadd の Emulation-SW をビルドした。
下の図に Emulation-SW をビルドしようと、Assistant ウインドウで Emulation-SW を右クリックし、右クリックメニューから Build を選択した様子を示す。
ACRi_U50_92_201113.png

Emulation-SW のビルドはすぐに終わったが、Emulation-HW のビルドは Hardware と同様に遅かった。

さて、実行してみよう。まずは、 Emulation-SW から実行してみよう。
Assistant ウインドウで Emulation-SW を右クリックし、右クリックメニューから vadd-Default を選択した。
ACRi_U50_93_201113.png

TEST PASSED が表示された。実行時間は短い。
ログを示す。

[Console output redirected to file:/home/u_marsee101/Vitis_Work/U50/2019.2/vadd/Emulation-SW/vadd-Default.launch.log]
Loading: '../binary_container_1.xclbin'
TEST PASSED



次に、 Emulation-HW をやってみる。
Assistant ウインドウで Emulation-SW を右クリックし、右クリックメニューから Build を選択してビルド成功した。
ACRi_U50_95_201113.png

Assistant ウインドウで Emulation-HW を右クリックし、右クリックメニューから vadd-Default を選択した。
TEST PASSED が表示された。実行時間はEmulation-SW よりも長い。
ACRi_U50_96_201113.png

ログを示す。

[Console output redirected to file:/home/u_marsee101/Vitis_Work/U50/2019.2/vadd/Emulation-HW/vadd-Default.launch.log]
Loading: '../binary_container_1.xclbin'
INFO: [HW-EM 01] Hardware emulation runs simulation underneath. Using a large data set will result in long simulation times. It is recommended that a small dataset is used for faster execution. The flow uses approximate models for DDR memory and interconnect and hence the performance data generated is approximate.
TEST PASSED
INFO: [HW-EM 06-0] Waiting for the simulator process to exit
INFO: [HW-EM 06-1] All the simulator processes exited successfully



vadd/Emulation-SW ディレクトリを示す。
ACRi_U50_97_201114.png

vadd/Emulation-HW ディレクトリを示す。
ACRi_U50_98_201114.png
  1. 2020年11月14日 05:02 |
  2. Alveo
  3. | トラックバック:0
  4. | コメント:0

ACRiルームの Alveo U50 で ChipScope Debug を試す2

ACRiルームの Alveo U50 で ChipScope Debug を試す1”の続き。

前回は、”Vitis 2020.1 でカーネルの ChipScope Debug をやってみた”で試した ChipScope Debug を ACRi ルームの Alveo U50 でもうまく行くかどうか?を確かめたかったということで、”Vitis 2020.1 でカーネルの ChipScope Debug をやってみた”と同様にやってみたが、Alveo U50 が JTAG で接続されていないようだった。今回は、”Debugging Your Applications on an Alveo Data Center Accelerator Card Using ChipScope”を見つけたので、それを参照してやってみよう。

参照するのは、、”Debugging Your Applications on an Alveo Data Center Accelerator Card Using ChipScope”と
日本語では、”Vitis 統合ソフトウェア開発プラットフォーム 2020.1 の XVC およびハードウェア サーバーの実行”だ。

Debugging Your Applications on an Alveo Data Center Accelerator Card Using ChipScope”によると、デバックモードで途中でブレークポイントを作成して、ソフトウェアを停止するようになっているが、ACRiルームのAlveo U50 でデバックモードにすると、ソースコード・デバックが行えずに、なぜかDisassemble に落ちてしまう。
ACRi_U50_85_201113.png

そこで、”Vitis 統合ソフトウェア開発プラットフォーム 2020.1 の カーネル開始前に ILA トリガーを追加”を参照して、wait_for_enter() 関数を追加した。
ACRi_U50_86_201113.png

vadd アクセラレーション・アプリケーションを実行すると、wait_for_enter() 関数が実行されて、”Press ENTER to continue after setting up ILA trigger...”で停止した。
ACRi_U50_87_201113.png

停止後に、、”Debugging Your Applications on an Alveo Data Center Accelerator Card Using ChipScope”によると、
debug_hw --xvc_pcie /dev/xvc_pub. --hw_server
を実行するということなので、
ls /dev
で見たところ、xvc_pri.m0 があったので、それではないだろうか?
ACRi_U50_88_201113.png

そこで、
debug_hw --xvc_pcie /dev/xvc_pri.m0 --hw_server
を実行した。
ACRi_U50_89_201113.png

ところが、エラーになってしまった。

u_marsee101@as004:~$ debug_hw --xvc_pcie /dev/xvc_pri.m0 --hw_server
launching xvc_pcie...
/tools/Xilinx/Vivado/2019.2/bin/xvc_pcie -d /dev/xvc_pri.m0 -s TCP::10200
launching hw_server...
/tools/Xilinx/Vivado/2019.2/bin/hw_server -sTCP::3121

****************************
*** Press Ctrl-C to exit ***
****************************

ERROR: xvc_pcie process terminated with error code 2.


このエラーを検索すると、”Can't run debug_hw”が見つかった。
この資料によると、”この問題はまもなくリリースされる新しいXRTで対処されます。”とのことでした。。。 orz...

ちなみに
xbutil scan
の結果を示す。
ACRi_U50_90_201113.png

u_marsee101@as004:~$ xbutil scan
INFO: Found total 1 card(s), 1 are usable
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
System Configuration
OS name:    Linux
Release:    3.10.0-957.27.2.el7.x86_64
Version:    #1 SMP Mon Jul 29 17:46:05 UTC 2019
Machine:    x86_64
Model:      To Be Filled By O.E.M.
CPU cores:  16
Memory:     128432 MB
Glibc:      2.27
Distribution:   Ubuntu 18.04.4 LTS
Now:        Fri Nov 13 04:34:39 2020
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
XRT Information
Version:    2.6.655
Git Hash:   2d6bfe4ce91051d4e5b499d38fc493586dd4859a
Git Branch: 2020.1
Build Date: 2020-05-22 12:05:03
XOCL:       2.6.655,2d6bfe4ce91051d4e5b499d38fc493586dd4859a
XCLMGMT:    2.6.655,2d6bfe4ce91051d4e5b499d38fc493586dd4859a
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 [0] 0000:01:00.1 xilinx_u50_gen3x16_xdma_201920_3 user(inst=129)
WARNING: Kernel verison 3.10.0-957.27.2.el7.x86_64 is not officially supported. 5.3.0 is the latest supported version


XRTのバージョンの 2.6.655 は”Can't run debug_hw”と同じだった。残念。。。

最後に Vitis IDE で Enter キーを押すと、TEST PASSED が表示された。
ACRi_U50_91_201113.png
  1. 2020年11月13日 04:41 |
  2. Alveo
  3. | トラックバック:0
  4. | コメント:0

ACRiルームの Alveo U50 で ChipScope Debug を試す1

久しぶりに ACRi ルームの Alveo U50 を使ってみることにした。”Vitis 2020.1 でカーネルの ChipScope Debug をやってみた”で試した ChipScope Debug を ACRi ルームの Alveo U50 でもうまく行くかどうか?を確かめたかったからだ。

まずは、”ACRi ルームへようこそ!”のページから Alveo U50 の予約を取った。今回は、予約時間が過ぎていても予約取れるようになっていて、とっても便利になっている。とても良い。。。

ACRi ルームの Alveo U50 を使ってみた1(Vector Addition の実行)”を参照しながら、Tera Term を立ち上げて gw.acri.c.titech.ac.jp に接続し、リモートデスクトップ接続を立ち上げて、as004 に入れた。久しぶりなので、ドキドキした。接続できてよかった。。。

Activities をクリックして、ファイル・ブラウザとターミナルを起動した。

ターミナルで、XRT と Vitis 2019.2 の環境を設定し、Vitis を起動した。
source /opt/xilinx/xrt/setup.sh
source /tools/Xilinx/Vitis/2019.2/settings64.sh
vitis

ACRi_U50_73_201112.png

Vitis 2019.2 の Assistant ウインドウの vadd_system を右クリックし、右クリックメニューから Settings... を選択する。
ACRi_U50_74_201112.png

System Project Settings ダイアログが開く。
vadd_system -> vadd -> Hardware -> binary container_1 -> krnl_vadd をクリックする。
ACRi_U50_75_201112.png

krnl_vadd の ChipScope Debug のチェックボックスをクリックすると、すべての ChipScope Debug チェックボックスにチェックが入る。
ACRi_U50_76_201112.png

Apply ボタンをクリックしてから Apply and Clod ボタンをクリックする。

Vitis 2019.2 の Assistant ウインドウの vadd_system -> Hardware を右クリックし、右クリックメニューから Build を選択してビルドする。
ACRi_U50_77_201112.png

ビルドしているところだ。
ACRi_U50_78_201112.png

ビルドが成功した。
ACRi_U50_79_201112.png

Assistant ウインドウの vadd_system -> vadd -> Hardware -> binary container_1 を右クリックし、右クリックメニューから Open Vivado Project を選択する。
ACRi_U50_80_201112.png

Vivado 2019.2 が起動した。
ACRi_U50_81_201112.png

Assistant ウインドウの vadd_system -> vadd -> Hardware を右クリックし、右クリックメニューから Run -> vadd-Default (OpenCL Application) を選択する。
ACRi_U50_82_201112.png

TEST PASSED した。
ACRi_U50_83_201112.png

Vivado で PROGRAM AND DEBUG -> Open Hardware Manager -> Open Target をクリックして、Auto Connect を選択したが、Vivado Analyzer 画面は表示されなかった。やはり、JTAG では接続されていないようだ。
ACRi_U50_84_201112.png
  1. 2020年11月12日 05:11 |
  2. Alveo
  3. | トラックバック:0
  4. | コメント:0

ACRi ルームの Alveo U50 を使ってみた4(CNN を動作させてみた)

ACRi ルームの Alveo U50 を使ってみた3(ラプラシアンフィルタ)”の続き。

前回は、ACRi ルームの Alveo U50 を使用して、ラプラシアンフィルタを実装して動作させることができた。今回は、CNN を ACRi ルームの Alveo U50 で動作させてみよう。

今回実装する CNN は横 56 ピクセル x 10 行の画像から白線を検出して、右に行くか、直進するか左に行くの 3 出力を出力する CNN だ。これは、以前 Ultra96 ボードでカーネルを RTL カーネルとして使用したプロジェクトをそのまま使用している。つまり、Vivao HLS で作成した XO ファイルをVitis プロジェクトでカーネルとして使用しているわけだ。詳しくは、”テンプレートで書いた畳み込みニューラルネットワークをRTLカーネルとしてVitisで実装する5(Vitis 編)”辺りを参照して欲しい。

なお、余談になるが、今回のブログに書くに当たって、デバックしている途中で、ソースコードのバグも発見した。それは、任意精度固定データ型の量子化モードとオーバーフローモードが2番めの全結合層の重みとバイアスで関数の定義と違っていたことだ。Ultra96用のプロジェクトではこれでも通ってしまったようだが、今回の Alveo U50 ではエラーになった。

以前のUltra96 ボードでカーネルを RTL カーネルとして使用した Vivado HLS プロジェクトは”テンプレートで書いた畳み込みニューラルネットワークをRTLカーネルとしてVitisで実装する1(Vivado HLS 編 1)”を参照して欲しい。

さて、ACRi ルームの Alveo U50 が搭載されたマシンにログインして、進めていこう。この辺りの手順は”ACRi ルームの Alveo U50 を使ってみた1(Vector Addition の実行)”を参照して欲しい。

まずは、リモートデスクトップ接続した状態で、XRT の環境を設定する。
source /opt/xilinx/xrt/setup.sh

Vitis 2019.2 の環境を設定する。
source /tools/Xilinx/Vitis/2019.2/settings64.sh

ACRi ルームの Alveo U50 を使ってみた1(Vector Addition の実行)”のVivado HLS プロジェクトを ACRi ルームのファイルサーバーに SFTP でアップロードした。

Vivado HLS で新しいSolution を作成し、FPGA の型番を xcvu35p-fsvh2014-2-e に設定した。( IDA さん、教えていただいて、ありがとうございます)
C コードの合成をしたところ成功した。なお、動作周波数は 300 MHz とした。
ACRi_U50_66_200822.png
ACRi_U50_67_200822.png

すごい。。。ほとんどリソース消費していない。これだと、だいぶ大きな CNN でもいけるんじゃないだろうか?楽しみだ。マシンの性能も不安が無いし、とっても心強い。

Export RTL を行うと、all_layers_dnn.xo ファイルが生成された。
ACRi_U50_68_200822.png

all_layers_dnn.xo ファイルをカーネルに指定した Vitis 2019.2 のプロジェクトを作成した。やはり、vector addition のテンプレートを使用しないと実行時に失敗するので、使用した。もうビルドまで終了している。
ACRi_U50_69_200822.png

Vitis 2019.2 のプロジェクト all_layers_template2/src ディレクトリの中身を示す。
ACRi_U50_70_200822.png

Run Configuration を作成した。なお、[Run Configurations] ウィンドウで [Environment] タブに移動し、テーブルに設定されている LD_LIBRARY_PATH 変数を削除してある。
ACRi_U50_71_200822.png

実行したところ、成功した。
ACRi_U50_72_200822.png

ログを示す。

[Console output redirected to file:/home/u_marsee101/Vitis_Work/U50/2019.2/all_layers_template2/Hardware/all_layers_template2-Default.launch.log]
Using FPGA binary file specfied through the command line: ../binary_container_1.xclbin
Found Platform
Platform Name: Xilinx
Loading: '../binary_container_1.xclbin'
hw_error: i = 0 output = 0 t_test_num = 1
dot2[0] = 0.00000000 dot2_soft[0] = -6.89110470
dot2[1] = 0.00000000 dot2_soft[1] = 3.03815722
dot2[2] = 0.00000000 dot2_soft[2] = -3.19690108

hw_error: i = 25 output = 2 t_test_num = 1
sw_error: i = 25 output_soft = 2 t_test_num = 1
dot2[0] = 0.25000000 dot2_soft[0] = -3.77501726
dot2[1] = 0.12500000 dot2_soft[1] = -0.13269189
dot2[2] = 0.25000000 dot2_soft[2] = 1.61074853

hw_error: i = 30 output = 2 t_test_num = 1
sw_error: i = 30 output_soft = 2 t_test_num = 1
dot2[0] = 0.43750000 dot2_soft[0] = -4.67336369
dot2[1] = 0.40625000 dot2_soft[1] = 0.12951475
dot2[2] = 0.43750000 dot2_soft[2] = 1.71587336

sw_error: i = 31 output_soft = 2 t_test_num = 1
dot2[0] = -0.25000000 dot2_soft[0] = -5.31440449
dot2[1] = 0.90625000 dot2_soft[1] = 0.69655895
dot2[2] = -0.25000000 dot2_soft[2] = 1.00723171

sw_error: i = 35 output_soft = 2 t_test_num = 1
dot2[0] = 0.43750000 dot2_soft[0] = -5.15462875
dot2[1] = 0.50000000 dot2_soft[1] = 0.19586089
dot2[2] = 0.43750000 dot2_soft[2] = 1.79063916

sw_error: i = 36 output_soft = 2 t_test_num = 1
dot2[0] = -0.25000000 dot2_soft[0] = -5.64889669
dot2[1] = 1.03125000 dot2_soft[1] = 0.69646239
dot2[2] = -0.25000000 dot2_soft[2] = 1.09402716

sw_error: i = 40 output_soft = 2 t_test_num = 1
dot2[0] = 0.09375000 dot2_soft[0] = -5.31394196
dot2[1] = 0.59375000 dot2_soft[1] = 0.30034199
dot2[2] = 0.09375000 dot2_soft[2] = 1.52586949

sw_error: i = 41 output_soft = 2 t_test_num = 1
dot2[0] = 0.06250000 dot2_soft[0] = -5.94443941
dot2[1] = 0.87500000 dot2_soft[1] = 0.61903512
dot2[2] = 0.06250000 dot2_soft[2] = 1.28180122

sw_error: i = 42 output_soft = 2 t_test_num = 1
dot2[0] = 0.37500000 dot2_soft[0] = -7.44187164
dot2[1] = 1.31250000 dot2_soft[1] = 1.10615981
dot2[2] = 0.37500000 dot2_soft[2] = 1.35738707

sw_error: i = 45 output_soft = 2 t_test_num = 1
dot2[0] = 0.18750000 dot2_soft[0] = -5.92508411
dot2[1] = 0.68750000 dot2_soft[1] = 0.44851223
dot2[2] = 0.18750000 dot2_soft[2] = 1.43742454

sw_error: i = 46 output_soft = 2 t_test_num = 1
dot2[0] = 0.90625000 dot2_soft[0] = -7.76649952
dot2[1] = 1.06250000 dot2_soft[1] = 0.82863915
dot2[2] = 0.90625000 dot2_soft[2] = 1.88942850

sw_error: i = 47 output_soft = 2 t_test_num = 1
dot2[0] = 0.75000000 dot2_soft[0] = -9.50911713
dot2[1] = 1.75000000 dot2_soft[1] = 1.48399019
dot2[2] = 0.75000000 dot2_soft[2] = 1.85759318

hw_error: i = 75 output = 2 t_test_num = 1
sw_error: i = 75 output_soft = 2 t_test_num = 1
dot2[0] = 2.12500000 dot2_soft[0] = -4.04238653
dot2[1] = -1.03125000 dot2_soft[1] = -1.22402656
dot2[2] = 2.12500000 dot2_soft[2] = 3.36929369

hw_error: i = 76 output = 2 t_test_num = 1
sw_error: i = 76 output_soft = 2 t_test_num = 1
dot2[0] = 0.40625000 dot2_soft[0] = -4.09871578
dot2[1] = -0.21875000 dot2_soft[1] = -0.46985394
dot2[2] = 0.40625000 dot2_soft[2] = 1.61257589

hw_error: i = 80 output = 2 t_test_num = 1
sw_error: i = 80 output_soft = 2 t_test_num = 1
dot2[0] = 1.78125000 dot2_soft[0] = -4.33292818
dot2[1] = -0.75000000 dot2_soft[1] = -0.96692348
dot2[2] = 1.78125000 dot2_soft[2] = 2.98383069

hw_error: i = 81 output = 2 t_test_num = 1
sw_error: i = 81 output_soft = 2 t_test_num = 1
dot2[0] = 0.09375000 dot2_soft[0] = -4.40864801
dot2[1] = 0.06250000 dot2_soft[1] = -0.15780880
dot2[2] = 0.09375000 dot2_soft[2] = 1.26864278

hw_error: i = 85 output = 2 t_test_num = 1
sw_error: i = 85 output_soft = 2 t_test_num = 1
dot2[0] = 1.21875000 dot2_soft[0] = -4.16326904
dot2[1] = -0.59375000 dot2_soft[1] = -0.84592772
dot2[2] = 1.21875000 dot2_soft[2] = 2.42255425

sw_error: i = 86 output_soft = 2 t_test_num = 1
dot2[0] = -0.28125000 dot2_soft[0] = -4.36515617
dot2[1] = 0.09375000 dot2_soft[1] = -0.08813666
dot2[2] = -0.28125000 dot2_soft[2] = 0.97706115

hw_error: i = 90 output = 2 t_test_num = 1
sw_error: i = 90 output_soft = 2 t_test_num = 1
dot2[0] = 0.46875000 dot2_soft[0] = -4.02276182
dot2[1] = -0.53125000 dot2_soft[1] = -0.66237617
dot2[2] = 0.46875000 dot2_soft[2] = 1.72938108

sw_error: i = 91 output_soft = 2 t_test_num = 1
dot2[0] = -0.78125000 dot2_soft[0] = -3.85103607
dot2[1] = 0.15625000 dot2_soft[1] = -0.09844255
dot2[2] = -0.78125000 dot2_soft[2] = 0.42963967

sw_error: i = 95 output_soft = 2 t_test_num = 1
dot2[0] = -0.43750000 dot2_soft[0] = -4.07760668
dot2[1] = -0.03125000 dot2_soft[1] = -0.30057180
dot2[2] = -0.43750000 dot2_soft[2] = 0.90393031

hw_err_cnt = 9 sw_err_cnt = 20

  1. 2020年08月23日 08:31 |
  2. Alveo
  3. | トラックバック:0
  4. | コメント:0

ACRi ルームの Alveo U50 を使ってみた3(ラプラシアンフィルタ)

ACRi ルームの Alveo U50 を使ってみた2(Vitis Ai の実行)”の続き。

前回は、ACRi ルームの Alveo U50 を使ってみるということで Vitis AI を使用して、いろいろなサンプルを実行してみた。今回は、自分で作ったラプラシアンフィルタの Vitis 実装コードを ACRi ルームの Alveo U50 を使って実行させてみよう。

”Vitis 2019.2 アプリケーション・プロジェクト ラプラシアン・フィルタAXI4-Streamバージョン2”の lap_filter_axis_dma.cpp と lap_filter_axis_dma_host.cpp を使用する。それに画像ファイルを SFTP で ACRi のファイル・サーバーに送ろう。

WinSCP を起動して、ACRi に接続して、4 つのファイルをアップロードした。
ACRi_U50_35_200809.png

as004 上で Vitis 2019.2 のプロジェクトを作成する。
New Applilcation Project の Create a New Application Project ダイアログで、Project name を lap_filter_axis_dma とした。
ACRi_U50_36_200809.png

Platform では、 xilinx_u50_gen3x16_xdma_201920_3 のプラットフォームを選択した。
ACRi_U50_37_200809.png

Templates では、Empty Application を選択し、Finishボタンをクリックした。
ACRi_U50_39_200809.png

Vitis 2019.2 の lap_filter_axis_dma プロジェクトが生成された。
ACRi_U50_40_200809.png

ソースコードが入っていないので、ソースコードをインポートしよう。
lap_filter_axis_dma_system -> lap_filter_axis_dma -> src を右クリックし、右クリックメニューから Import Sources... を選択した。
ACRi_U50_41_200809.png

lap_filter_axis_dma.cpp と lap_filter_axis_dma_host.cpp , bmp_header.h , test.bmp をインポートした。
ACRi_U50_42_200809.png

lap_filter_axis_dma.cpp と lap_filter_axis_dma_host.cpp , bmp_header.h , test.bmp を src にインポートできた。
ACRi_U50_44_200809.png

Add Hardware Functions のボタンをクリックして、ハードウェアにする関数を選択する。lap_filter_axis_dma を選択した。
ACRi_U50_45_200809.png

バイナリ・コンテナの名前を lap_filter_axis_dma に変更した。
ACRi_U50_46_200809.png

Assistant ウインドウの lap_filter_axis_dma_system -> lap_filter_axis_dma -> Hardware を右クリックし、右クリックメニューから Build を選択して、ビルドを行った。
ACRi_U50_47_200809.png

ビルドが開始された。
ACRi_U50_48_200809.png

ビルド中の CPU 使用状況。
ACRi_U50_49_200809.png

ビルドが成功した。
ACRi_U50_50_200809.png

Hardware/lap_filter_axis_dma-Default ディレクトリに test.bmp を入れた。
ACRi_U50_52_200810.png

早速、実行したところエラーになった。
ACRi_U50_51_200810.png

Git branch: 2020.1
PID: 1861
UID: 50255
[Mon Aug 10 06:32:22 2020]
HOST: as004
EXE: /home/u_marsee101/Vitis_Work/U50/2019.2/lap_filter_axis_dma/Hardware/lap_filter_axis_dma
[XRT] ERROR: bad magic header in xclbin
[XRT] ERROR: program is nullptr


vadd の実行には成功しているので、何か環境が違うのではないだろうか?
もしかして、Template を Vector Addition にしておいて、ソースコードを lap_filter_axis_dma に入れ替えれば動くんじゃないだろうか?
ということで、Template を Vector Addition にした lap_filter_axis_dma2 プロジェクトを作成して、ビルド成功した。
そして、実行すると動作した。
ACRi_U50_53_200811.png

[Console output redirected to file:/home/u_marsee101/Vitis_Work/U50/2019.2/lap_filter_axis_dma2/Hardware/lap_filter_axis_dma2-Default.launch.log]
Using FPGA binary file specfied through the command line: ../binary_container_1.xclbin
Found Platform
Platform Name: Xilinx
Loading: '../binary_container_1.xclbin'
lap_filter_axis_dma: 307005 ns
Success HW and SW results match


Hardware/lap_filter_axis_dma2-Default ディレクトリに 、temp_lap.bmp ファイルができていた。
ACRi_U50_54_200811.png

temp_lap.bmp ファイルを見たところ、確かにエッジの画像になっていた。
ACRi_U50_55_200811.png
  1. 2020年08月13日 04:25 |
  2. Alveo
  3. | トラックバック:0
  4. | コメント:0

ACRi ルームの Alveo U50 を使ってみた2(Vitis Ai の実行)

ACRi ルームの Alveo U50 を使ってみた1(Vector Addition の実行)”の続き。

前回は、ACRi ルームの Alveo U50 を使ってみるということで、Vitis 2019.2 を使用して、Vector Addition サンプルを作って、ビルドし、実行できた。今回は、前回の続きで Vitis AI をやってみよう。

なお、”ACRi ルームの使い方デモ”を参照している。

もうすでに、XRT と Vitis の環境は設定を行ったので、Vitis AI の環境を設定する。
source /opt/vitis_ai/setup.sh

/opt/vitis_ai/workspace/Vitis-AI-Library/overview/samples/multitask/ ディレクトリに行って、test_video_multitask を起動した。
cd /opt/vitis_ai/workspace/Vitis-AI-Library/overview/samples/multitask/
./build.sh
./test_video_multitask multi_task ../../demo/segs_and_roadline_detect/lane_640_480.avi -t 8

すると、別ウインドウが開いて、車の認識のデモ?が実行された。
ACRi_U50_11_200808.png

元のビデオは、車からの走行シーンを撮影した動画のようだ。
ACRi_U50_58_200811.png

/opt/vitis_ai/workspace/Vitis-AI-Library/overview/samples/multitask/ ディレクトリのファイルを示す。
ACRi_U50_56_200811.png

readme を見て、test_jpeg_multitask を試してみた。
./test_jpeg_multitask multi_task sample_multitask.jpg
ACRi_U50_59_200811.png

ログを貼っておく。

(base) u_marsee101@as004:/opt/vitis_ai/workspace/Vitis-AI-Library/overview/sames/multitask$ ./test_jpeg_multitask multi_task sample_multitask.jpg
WARNING: Logging before InitGoogleLogging() is written to STDERR
I0811 04:19:41.812407 16728 process_result.hpp:57] 2 0.333344 0.499921 0.122619 0.234968 93.5763
I0811 04:19:41.812588 16728 process_result.hpp:57] 2 0.274168 0.559145 0.0788227 0.0899649 -108.435
I0811 04:19:41.812613 16728 process_result.hpp:57] 2 0.688132 0.557123 0.161432 0.18072 129.289
I0811 04:19:41.812646 16728 process_result.hpp:57] 2 0 0.511859 0.078728 0.224802 0
I0811 04:19:41.812669 16728 process_result.hpp:57] 2 0.208173 0.572655 0.0530752 0.061687 -123.69
I0811 04:19:41.812696 16728 process_result.hpp:57] 2 0.45969 0.583376 0.0239042 0.0345972 106.39
I0811 04:19:41.812719 16728 process_result.hpp:57] 2 0.152777 0.570406 0.0236073 0.0197128 -123.69
I0811 04:19:41.812738 16728 process_result.hpp:57] 2 0.647809 0.56265 0.0722189 0.0700647 77.4712
I0811 04:19:41.812759 16728 process_result.hpp:57] 2 0.511904 0.57834 0.0385703 0.0527384 116.565
I0811 04:19:41.812779 16728 process_result.hpp:57] 2 0.797958 0.329459 0.193313 0.649231 135
I0811 04:19:41.812809 16728 process_result.hpp:57] 6 0.469489 0.513496 0.0103455 0.0113734 -93.3665


sample_multitask_result.jpg が生成された。
ACRi_U50_61_200811.png

/opt/vitis_ai/workspace/Vitis-AI-Library/overview/samples ディレクトリを示す。
ACRi_U50_57_200811.png

たくさんサンプルがあるようだ。

追加で Yolo3 をやってみた。
yolov3 ディレクトリに入った。
sh build.sh でビルドした。
./test_jpeg_yolov3 yolov3_adas_pruned_0_9 sample_yolov3.jpg を実行した。
ACRi_U50_62_200811.png

ログを貼っておく。

(base) u_marsee101@as004:/opt/vitis_ai/workspace/Vitis-AI-Library/overview/samples/yolov3$ ./test_jpeg_yolov3 yolov3_adas_pruned_0_9 sample_yolov3.jpg
WARNING: Logging before InitGoogleLogging() is written to STDERR
I0811 04:37:56.257900 18617 process_result.hpp:46] RESULT: 0 -1.49536 132.509 121.505 226.451 0.96233
I0811 04:37:56.258023 18617 process_result.hpp:46] RESULT: 0 111.502 139.693187.502 179.079 0.943011
I0811 04:37:56.258064 18617 process_result.hpp:46] RESULT: 0 397.368 131.843512 231.843 0.850293
I0811 04:37:56.258088 18617 process_result.hpp:46] RESULT: 0 352.674 144.348413.023 165.955 0.843594
I0811 04:37:56.258114 18617 process_result.hpp:46] RESULT: 0 337.352 144.322362.9 159.324 0.807779
I0811 04:37:56.258139 18617 process_result.hpp:46] RESULT: 0 150.182 139.843194.335 161.45 0.320707
I0811 04:37:56.258165 18617 process_result.hpp:46] RESULT: 1 191.029 134.979205.76 159.021 0.348052



sample_yolov3_result.jpg が生成された。
ACRi_U50_63_200811.png

ACRi_U50_64_200811.png

もう 1 つ追加で、openpose をやってみた。
ACRi_U50_65_200811.jpg

segmentation のサンプルを追加する。
ACRi_U50_66_200811.jpg
  1. 2020年08月11日 04:29 |
  2. Alveo
  3. | トラックバック:0
  4. | コメント:0
»