FC2カウンター FPGAの部屋 2020年07月14日
FC2ブログ

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

FPGAの部屋

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

Vitis 2020.1 で ultra96v2_min2_201 アクセラレーション・プラットフォームを使用したアプリケーション・プロジェクトを試す

Vitis 2020.1 で lap_filter_axis_dma をビルドし動作テストを行う2(実機確認)”でVitis 2020.1 で ultra96v2_min2_201 アクセラレーション・プラットフォームを使用した lap_filter_axis_dma アプリケーション・プロジェクトを試したところ、カーネルから来るデータがすべて 0 だったようだ。しかし、Vitis のサンプル・アプリケーションの vadd は”ZynqMP-FPGA-Linux で Vitis 2020.1 でビルドした vadd を動作させる5(libcrypt.so.2 のコピーと vadd の実行)”で試してみたが、テストが通った。
何でだろうか?ということで、他のプロジェクトをやってみた。

square
まずは、自作のアクセラレーション・アプリケーション・プロジェクトの square からやってみた。
square は以下のFPGAの部屋のブログ記事で書かれている。
Vitis 2019.2 アプリケーション・プロジェクト square その1
Vitis 2019.2 アプリケーション・プロジェクト square その2
Vitis 2019.2 アプリケーション・プロジェクト square その3

square を Vitis 2020.1 と ultra96v2_min2_201 アプリケーション・プラットフォームでやってみた。
ZynqMP-FPGA-Linux201_70_200714.png

ビルド成功して、 square_u96v2 と square_c.xclbin を Ultra96V2 の Debian にアップロードした。
dtbocfg.rb と zocl.dts を用意した。
ビットファイルを生成して、 /lib/firmware/ にコピーした。
xclbinutil --input square_c.xclbin --dump-section BITSTREAM:RAW:square.bit
sudo cp square.bit /lib/firmware/

ZynqMP-FPGA-Linux201_71_200714.png

square を動作させる。
source /opt/xilinx/xrt/setup.sh
sudo ./dtbocfg.rb --install zocl --dts zocl.dts
sudo chmod 666 /dev/dri/renderD128
./square_u96v2 square_c.xclbin

ZynqMP-FPGA-Linux201_72_200714.png
ZynqMP-FPGA-Linux201_73_200714.png

fpga@debian-fpga:~/Vitis_work/square$ ./square_u96v2 square_c.xclbin
Using FPGA binary file specfied through the command line: square_c.xclbin
Found Platform
Platform Name: Xilinx
Loading: 'square_c.xclbin'
Error: i = 1 i^2 = 1 square_data = 0
Error: i = 2 i^2 = 4 square_data = 0
Error: i = 3 i^2 = 9 square_data = 0
Error: i = 4 i^2 = 16 square_data = 0
Error: i = 5 i^2 = 25 square_data = 0
Error: i = 6 i^2 = 36 square_data = 0
Error: i = 7 i^2 = 49 square_data = 0
Error: i = 8 i^2 = 64 square_data = 0
Error: i = 9 i^2 = 81 square_data = 0
TEST FAILED


TEST が失敗した。やはり、データが 0 だった。

array_partition
次に、Vitis のサンプル・アプリケーションの array_partition をやってみよう。
array_partition を Vitis 2020.1 と ultra96v2_min2_201 アプリケーション・プラットフォームでやってみた。

ビルド成功して、 array_p と matmul.xclbin を Ultra96V2 の Debian にアップロードした。
dtbocfg.rb と zocl.dts を用意した。
ビットファイルを生成して、 /lib/firmware/ にコピーした。
xclbinutil --input matmul.xclbin --dump-section BITSTREAM:RAW:matmul.bit
sudo cp matmul.bit /lib/firmware/

ZynqMP-FPGA-Linux201_75_200714.png

square と続けてやってので、XRT の環境はセットされているし、 zocl などのドライバはロードされているので、それを外した。
sudo ./dtbocfg.rb --remove zocl
sudo ./dtbocfg.rb --install zocl --dts zocl.dts
sudo chmod 666 /dev/dri/renderD128
./array_p matmul.xclbin

ZynqMP-FPGA-Linux201_76_200714.png
ZynqMP-FPGA-Linux201_77_200714.png

TEST PASSED と表示され成功した。

fpga@debian-fpga:~/Vitis_work/array_p$ ./array_p matmul.xclbin 
A:
   0    1    8    5    5    2    0    7    7   10 …
   7    0    4    0    4    7    6   10    9    5 …
   2    0    8    3    6    8   10    4    2   10 …
   2    4    8    5    2    3    3    1    5    9 …
  10    5    2    0   10    0    5    4    3   10 …
   9    1    0    7    9    6    8    7   10    9 …
   4    9    2    4    5    5    3    1    1    6 …
   6    9    6    9    1    2    7    1    1    3 …
   1    3    9    7    1    7    4    4    5    1 …
  10    4    1    6    2    5    5   10    1    2 …
   …    …    …    …    …    …    …    …    …    … ⋱

B:
   7    7    2    9    7    9    1    0    8    6 …
   4    2    7    3    8    8    4    3    2    0 …
   6    1    9    1   10    2    2    1    2    6 …
   0    6    2    3    7    1    8    5    6    6 …
   8    6    8    3    1    5    3    6    5    4 …
   3    0    4    2    7    7    5    8    7   10 …
   4    6   10    1    7    3    5    5    9    0 …
   2    9    7    5    8    0    1    7    7    4 …
   1    0    5    0    1    9    8    8    4    0 …
   4    6    7    7    5    3    8    4    7    3 …
   …    …    …    …    …    …    …    …    …    … ⋱

Gold:
 196  311  428  206  384  291  305  363  405  243 …
 286  472  448  296  490  425  382  430  500  367 …
 269  439  555  260  529  390  416  425  559  370 …
 231  293  419  231  365  385  361  356  384  235 …
 307  479  484  313  453  477  368  366  529  295 …
 317  474  488  357  472  458  439  457  564  341 …
 246  339  385  272  381  424  364  324  386  263 …
 234  367  312  217  430  307  334  248  314  284 …
 231  370  403  197  453  334  353  410  382  344 …
 246  432  363  321  462  324  291  330  436  322 …
   …    …    …    …    …    …    …    …    …    … ⋱

Found Platform
Platform Name: Xilinx
INFO: Reading matmul.xclbin
Loading: 'matmul.xclbin'
Trying to program device[0]: edge
Device[0]: program successful!
|-------------------------+-------------------------|
| Kernel                  |    Wall-Clock Time (ns) |
|-------------------------+-------------------------|
| matmul:                 |                  237029 |
| matmul: partition       |                   65973 |
|-------------------------+-------------------------|
Note: Wall Clock Time is meaningful for real hardware execution only, not for emulation.
Please refer to profile summary for kernel execution time for hardware emulation.
TEST PASSED



結果
今回も square の自作アクセラレーション・アプリケーション・プロジェクトは結果のデータが 0 で、 array_partition はテストが通った。この違いは何だろう? ホストのOpenCL コードはほとんど一緒なのだが?
プロジェクトの環境変数が違うのだろうか?
  1. 2020年07月14日 04:32 |
  2. Vitis
  3. | トラックバック:0
  4. | コメント:0