Vitis

Vitis 統合ソフトウェア プラットフォーム
Vitis 統合ソフトウェア プラットフォームがXDF 2019 で発表されたようです。

Vitis 2019.2 をインストールした
最初に、「Vitis コア開発キット - 2019.2 」の約30GB をダウンロードしてしまった。しかし、「Vivado Design Suite - HLx Edition - 2019.2 Full Product Installation」の「ザイリンクス統合インストーラ 2019.2」をダウンロードすれば、Vitis をインストールすることができた。

Vivado 2019.2 のプロジェクトを作り Vitis でソフトウェア開発1
Vivado 2019.2 が11月1日にリリースされたが、このバージョンからSDK が無くなった。それじゃ、どうやって、ZYNQ とかでソフトウェアを開発するのか?といったらVitis を使用することになる。そのVitis を使ってソフトウェア開発する手順を確認してみよう。
Vivado 2019.2 のプロジェクトを作り Vitis でソフトウェア開発2
前回は、Vivado 2019.2 が11月1日にリリースされたが、このバージョンからSDK が無くなった。それじゃ、どうやって、ZYNQ とかでソフトウェアを開発するのか?といったらVitis を使用することになる。そのVitis を使ってソフトウェア開発する手順を確認してみよう。ということで、ZYBO Z7-10 を使用したaxi_gpio を使用して4 LED を制御する簡単な回路をVivado 2019.2 で作成し、Vitis 2019.2 でプラットフォーム・プロジェクトを生成してビルドした。今回は、Vitis でHello World アプリケーション・プロジェクトを作成して動作を確認してみよう。
Vivado 2019.2 のプロジェクトを作り Vitis でソフトウェア開発3
前回は、Vitis でHello World アプリケーション・プロジェクトを作成して動作を確認できた。今回は、Vivado のブロックデザインで、LED にGPIO を付けたはずなので、LED の点滅させてみよう。
ブロック・デザインを間違えていてLEDは点滅しなかった。
Vivado 2019.2 のプロジェクトを作り Vitis でソフトウェア開発4
前回は、Vivado のブロックデザインで、LED にGPIO を付けたはずなので、LED の点滅させてみよう、ということで、LED_test アプリケーション・プロジェクトと作成し、動作させてみようとしたらVivado で作った回路のミスが発覚した。今回は、そのミスを修正して、もう一度、アプリケーションを動作させてみよう。
ZYBO Z7-10 でアプリケーションの動作テストを行ったところ、正常に動作した。LED も 2 進表示で点滅した。

Vitis 2019.2 の組み込みプロセッサ プラットフォームの開発をやってみる1(ハードウェア・コンポーネントの作成)
今回は、Vitis 2019.2 のマニュアルの”Vitis Application Acceleration Development Flow Documentation”の”Embedded Processor Platform Development”をやってみようと思う。ただし、チュートリアルはZCU102 用なので、Ultra96-V2 用に変換してみようと思う。具体的には、PetaLinux 部分は、”SDx 2019.1 のUltra96-V2 用プラットフォームを作る1(DSA ファイルを作成)”からのシリーズのブログ記事を参考にしようと思う。
Vitis 2019.2 の組み込みプロセッサ プラットフォームの開発をやってみる2(ソフトウェア・コンポーネントの作成1)
前回は、Vivado 2019.2 の組み込みプロセッサ プラットフォームを作ってみようということで、SDx 2019.1 用に作ったハードウェア・プラットフォーム用のVivado 2019.2 のプロジェクトをVivado 2019.2 にアップグレードして、XSA ファイルを生成した。今回は、”Vitis Unified Software Development Platform Documentation”の”
Embedded Processor Platform Development”の”Creating the Software Component”を参照しながら、Vitis 2019.2 のソフトウェア・コンポーネントを作成していこう。
Vitis 2019.2 の組み込みプロセッサ プラットフォームの開発をやってみる3(ソフトウェア・コンポーネントの作成2)
前回は、”Creating the Software Component”を参照しながら、PetaLinux 2019.2 を使用して、Vitis 2019.2 のソフトウェア・コンポーネントを作成していったが、petalinux-build までとなった。今回は sysroot を作成して、linux.bif を作成する。
Vitis 2019.2 の組み込みプロセッサ プラットフォームの開発をやってみる4(プラットフォームの作成)
前回はソフトウェア・コンポーネントの作成で sysroot を作成して、linux.bif を作成した。今回は、プラットフォームを作成してみよう。

Xilinx Runtime (XRT)

Vitis には、Xilinx Runtime (XRT) がある。
Xilinx Runtime (XRT) の資料は、Xilinx Runtime (XRT) Architecture に詳しく載っている。

「Vitis 2019.2 の組み込みプロセッサ プラットフォームの開発をやってみる」にXRTサポートを追加
”Xilinx Runtime (XRT)”にも書いたが、「Vitis 2019.2 の組み込みプロセッサ プラットフォームの開発をやってみる」シリーズにXRT サポート用のユーザーパッケージと zocl ドライバを追加した。

XRT をインストールした
”「Vitis 2019.2 の組み込みプロセッサ プラットフォームの開発をやってみる」にXRTサポートを追加”の続きで、XRT をインストールすることにした。なおパソコンのOS は18.04.3 LTS だった。

Vitis_Accel_Examples の hello_world サンプルをUltra96V2 のプラットフォームでやってみる
Xilinx/Vitis_Accel_Examples の hello_world サンプルを今まで作ってきたUltra96V2 のプラットフォームでやってみようと思う。
make を実行すると、作ってきたプラットフォームが non-accelerated platform と言われてしまった。。。ショック。。。
おかしい。。。アクセラレートできるようにプラットフォームを作ってきたはずなのだが。。。プラットフォーム違いなのか???
Vitis_Accel_Examples の hello_world サンプルをUltra96V2 のプラットフォームでやってみる2
Xilinx/Vitis_Accel_Examples の hello_world サンプルを今まで作ってきたUltra96V2 のプラットフォームでやって見たが、作ってきたプラットフォームが non-accelerated platform と言われてしまった。その原因としては、どこかで見たかわからないのだが、ハードウェアの xsa ファイル名とソフトウェアの spfm ファイル名が同じでなければならないというのがあったと思う。
そこで、xsa ファイル名からPetaLinux のプロジェクト名、Vitis でのプラットフォーム名をすべて ultra96v2_min で統一することにした。
Vitis_Accel_Examples の hello_world サンプルをUltra96V2 のプラットフォームでやってみる3
前回は、xsa ファイル名からPetaLinux のプロジェクト名、Vitis でのプラットフォーム名をすべて ultra96v2_min で統一したら、hello_world サンプルのビルドが進んだが、TARGET=hw でビルドした時に”ERROR: [CFGEN 83-2299] Clock ID 0 must exist. Please correct the targetted platform.”というエラーが出てしまった。今回は、そのエラーの解消を試みた。
Vivado のブロックデザインで clock のID が 0 のものが必要だった。
Vitis_Accel_Examples の hello_world サンプルをUltra96V2 のプラットフォームでやってみる4
前回は、TARGET=hw でビルドした時に”ERROR: [CFGEN 83-2299] Clock ID 0 must exist. Please correct the targetted platform.”というエラーが出てしまったので、そのエラーを解消したが、cp コマンドでエラーになってしまった。今回は、そのエラーの行を Makefile から削除して、make してみた。そして、sd_card ディレクトリを SDカードの第1パーティションに書いて、また、sysroot の aarch64-xilinx-linux ディレクトリを第2パーティションに書いた。SDカードをUltra96V2 に挿入して、PetaLinux を起動した。
init.sh 起動コマンドを動作させたところ、XILINX_XRT not set で liboclxdp.so が無いと言われた。
Vitis_Accel_Examples の hello_world サンプルをUltra96V2 のプラットフォームでやってみる5
前回は、Xilinx/Vitis_Accel_Examples の hello_world サンプルをビルドしてできたsd_card の内容をSDカードの第1パーティションに書き込み、sysroot の aarch64-xilinx-linux ディレクトリの内容をSDカードの第2パーティションに書き込んでできたSDカードをUltra96V2 に挿れたところLinux が起動した。しかし、hello_world サンプルは実行できなかった。今回は、その原因を追求し、、hello_world サンプルを動作させることができた。zocl ドライバをインストールしていなかったためだった。

Ultra96-V2 用 Vitis アクセラレーション・プラットフォームのサンプルを公開
今まで作ってきた Ultra96-V2 用 Vitis アクセラレーション・プラットフォームのサンプルを公開した。ダウンロードすることができる。

Vitis_Accel_Examples の hello_world サンプルをUltra96V2 のプラットフォームでやってみる6
前回は、hello_world サンプルは実行できなかった原因を追求し、hello_world サンプルを動作させることができた。今回は、hello_world サンプルで作成された Vivado HLS と Vivado のプロジェクトを見ていこう。

Vitis_Accel_Examples を Ultra96V2 のプラットフォームでやってみる1(array_partition)
Vitis_Accel_Examples の hello_world 以外のサンプルを Ultra96V2 のプラットフォームでやってみようと思う。
array_patition を Ultra96V2 のVitis アクセラレーション・プラットフォームでやってみよう。
TEST PASSEDでうまく行った。
Vitis_Accel_Examples を Ultra96V2 のプラットフォームでやってみる2(array_partition 2)
前回は、Vitis_Accel_Examples の hello_world 以外のサンプルを Ultra96V2 のプラットフォームでやってみようということで、ccp_kernels/array_patition を Ultra96V2 のVitis アクセラレーション・プラットフォームでやってみた。今回は、array_partition をVivado や Vivado HLS のプロジェクトを見ながら詳しく見ていこう。

ZYBO Z7-20 用のVitis アクセラレーション・プラットフォームを作成した
フィクスターズさんのブログでも紹介されているが、私もZYBO Z7-20 の Vitis アクセラレーション・プラットフォームを作成した。

Ultra96-V2 の Vitis アクセラレーション・プラットフォームの作り方1(ハードウェア・コンポーネント編)
Ubuntu 18.04 上で Ultra96-V2 の Vitis アクセラレーション・プラットフォームを 4 回に分けて作っていこう。
前回作った Ultra96-V2 の Vitis アクセラレーション・プラットフォームはデフォルトのクロック周波数が 100 MHz だったので、今回のデフォルトのクロック周波数は 200 MHz とする。
Ultra96-V2 の Vitis アクセラレーション・プラットフォームの作り方2(ソフトウェア・コンポーネント編)
Ultra96-V2 の Vitis アクセラレーション・プラットフォームのハードウェア・コンポーネント編の続きで、ソフトウェア・コンポーネント編をやっていこう。PetaLinux 2019.2 で実装して行く。
Ultra96-V2 の Vitis アクセラレーション・プラットフォームの作り方3(Vitis プラットフォーム作成)
ハードウェア・コンポーネント編、ソフトウェア・コンポーネント編で作成したファイルを元に、 Vitis 2019.2 を起動してプラットフォームを作成しよう。
Ultra96-V2 の Vitis アクセラレーション・プラットフォームの作り方4(Vitis アプリケーション・プロジェクトの作成)
Vitis のアクセラレーション・プラットフォームを作成できたので、それを使用してアプリケーション・プロジェクトを作成し、Ultra96-V2 で動作させてみよう。実機動作を確認した。

array_patition example をultra96v2_min2 プラットフォームでやってみよう
Vitis アクセラレーション・プラットフォームの ultra96v2_min2 ができたので、array_patition example をやってみよう。
array_patition example は”Vitis_Accel_Examples を Ultra96V2 のプラットフォームでやってみる1(array_partition)”でやっているので、結果が出ている。これは、動作クロックが 100 MHz だったが、今回の動作クロックは 200 MHz にしてあるので、どのくらい性能向上したか?を確かめてみよう。

Vitis 2019.2 のアプリケーション・プロジェクトの作り方1
Ultra96-V2 のVitis アクセラレーション・プラットフォームを作成したが、それを使用して自分のアプリケーション・プロジェクトを動作させてみよう。そのために、まだVitis 2019.2 でサンプル・プロジェクトしかやっていないので、自分でアプリケーション・プロジェクトを作り、自分でアクセラレーションする関数を指定してビルドしていないので、それを やってみようと思う。
Vitis 2019.2 のアプリケーション・プロジェクトの作り方2
自分でアプリケーション・プロジェクトを作り、自分でアクセラレーションする関数を指定してビ ルドしていないので、それをやってみようと思うということで、前回は、Xilinx 社のGitHub の Xilinx/Vitis-Tutorials の Mixing C++ and RTL Kernels のソースコードを使用してVitis 2019.2 のプロジェクトを作成し、ビルドする手順を行うことができた。今回は、ビルド後のSummary を見ていこう。
Vitis 2019.2 のアプリケーション・プロジェクトの作り方3
自分でアプリケーション・プロジェクトを作り、自分でアクセラレーションする関数を指定してビ ルドしていないので、それをやってみようと思うということで、前回は、ビルド後のSummary を観察した。
今回は、出来上がったSD_CARD イメージをMicroSD カードに書いて、実際にUltra96-V2 でテストしてみよう。実機動作を確認できた。

Vitis 2019.2 アプリケーション・プロジェクトのホスト・コード作成手順
Vitis 2019.2 アプリケーション・プロジェクトのホスト・コードの作成手順をまとめてみよう。

Vitis 2019.2 アプリケーション・プロジェクトの C/C++ カーネル・コード作成手順
前回は、”Vitis 2019.2 アプリケーション・プロジェクトのホスト・コード作成手順”でしたが、今回は、Vitis 2019.2 アプリケーション・プロジェクトの C/C++ カーネル・コード作成手順をまとめていきたいと思う。

Vitis 2019.2 アプリケーション・プロジェクト square その1
自分で作ったと言うか、Xilinx のサンプルを手直しした Viits 2019.2 アプリケーションプロジェクトの square を書いておく。
ホストアプリケーションは自分で作ったというのはおこがましいほど、Vitis- Tutorials/docs/mixing-c-rtl-kernels/reference-files/src/host /host_step1.cpp のコードを引用しまくりで恥ずかしいのだが、自分でリファクタリングも決まりきった手順なので難しいので、そのまま使わせてもらうことにする。
Vitis 2019.2 アプリケーション・プロジェクト square その2
Vitis-Tutorials/docs/mixing-c-rtl-kernels/reference-files/src/host/host_step1.cpp のコードを引用しまくりで、Vitis 2019.2 のアプリケーション・プロジェクトの square を作成して、ホストアプリケーションとカーネルアプリケーションのコードを貼った。
今回は、spuare のアクセラレーション・アプリケーション・プロジェクトを作成して、ビルドしていこう。
Vitis 2019.2 アプリケーション・プロジェクト square その3
前回は、Vitis 2019.2 のアクセラレーション用アプリケーション・プロジェクトの spuare_u96v2 を作成して、ビルドした。今回は、square_u96v2 に使用された Vivado HLS , Vivado のレポートなどを見て、Ultra96-V2 実機で動作を確認しよう。実機動作を確認できた。

Vitis 2019.2 アプリケーション・プロジェクト ラプラシアン・フィルタAXI Masterバージョン1
前回の square Vitis 2019.2 アプリケーション・プロジェクトで、自作(といってOpenCL シーケンス部分はほとんど引用だが)Vitis 2019.2 アプリケーション・プロジェクトを初めて作ったが、今回は、いつも題材にしているラプラシアン・フィルタをVitis 2019.2 アプリケーション・プロジェクトにして作成してみよう。
Vitis 2019.2 アプリケーション・プロジェクト ラプラシアン・フィルタAXI Masterバージョン2
前回は、ラプラシアン・フィルタをVitis 2019.2 アプリケーション・プロジェクトにして作成してみようということで、ソースコードを貼り付けた。今回は、Vitis 2019.2 のアプリケーション・プロジェクト laplacian_filter1 を作成し、ビルドしてUltra96-V2 の実機で確認してみよう。実機確認OKでした。

Vitis 2019.2 アプリケーション・プロジェクト ラプラシアン・フィルタAXI4-Streamバージョン1
Vitis 2019.2 アプリケーション・プロジェクト ラプラシアン・フィルタのAXI Master バージョンを作ったが、今回は、AXI4 Master DMA Read ー AXI4-Stream 入力, ラプラシアン・フィルタ処理, AXI4 Stream 出力 ー AXI4 Master DMA Write のラプラシアン・フィルタ処理のカーネルアプリケーションを作成する。
ソースコードを貼っておく。
Vitis 2019.2 アプリケーション・プロジェクト ラプラシアン・フィルタAXI4-Streamバージョン2
”Vitis 2019.2 アプリケーション・プロジェクト ラプラシアン・フィルタAXI4-Streamバージョン1”に、AXI4 Master DMA Read ー AXI4-Stream 入力, ラプラシアン・フィルタ処理, AXI4 Stream 出力 ー AXI4 Master DMA Write のラプラシアン・フィルタ処理のカーネルアプリケーションのソースコードを貼ったが、int の 64 ビット幅でバグでたので、int を int32_t に変更した。そして、ホストアプリケーションに getProfilingInfo()による時間計測を追加した。
今回はコードを貼っておく。
Vitis 2019.2 アプリケーション・プロジェクト ラプラシアン・フィルタAXI4-Streamバージョン3
前回は、バグを修正したソースコードを貼った。今回は、Vitis 2019.2 で lap_filter_axis_dma プロジェクトを作成してUltra96-V2 で動作を確認した。
Vitis 2019.2 アプリケーション・プロジェクト ラプラシアン・フィルタAXI4-Streamバージョン4
前回は、Vitis 2019.2 で lap_filter_axis_dma プロジェクトを作成してUltra96-V2 で動作を確認することができた。今回は、実行時のプロファイルを取得してみよう。

laplacian_filter1_host.cpp に時間計測コードを追加
最初にカーネルアプリケーションがAXI4 Master の laplacian_filter1_host.cpp をやってみて、次に、DMA Write - AXI4 Stream - DMA Readの lap_filter_axis_dma.cpp をやってみようとしている。この 2 つの実装をやってみることで、カーネルアプリケーションの書き方のバリエーションは示せるが、実機での性能差を示せていないのが、気がかりだった。そこで、時間計測コード を入れてみることにした。
最初にOpenCLで書いた時間計測コードを入れたがうまく行かなかったため、gettimeofday() を使用したコードで時間を計測した。
laplacian_filter1_host.cpp に時間計測コードを追加2
前回は、OpenCL の getProfilingInfo() を使用した時間計測を試みたがセグメンテーション・フォールトで出来なかった。そこで、 gettimeofday() を使用した時間計測コードを作成して時間計測した。ツィッターで @KSuzukiii さんに「enqueueTaskに event渡してないのが気になりました。」というコメントをいただいたので、調べてみるとたしかにそうだった。コードを修正して、やってみると成功したので、 OpenCL の getProfilingInfo() を使用した時間計測を行った。

Ultra96-V2 をUSB-LAN 変換アダプタでネットワークに接続
Ultra96-V2 のPetaLinux 2019.2 で無線LAN を使用して、ネットワークに接続するためにドライバとファームウェアをインストールしようとしていたが、うまく行かなかった。そこでUSB-LAN 変換アダプタを使用して、ネットワークに接続することにした。
USB-LAN 変換アダプタは前に使用していてパソコンのリプレースのために余っていたPLANEX のGU-1000T を使用する。このUSB-LAN 変換アダプタをUltra96-V2 のUSB-A コネクタに接続して、有線LAN で接続することができた。

ultra96v2_min2 プラットフォームのPeteLinux 2019.2 が動作するUltra96-V2 にSFTP できた
    ultra96v2_min2プラットフォームのPeteLinux 2019.2 が動作するUltra96-V2 にSFTP ができました。
ultra96v2_min2 プラットフォームのPeteLinux 2019.2 が動作するUltra96-V2 にSFTP できた2
”ultra96v2_min2プラットフォームのPeteLinux 2019.2 が動作するUltra96-V2 にSFTPできた”で、Ubuntu 18.04 の scp コマンドで、Ubuntu 18.04 の自分のパソコンから Ultra96-V2 のPetaLinux 2019.2 にファイルをアップロードすることができた。今回は、Ultra96-V2 のPetaLinux 2019.2 から Ubuntu 18.04 の自分のパソコンにファイルをダウンロードしてみよう。これは、ラプラシアン・フィルタ処理した画像ファイルを確認するのに使用する。

Vitis のRTL カーネル
今まで、Vitis のアクセラレーション・プラットフォームのC/C++ カーネルを実装してきたが、RTL カーネルもやってみようと思う。RTL カーネルの作成条件について見ていこう。
なお、C/C++ カーネルを作っていると、性能やクリティカルパスなどの情報が無いかもしくは、分かりにくい。そこで、Vivado HLS でC/C++ コードを合成して RTLカーネルを作成して、それをVitis で使っても良いのでは?と思っている。


テンプレートで書いた畳み込み ニューラルネットワークをRTLカーネルとしてVitisで実装する1(Vivado HLS 編 1)
以前テンプレートを使用して、パラメータを変更できる形に書いた畳み込みニューラルネットワー クをVivado HLS 2019.2 でIP にすることにした。Vitis のアクセラレーション・プラットフォームでやってみたいためだ。実はこのテンプレートを使用して、パラメータを変更できる形に書いた畳み込みニューラルネットワークを Vitis のアクセラレーション・プロジェクトとして作成したところ、ビルドが通らなかったので、Vivado HLS でIP 化した後で、Vitis のRTL カーネルとして使ってみたいということだ。
Vivado HLS でIP 化すると、チューニングもしやすいし、C/RTL 協調シミュレーションで波形も確認できるのでとても良い。そこで、IP 化したVerilog HDL コードをRTL カーネルとしてVitis で使いたいと考えたわけだ。。。
今回は、Vitis のRTL カーネルと実装するためのC++ のソースコードテストベンチを貼っておく。
テンプレートで書いた畳み込み ニューラルネットワークをRTLカーネルとしてVitisで実装する2(Vivado HLS 編 2)
前回は、Vitis のRTL カーネルとして実装するためのC++ のソースコードテストベンチを貼った。今回は、そのコードをVivado HLS 2019.2 でプロジェクトを作成して実装していこう。

ラプラシアン・フィルタを RTLカーネルとしてVitisで実装する1
テンプレートで書いた畳み込みニューラルネットワークをRTLカーネルとしてVitisで実装 しようとしていたが、ソースコードとやり方が全くやったこと無いのはやり方が間違っているかコードが間違っているのか分からないので、トラブった時に大変だと 考えた。そこで、”Vitis 2019.2 アプリケーション・プロジェクト ラプラシアン・フィルタAXI4-Streamバージョン2”で使用したラプラシアン・フィルタだったら、カーネル・アプリケーションはできているので、これを RTL カーネルとして実装することにした。
ラプラシアン・フィルタを RTLカーネルとしてVitisで実装する2
前回は、”Vitis 2019.2 アプリケーション・プロジェクト ラプラシアン・フィルタAXI4-Streamバージョン2”で使用したラプラシアン・フィルタを RTL カーネルとして実装することにした。Vivado HLS プロジェクトを作成し、C シミュレーション、C コードの合成、C/RTL 協調シミュレーション、Export RTL を行って、xo ファイルを作成した。
今回は、Vitis でアクセラレーション・アプリケーション・プロジェクトを作成し、ビルドした後で、Ultra96-V2 上で動作を確認した。
ラプラシアン・フィルタを RTLカーネルとしてVitisで実装する3
前回は、Vitis でアクセラレーション・アプリケーション・プロジェクトを作成し、ビルドした後で、Ultra96-V2 上で動作を確認することができた。今回は、lap_filter_aixs_dma のVitis アクセラレーション・アプリケーションを起動した時にできた profile_summary.csv を見てみよう。

テンプレートで書いた畳み込み ニューラルネットワークをRTLカーネルとしてVitisで実装する3(出力をグローバル・バッファからホストにコピーできない)
”テンプレートで書いた畳み込みニューラルネットワークをRTLカーネルとしてVitisで実 装する1(Vivado HLS 編 1)”のコードにはバグがあった。固定小数点を int32_t に変更しただけなので、小数点以下が切られてしまっている。これを現在は、256 倍してから int32_t に変更してある。
”テンプレートで書いた畳み込みニューラルネットワークをRTLカーネルとしてVitisで実装する2(Vivado HLS 編 2)”でエラーの表示を見ると、ハードウェアの出力値がほとんど 0 なのが分かると思う。このバグは 256 倍して出力して、出力側で 1/256 倍することで修正できた。しかし、Vitis アクセラレーション・プラットフォームで出力、つまり、左に曲がるか、直進するか、右に曲がるか(CNN の利用用途は白線走行です)の判定の output と左折、直進、右折の判定スコアの dot2[ ] の 2 個の出力値を出力しているが、それが 0 になってしまって反映されていない。

Vivado HLS の Vitis Bottom Up Flow を使用する1
”テンプレートで書いた畳み込みニューラルネットワークをRTLカーネルとしてVitisで実 装する3(出力をグローバル・バッファからホストにコピーできない)”で all_layers_dnn が 2 個の出力バッファを使用しているので、その場合は、ホスト・メモリにコピーできないのか?を確かめるために Vivado HLS プロジェクトの square_cubed プロジェクトを作成して確かめてみよう。ついでに、Vivado HLS の新規プロジェクトを作成する時に Vitis Bottom Up Flow というチェックボックスがあるのを覚えていたので、それを使用して、Vitis の RTL カーネルを生成してみようと思う。
Vivado HLS の Vitis Bottom Up Flow を使用する2
前回は、 2 個の出力バッファを使用している時に、ホスト・メモリにコピーできないのか?を確かめるために Vivado HLS プロジェクトの square_cubed プロジェクトを作成して確かめてみようということで、 Vivado HLS 2019.2 で square_cubed プロジェクトを作成した。(Vitis 2019.2 の RTL カーネルを作成するため)
今回は、Vitis 2019.2 のアクセラレーション・プロジェクト用のVivado HLS 2019.2 プロジェクトの square_cubed プロジェクトで xo ファイルを作成しよう。
Vivado HLS の Vitis Bottom Up Flow を使用する3
前回は、Vitis 2019.2 のアクセラレーション・プロジェクト用のVivado HLS 2019.2 プロジェクトの square_cubed プロジェクトで xo ファイルを作成した。今回は、Vitis 2019.2 で square_cubed アクセラレーション・アプリケーション・プロジェクトを作成して実機で動作を確認することができた。

Vitis の アクセラレーション・アプリケーションの動作には、BOOT.BIN の入れ替えが必要
”テンプレートで書いた畳み込みニューラルネットワークをRTLカーネルとしてVitisで実 装する3(出力をグローバル・バッファからホストにコピーできない)”で、Vitis アクセラレーション・プラットフォームで出力、つまり、左に曲がるか、直進するか、右に曲がるか(CNN の利用用途は白線走行です)の判定の output と左折、直進、右折の判定スコアの dot2[ ] の 2 個の出力値を出力しているが、それが 0 になってしまって反映されていないという問題があった。いろいろとやってみたところ、Vitis で生成した sd_card ディレクトリの BOOT.BIN を入れ替えてブートしないと値がおかしくなるようだ。

テンプレートで書いた畳み込み ニューラルネットワークをRTLカーネルとしてVitisで実装する3(Vivado HLS 編 3)
”テンプレートで書いた畳み込みニューラルネットワークをRTLカーネルとしてVitisで実 装する1(Vivado HLS 編 1)”に Vitis のRTL カーネルを作成するためにパラメータを変更できる形に書いた畳み込みニューラルネットワークをVivado HLS 2019.2 でIP にするためのソースコードとテストベンチコードを書いたが、任意精度固定データ型をそのまま int32_t にキャストしてしまったので、小数点以下の桁が無くなってしまった。それを修正するために、任意精度固定データ型の整数ビット長を 8 ビット延長して 256 倍することにした。
テンプレートで書いた畳み込み ニューラルネットワークをRTLカーネルとしてVitisで実装する4(Vivado HLS 編 4)
”テンプレートで書いた畳み込みニューラルネットワークをRTLカーネルとしてVitisで実 装する1(Vivado HLS 編 1)”に Vitis のRTL カーネルを作成するためにパラメータを変更できる形に書いた畳み込みニューラルネットワークをVivado HLS 2019.2 でIP にするためのソースコードとテストベンチコードを書いたが、任意精度固定データ型をそのまま int32_t にキャストしてしまったので、小数点以下の桁が無くなってしまった。それを修正するために、任意精度固定データ型の整数ビット長を 8 ビット延長して 256 倍することにした。ということで、前回は、ソースコードとテストベンチ・コードを貼った。今回は、ソースコードとテストベンチ・コードをVivado HLS で C シミュレーション、C コードの合成、Export RTL を行った。
テンプレートで書いた畳み込み ニューラルネットワークをRTLカーネルとしてVitisで実装する5(Vitis 編)
前回は、白線走行用畳み込みニューラルネットワークをVivado HLS 2019.2 で IP にした。今回は白線走行用畳み込みニューラルネットワークの xo ファイルを使用して Vitis 2019.2 でアプリケーション・プロジェクトを作成し、実機確認したところ、一応成功した。

Vitis のストリーミング接続について
今まで実装してきたAXI4 Master アクセスによるカーネルは基本的にメモリを介して他のカーネルと通信するので、メモリ帯域を消費する。1 個や 2 個のカーネルだったら良いかもしれないが、3 , 4 個と接続するとメモリ帯域が足りなくなってしまうだろう。そこで、カーネルをストリーミング接続するとメモリ帯域を消費しないで何個でもカーネルを接続できるはずだ。
Vitis のカーネル間のストリーミング接続について
現在まだ新横浜プリンスホテルに宿泊しているが、Vitis のカーネル間のストリーミング接続について、覚書を書いておく。

Vitis のカーネル間のストリーミング接続サンプル streaming_k2k_mm をやってみた1
Vitis でメモリベースのIP を並べているとメモリ帯域の逼迫が心配なので、どうしてもカーネル間をストリーミング接続したいということで、”Vitis のストリーミング接続について”で調べたが、その内の、”Streaming Data Transfers Between Kernels (K2K)”のサンプルの streaming_k2k_mm についてやってみよう。
Vitis のカーネル間のストリーミング接続サンプル streaming_k2k_mm をやってみた2
前回は、Vitis のサンプル・プロジェクトに入っている streaming_k2k_mm をビルドして、実機確認し、成功した。今回は、カーネル間のストーミング接続の設定ファイルを確認して、自分で新しいプロジェクトを作成して、やってみようと思う。
カーネル間のストーミング記述ファイルは、何も指定しないとVitis ビルド時に見つからなくてエラーになってしまった。
Vitis のカーネル間のストリーミング接続サンプル streaming_k2k_mm をやってみた3
前回は、カーネル間のストーミング接続の設定ファイルを確認して、自分で新しいプロジェクトを 作成して、やってみたが、カーネル間のストーミング接続ファイルがVitis に見つけられなくてエラーになってしまった。今回は、エラーの解消を図った。
ビルドが成功し、実機の動作も確認できた。

Vivado HLS 2019.2 で krnl_dma_read を作成する1(ソースコードの表示)
ストーミング接続用のhls::stream の定義は、hls::stream<ap_axiu<32,0,0,0> > にする必要がある。こうするとサイドチャネルの信号は last と keep , strb だけになる。この内の last を使用して、フレームの最後をマークしよう。
Vivado HLS 2019.2 で krnl_dma_read を作成する2(IP 化)
前回は、Vitis のカーネル間ストーミング接続をテストするために DMA Read カーネル ー ラプラシアン・フィルタ・カーネル ー DMA Write カーネルをストーミング接続してみようということで、最初にDMA Read を作ることにした。そして、ソースコードを貼った。今回は、それらのソースコードを使用して、Vivado HLS 2019.2 で C シミュレーション、C コードの合成、C/RTL 協調シミュレーション、Export RTL を行った。
Vivado HLS 2019.2 で krnl_dma_read を作成する3(DMA Read サイズを固定する)
”Vivado HLS 2019.2 で krnl_dma_write を作成する3”でDMA Write のサイズを固定したところ、劇的にリソース使用量が減少した。そうしたら、krnl_dma_read も同様ではないか?と思って、DMA Read サイズを固定したバージョンを作成してみることにした。

Vivado HLS 2019.2 で krnl_lap_filter を作成する1(ソースコードの表示)
Vitis のカーネル間ストーミング接続をテストするために DMA Read カーネル ー ラプラシアン・フィルタ・カーネル ー DMA Write カーネルをストーミング接続してみよう。
今回は、ラプラシアン・フィルタ・カーネル krnl_lap_filter を作成する。
Vivado HLS 2019.2 で krnl_lap_filter を作成する2(IP化)
前回は、ラプラシアン・フィルタ・カーネル krnl_lap_filter を作成するということで、ソースコードを貼った。今回は、Vivado HLS 2019.2 のプロジェクトを作成して、C シミュレーション、C コードの合成、C/RTL 協調シミュレーション、Export RTL を行っていこう。

Vivado HLS 2019.2 で krnl_dma_write を作成する1
Vitis のカーネル間ストーミング接続をテストするために DMA Read カーネル ー ラプラシアン・フィルタ・カーネル ー DMA Write カーネルをストーミング接続してみよう。
今回は、DMA Write カーネルを作成しよう。
Vivado HLS 2019.2 で krnl_dma_write を作成する2
Vitis のカーネル間ストーミング接続をテストするために DMA Read カーネル ー ラプラシアン・フィルタ・カーネル ー DMA Write カーネルをストーミング接続するために、前回は DMA Write カーネルを作成したのだが、リソースを消費すぎているのが分かった。今回は、リソース使用量を少なくするように努力してみよう。
Vivado HLS 2019.2 で krnl_dma_write を作成する3
Vitis のカーネル間ストーミング接続をテストするために DMA Read カーネル ー ラプラシアン・フィルタ・カーネル ー DMA Write カーネルをストーミング接続するためのDMA Write カーネルを作成したが、リソースを消費すぎていた。リソース消費を抑えようと for ループ内のPIPELINE 指示子を削除した。そうすると C コードの合成では、リソース使用量が減った様にレポートされたが、Export RTL したらリソース使用量が急激に増えてしまった。結局うまく行かなかった。その後の解析で、どうやら除算をしているようで、それがリソース使用量の大半を占めていることが分 かった。
考えてみれば、DMA 数を設定できるということは、バーストの数を数えて行く必要がある、ということで除算を使用しているのだと思う。(私ならば減算していくが。。。)そこで、予めDMA 数をコンパイラが数えられるように定数にすれば、コンパイラが静的に解析できるはずだ。今回は X_SIZE と Y_SIZE を定数として与えてみよう。

Vitis 2019.2 で自作カーネルを使用してストーミング接続を試す1
今まで作ってきた krnl_dma_read , krnl_lap_filter , krnl_dma_write をストーミング接続した Vitis 2019.2 プロジェクトを作成して、動作を確認することにした。プロジェクト名は streaming_lap_filter だ。
Vitis 2019.2 で streaming_lap_filter アプリケーション・プロジェクトを作成した。
Vitis 2019.2 で自作カーネルを使用してストーミング接続を試す2
前回は、今まで作ってきた krnl_dma_read , krnl_lap_filter , krnl_dma_write をストーミング接続した Vitis 2019.2 プロジェクトを作成して、動作を確認することにした、ということで、Vitis 2019.2 の streaming_lap_filter プロジェクトを作成した。今回は、ソースコードを入れていってプロジェクトを完成させた。ビルド成功した。
Vitis 2019.2 で自作カーネルを使用してストーミング接続を試す3
前回は、Vitis 2019.2 の streaming_lap_filter プロジェクトにソースコードを入れてプロジェクトを完成させたあとで、ビルドに成功した。今回は、Run Configuration を作成して、実機動作を行ったが、成功しなかった。
Vitis 2019.2 で自作カーネルを使用してストーミング接続を試す4(ChipScope で波形を確認する1)
前回は、Vitis 2019.2 の streaming_lap_filter プロジェクトの Run Configuration を作成して、実機動作を行ったが、成功しなかった。今回は、その原因を探るために、ChipScope を入れて波形を確認してみよう。
Vitis 2019.2 で自作カーネルを使用してストーミング接続を試す5(ChipScope で波形を確認する2)
前回は、Vitis 2019.2 の streaming_lap_filter プロジェクトの Run Configuration を作成して、実機動作を行ったが、成功しなかった原因を探るために、ChipScope を入れて波形を確認しようということで、--dk オプションを使用した ILA IP コアの挿入を行った。今回は引き続き、設定を行ってChipScope 波形を観察してみよう。
AXI4 Lite インターフェースを見てみると、dma_read と krnl_lap_filter は AXI4 Lite の Read トランザクションが見えるが、dma_write はRead トランザクションが見えない。
dma_write が起動していないんじゃないか?少なくともケアされていない疑惑が生じている。
なお、ひでみさんに起動できるカーネルは 2 個じゃないか?ということを聞いたので、カーネルを 2 個にして確かめてみよう。
Vitis 2019.2 で自作カーネルを使用してストーミング接続を試す6(AXI4 StreamにFIFOを追加)
前回は、設定を行ってChipScope 波形を観察した結果、dma_write カーネルが動作していないようだということが分かった。今回は、同時に動作できるカーネルが 2 個である場合は、途中に画像全部以上の FIFO があれば、最初の dma_read カーネルが終了し、dma_write カーネルが起動できて、つまり、全てのカーネルが動作するのではないか?という仮説に基づいて krnl_lap_filter カーネルに 4096 深度の FIFO を追加してみようということで追加してみたが動作しなかった。
Vitis 2019.2 で自作カーネルを使用してストーミング接続を試す7(krnl_lap_filter_dmaw.cpp)
前回は、同時に動作できるカーネルが 2 個である場合は、途中に画像全部以上の FIFO があれば、最初の dma_read カーネルが終了し、dma_write カーネルが起動できて、つまり、全てのカーネルが動作するのではないか?という仮説に基づいて krnl_lap_filter カーネルに 4096 深度の FIFO を追加したが、動作しなかった。今回は、カーネルを 2 個にするために krnl_lap_filter と dma_write カーネルを一緒にした krnl_lap_filter_dmaw を作成する。
Vitis 2019.2 で自作カーネルを使用してストーミング接続を試す8(streaming_lap_filter3 プロジェクト)
前回は、カーネルを 2 個にするために krnl_lap_filter と dma_write カーネルを一緒にした krnl_lap_filter_dmaw を作成し、Vivado HLS 2019.2 のプロジェクトを作成してC シミュレーション、C コードの合成、C/RTL 協調シミュレーションを行った。今回は、Vitis 2019.2 で krnl_filter_dmaw.cpp を使用した streaming_lap_filter3 プロジェクトを作成した。ホスト・アプリケーションソフトを作成して動作を確かめてみる。
Vitis 2019.2 で自作カーネルを使用してストーミング接続を試す9(streaming_lap_filter3 プロジェクト2)
前回は、Vitis 2019.2 で krnl_filter_dmaw.cpp を使用した streaming_lap_filter3 プロジェクトを作成した。ホスト・アプリケーションソフトの krnl_streaming_lap_filter_host3.cpp を貼った。今回は、カーネルのストリーミング接続の動作を確かめてみよう。
確かめてみたところ動作した。カーネルが 2 個だったら動作するようだ。
Vitis 2019.2 で自作カーネルを使用してストーミング接続を試す10(streaming_lap_filter3 のプロファイル)
前回は、カーネルのストリーミング接続の動作を実機で確かめたところ成功した。しかし、動作の レイテンシが遅かった。今回は、プロファイルを取得してみよう。なお、今回のプロファイルの設定は、Fixstars Tech Blog の”Zybo+VitisでSDSoC相当の高位合成やってみた”を参考にさせていただいている。

Vitis 2019.2 アプリケーション・プロジェクト ラプラシアン・フィルタAXI4-Streamバージョン5
”Vitis 2019.2 で自作カーネルを使用してストーミング接続を試す10(streaming_lap_filter3 のプロファイル)”で、カーネル間のストリーミング接続は、カーネルを起動するレイテンシがかかっていることが分かった。ここでは、2 個のカーネルを連続して起動していた。それでは、カーネルが 1 個の時はどうなのだろうか? 同じ、ラプラシアン・フィルタの実装で確かめてみよう。もうすでに、Vitis のプロジェクトは作ってあって、ブログも書いてある。
やはり、2 個のカーネルをカーネル間のストリーミング接続するよりも、ハードウェアで接続したほうが速い。

Vitis 2019.2 アプリケーション・プロジェクトでラプラシアン・フィルタAXI4-Streamバージョンのカーネルを複数インスタンス
今回は、Vitis 2019.2 アプリケーション・プロジェクトでラプラシアン・フィルタAXI4-Streamバージョンのカーネルを複数インスタンスしてみよう。

Vitis 2019.2 で RTL カーネルを使用してストーミング接続を試す1
”Vitis 2019.2 で自作カーネルを使用してストーミング接続を試す9(streaming_lap_filter3 プロジェクト2)”でカーネルのストリーミング接続の動作を確かめたところ、カーネルが 2 個だったら動作した。それだったら、RTL カーネルではストリーミング接続できるのか?ということで、krnl_lap_filter_dmaw.cpp と krnl_dma_read.cpp をそれぞれ Vivado HLS 2019.2 で RTL カーネルにしてVitis 2019.2 でストリーミング接続してみよう。
Vitis 2019.2 で RTL カーネルを使用してストーミング接続を試す2
RTL カーネルでストリーミング接続がうまく行くのか?を確かめるために、krnl_lap_filter_dmaw.cpp を Vivado HLS 2019.2 で RTL カーネルにすることにした。前回は、ソースコードを貼って、Vivado HLS 2019.2 のプロジェクトを作成した。今回は、C シミュレーション、C コードの合成、C/RTL 協調シミュレーション、Export RTL を行う。
Vitis 2019.2 で RTL カーネルを使用してストーミング接続を試す3
RTL カーネルでストリーミング接続がうまく行くのか?を確かめるために、krnl_lap_filter_dmaw.cpp を Vivado HLS 2019.2 で RTL カーネルにすることにした。前回は、C シミュレーション、C コードの合成、C/RTL 協調シミュレーション、Export RTL を行って、krnl_lap_filter_dmaw.xo ファイルを出力した。これで krnl_lap_filter_dmaw の RTL カーネル作成は終了した。
Vitis 2019.2 で RTL カーネルを使用してストーミング接続を試す4
前回は、krnl_dma_read.xo と krnl_lap_filter_dmaw.xo ファイルがそろったので、Vitis アクセラレーション・アプリケーション・プロジェクトの streaming_lap_filter5 を作成し、ビルドが成功した。今回は、ビルドしたファイルを使用して、Ultra96-V2 の実機で動作を確認してみよう。

Ultra96-V2 用 Vitis アクセラレーション・プラットフォーム ultra96v2_min2 の公開
いつも使っていて、ikwzm さんの”Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす(ビルド編)”にも使ってもらっているファイルを生成するために使用した Ultra96-V2 用 Vitis アクセラレーション・プラットフォーム ultra96v2_min2 をダウンロード公開します。

ikwzm さんの”Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす”をやってみる1(Ultra96-V2 に Ubuntu 18.04 環境を構築)
ikwzm さんの Qiita の記事”Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす”は Ultra96 の Ubuntu 18.04 上で Vitis の ultra96_min2 アクセラレーション・プラットフォームで作成したアプリケーション・ソフトと xclbin ファイルが動作するということで、ぜひやってみたいと思っていた。
Ubuntu の GUI が上がらない。。。
真っ黒な画面で左上にカーソルが点滅しているだけになってGUI が上がっていないみたいだ。。。みようと思う。
ikwzm さんの”Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす”をやってみる2(Ultra96-V2 に Ubuntu 18.04 環境を構築2)
ikwzm さんの Qiita の記事”Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす”は Ultra96 の Ubuntu 18.04 上で Vitis の ultra96_min2 アクセラレーション・プラットフォームで作成したアプリケーション・ソフトと xclbin ファイルが動作するということで、ぜひやってみたいと思っていた。ということで、前回は、Ultra96-V2 の Ubuntu 18.04 をダウンロードして、MicroSD カードに書いたが GUI が動作しなかった。今回はトラブルシュートをして、GUI が動作したので、環境を構築した。
ikwzm さんの”Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす”をやってみる3(ビルド編)
前回は、ikwzm さんの Ultra96-V2 の Ubuntu 18.04 をダウンロードして、MicroSD カードに書いて動作を確認できて、環境を構築した。今回はその Ultra96-V2 の Ubuntu 18.04 で XRT をダウンロードして、ビルドしてみよう。
ikwzm さんの”Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす”をやってみる4(インストール編)
前回は、Ultra96-V2 の Ubuntu 18.04 で XRT をダウンロードして、ビルドしたところ、ビルドが成功した。今回は、ビルドした XRT をインストールする。
今回の参考と言うか、チュートリアル元は ikwzm さんの”Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす(インストール編)”だ。

Windows10 の WSL で Vitis アクセラレーション・アプリケーション・プロジェクトを作成しビルドする1
Windows10 の WSL で Vitis アクセラレーション・アプリケーション・プロジェクトを作成しビルドしたときの覚書を書いておく。
WSL に Vitis 2019.2 をインストールして、Vitis でアクセラレーション用アプリケーション・プロジェクトのビルドが成功した。
Windows10 の WSL で Vitis アクセラレーション・アプリケーション・プロジェクトを作成しビルドする2
Windows10 の WSL で Vitis アクセラレーション・アプリケーション・プロジェクトを作成しビルドしたときの覚書を書いておくということで、WSL のインストール、WSL への Vitis のインストール、環境設定をおこない、 Vitis のUltra96V2 のアクセラレーション・アプリケーション・プロジェクトのビルドが成功した。今回は、Vivado HLS 、Vivado のプロジェクトを確認して、前回作成した exe ファイルと xclbin ファイルを動作させることができた。

ikwzm さんの”Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす”をやってみる4(実践編)
前回は、ビルドした XRT をインストールした。今回は、XRT を使用して、streaming_lap_fitler5 を動作させることができた。
ikwzm さんの”Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす”をやってみる5(fclkcfg, udmabufインストール編)
XRT を使用して、streaming_lap_fitler5 を動作させることができたが、fclk0 の動作周波数設定をすることができずにデフォルト値でクロックがでているようだった。 ikwzm さんにお聞きしたところ、fclkcfg や udmabuf がインストールされていないということなので、インストールして、もう一度、XRT を使用して、streaming_lap_fitler5 を動作させてみよう。
ikwzm さんの”Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす”をやってみる6(device tree overlay 編)
前回は、fclkcfg や udmabuf がインストールされていないということなので、インストールして、もう一度、XRT を使用して、streaming_lap_fitler5 を動作させてみたところ正常に動作した。今回は、同じラプラシアン・フィルタのアプリで残念だが、lap_filter_axis_dma を試してみたいと思う。そして、リブートすることなしに各ドライバを一旦外して、もう一度 streaming_lap_fitler5 用の zcol を含んだドライバをロードして streaming_lap_fitler5 を動作させてみよう。
ikwzm さんの”Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす”をやってみる7(ソーベル・フィルタ編1)
ラプラシアン・フィルタだけでは寂しいので、フィルタばかりで何なんだが、ソーベル・フィルタの Viits アクセラレーション・アプリケーション・プロジェクトを作ってみた。今日はソースコードを貼っておく。
ikwzm さんの”Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす”をやってみる8(ソーベル・フィルタ編2)
前回は、ラプラシアン・フィルタだけでは寂しいので、フィルタばかりで何なんだが、ソーベル・ フィルタの Viits アクセラレーション・アプリケーション・プロジェクトを作ってみたということで、ソースコードを貼って、Vitis 2019.2 のプロジェクトを作成し、ビルド成功した。今回は、Ultra96V2 の Ubuntu 18.04 に持って行って動作を確認する。
ikwzm さんの”Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす(Vitis編)”をやってみた
kwzm さんの”Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす(Vitis編)”をやってみることにした。
これの記事では、Vitis GUI 上で Vitis のアクセラレーション・アプリケーション・ソフトを動かす

Ultra96-V2 のカメラ入力、ディスプレイ出力付き Vitis アクセラレーション・プラットフォームの作成1(構想編)
いろいろと Vitis にも慣れてきたので、プレーンなプラットフォームではなく機能を追加した Vitis アクセラレーション・プラットフォームを作ってみたい。カメラ入力とディスプレイ出力がある Vitis アクセラレーション・プラットフォームを作ってみることにした。

Xilinx/Vitis_Embedded_Platform_Source を試してみる1(zcu104_base)
Xilinx/Vitis_Embedded_Platform_Source を GitHub で見つけたので、Xilinx 社製の Vitis アクセラレーション・プラットフォームを見てみよう。
今回は、Xilinx_Official_Platforms の zcu104_base を make all してみた。
Xilinx/Vitis_Embedded_Platform_Source を試してみる2(zcu104_smart_camera)
前回は Xilinx 社製の Vitis アクセラレーション・プラットフォームの Xilinx_Official_Platforms の zcu104_base をやってみた。今回は、Xilinx 社製の Vitis アクセラレーション・プラットフォームの Xilinx_Official_Platforms の zcu104_smart_camera をやってみよう。

Ultra96-V2 のカメラ入力、ディスプレイ出力付き Vitis アクセラレーション・プラットフォームの作成2(ハードウェア・コンポーネント編)
前回は、カメラ入力とディスプレイ出力がある Vitis アクセラレーション・プラットフォームを作ってみることにしたという構想を書いた。今回は、Vitis アクセラレーション・プラットフォームのハードウェア・コンポーネントを作成しよう。
Ultra96-V2 のカメラ入力、ディスプレイ出力付き Vitis アクセラレーション・プラットフォームの作成3(ソフトウェア・コンポーネント編)
前回は、Vitis アクセラレーション・プラットフォームのハードウェア・コンポーネントを作成した。今回は、Vitis アクセラレーション・プラットフォームのソフトウェア・コンポーネントを作成しよう。
Ultra96-V2 のカメラ入力、ディスプレイ出力付き Vitis アクセラレーション・プラットフォームの作成3(Vitis アクセラレーション・プラットフォーム作成編)
前回は、Vitis アクセラレーション・プラットフォームのソフトウェア・コンポーネントを作成した。今回は、Vitis アクセラレーション・プラットフォームを作成しよう。
Ultra96-V2 のカメラ入力、ディスプレイ出力付き Vitis アクセラレーション・プラットフォームの作成4(Vitis アプリケーション・プロジェクト作成編)
前回は、Vitis アクセラレーション・プラットフォームを作成した。今回は、lap_filter_axis_dma を使用して Vitis アプリケーション・プロジェクトを作成していこう。
Ultra96-V2 のカメラ入力、ディスプレイ出力付き Vitis アクセラレーション・プラットフォームの作成5(実機確認編)
前回は、lap_filter_axis_dma を使用して Vitis アプリケーション・プロジェクトを作成した。今回は、Ultra96-V2 の実機で確認を行う。環境は ikwzm さんの Ubuntu 18.04 でやってみよう。
なお、ここで注意しなくてはいけないのが、あくまで、アクセラレーション・ハードウェアを動作させるだけのソースコードだったことだ。つまり、プラットフォー ムに追加されているハードウェアを動作させるコードはない。これは後で追加する予定だ。

ikwzm さんの Ultra96-V2 用のUbuntu 18.04 LTS 上でカメラ画像を Vitis アクセラレーション・プラットフォームを使用してラプラシアン・フィルタ処理する1(1 コピー)
カメラ画像入力とディスプレイ出力付きの Ultra96-V2 アクセラレーション・プラットフォームで、アクセラレーション・アプリケーションとしてラプラシアン・フィルタを行い、カメラ入力画像をラプラシアン・フィルタ処理して ディスプレイに出力したいということで、やってみた。

Vitis で作られたアクセラレーション・プラットフォームのハードウェアを自作の制御用ソフトウェアで制御する1
Vitis のアクセラレーション・プラットフォームの IP は独自の制御用ソフトウェアで制御できた。そして、そのアクセラレーション・プラットフォーム上のアクセラレーション・ハードウェアは Vitis 上で作った OpenCL のホスト・アプリケーションで制御できた。しかし、その 2 つを合わせて制御することが私にとっては難しい。そこで、独自の制御用ソフトウェアでアクセラレーション・プラットフォーム上のアクセラレーション・ハードウェアも制御し ようということでやってみた。
Vitis で作られたアクセラレーション・プラットフォームのハードウェアを自作の制御用ソフトウェアで制御する2
Vitis のアクセラレーション・プラットフォームの IP は独自の制御用ソフトウェアで制御できた。そして、そのアクセラレーション・プラットフォーム上のアクセラレーション・ハードウェアは Vitis 上で作った OpenCL のホスト・アプリケーションで制御できた。しかし、その 2 つを合わせて制御することが私にとっては難しい。そこで、独自の制御用ソフトウェアでアクセラレーション・プラットフォーム上のアクセラレーション・ハードウェアも制御し ようということでやってみた。
前回は、Vivado HLS のAXI4 Lite インターフェースのレジスタを確認して、デバイス・ツリー・ソース・ファイルの zocl_laps_dma_cam_dp.dts に lap_filter_axis_dma-uio のエントリを追加した。今回は、前回の結果を元に、cam_dp_ov5642_lap.cpp アプリケーション・ソフトウェアを作成して、コンパイルし実機で動作を確認してみよう。

いままでVitisをやってき た感想
いままでVitis を 6 ヶ月くらいやってきたが、感想としてはAlveo とかのアクセラレーション・カードでは使えると思うが、エッジでは余りメリットが無いのでは?と思う。OpenCL はそれじゃない感が漂うし、PetaLinux のビルドに時間がかかる。

xclbinutil を使ってみる
Xilinx の日本語ビデオ資料の”ザイリンクス XCLBIN ユーティリティの概要 (日本語吹替)”を見たので、xclbinutil を使ってみたくなったので、やってみた。
xclbinutil を使ってみる2(--key-value、 --add-signature、 --get-signature)
前回は、Xilinx の日本語ビデオ資料の”ザイリンクス XCLBIN ユーティリティの概要 (日本語吹替)”を見たので、xclbinutil を使ってみたくなったので、やってみたのだが、一部ビデオの内容にあったのにやらなかったオプションがあった。私には要らなかな?と思ってやらなかったのだが、やはりやっ てみることにした。今回は、その抜けていたオプションの --key-value、 --add-signature、 --get-signature を使ってみよう。

XRT 2020.1 をインストール
Vitis 2020.1 を動作させるのに XRT 2020.1 が必要だと思い、Debian パッケージ版をダウンロードしてインストールした。その際に、XRT 2019.1 とディレクトリを分けて共用させようと思ったのだが、うまく行かなかった。しかし、XRT 2020.1でVitis 2019.2でビルドできて、zocl.ko(これは2019.2)ロードして、Ultra96V2でStreaming_lap_filter5がVitis IDEで動作した。
XRT 2020.1で共用できるみたいだ。X86で動かすわけじゃないからかな?

Ultra96-V2 の Vitis 2020.1 アクセラレーション・プラットフォームを作る1(ハードウェア・コンポーネント編)
Vitis 2020.1 や PetaLinux 2020.1 が出たので、Ultra96-V2 の Vitis 2020.1 アクセラレーション・プラットフォームを作ってみようと思う。
最初に、ハードウェア・コンポーネントを作成していこう。”Ultra96-V2 の Vitis アクセラレーション・プラットフォームの作り方1(ハードウェア・コンポーネント編)”を参考にして、その手順に沿って進めていく。
Ultra96-V2 の Vitis 2020.1 アクセラレーション・プラットフォームを作る2(ソフトウェア・コンポーネント編)
Vitis 2020.1 や PetaLinux 2020.1 が出たので、Ultra96-V2 の Vitis 2020.1 アクセラレーション・プラットフォームを作ってみようと思う。
Ultra96-V2 の Vitis 2020.1 アクセラレーション・プラットフォームを作る3(Vitis 2020.1 でアクセラレーション・プラットフォーム作成)
Vitis 2020.1 や PetaLinux 2020.1 が出たので、Ultra96-V2 の Vitis 2020.1 アクセラレーション・プラットフォームを作ってみようと思う。
Ultra96-V2 の Vitis 2020.1 アクセラレーション・プラットフォームを作る4(Vitis 2020.1 でアプリケーション・プロジェクトを作成)
Vitis 2020.1 や PetaLinux 2020.1 が出たので、Ultra96-V2 の Vitis 2020.1 アクセラレーション・プラットフォームを作ってみようと思う。
前回は、ハードウェア・コンポーネント編、ソフトウェア・コンポーネント編で作成したファイルを元に、Vitis 2020.1 を起動してプラットフォームを作成した。今回は、その作成したプラットフォームを使用して、アプリケーション・プロジェクトを作成し、ビルドしてみよう。
Ultra96-V2 の Vitis 2020.1 アクセラレーション・プラットフォームを作る5(Vitis 2020.1 で作成したアプリを動作されるが動かない!)
前回は、ハードウェア・コンポーネント編、ソフトウェア・コンポーネント編で作成したファイル を元に、Vitis 2020.1 を起動して作成したプラットフォームを使用して vadd アプリケーション・プロジェクトを作成し、ビルドすることができた。今回は、ビルドされた sd_card.img を MicroSD カードに書いて、Ultra96V2 で起動してみたが、 PetaLinux がブートしなかった。

Vitis HLS 2020.1 を使用して IP を作り、Vivado 2020.1 で実装してみよう3(Vitis 編)
Vitis HLS 2020.1 を使用して IP を作り、Vivado 2020.1 で実装してみたいということで、正式リリースされた Vitis HLS 2020.1 を使って IP を作ってみることにしたということで、前回は、前々回作った乗算 IP を使用して、プロジェクトを作成し、Export Hardware Platform が前のバージョンから変更があったので、2 種類試してみた。今回は、前回作成した XSA ファイルを使用して、Vitis 2020.1 でアプリケーション・プロジェクトを作ってビルドし、ZYBO Z7-10 で動作を確認しよう。更に現在は Ubuntu 18.04 上でやっているが、Windows 10 上の Vitis HLS 2020.1, Vivado 2020.1, Vitis 2020.1 だとエンベデッド・プラットフォームを作成するところでエラーが出てしまった。

”Ultra96-V2 の Vitis 2020.1 アクセラレーション・プラットフォームを作る1(ハードウェア・コンポーネント編)”のXSAファイルのエクポートをGUI でやってみる
”Ultra96-V2 の Vitis 2020.1 アクセラレーション・プラットフォームを作る1(ハードウェア・コンポーネント編)”の XSA ファイルのエクスポートは tcl スクリプトで行っていたが、Vitis 2020.1 から GUI でエクスポートできるようになったので、やってみることにしよう。もしかしたら tcl スクリプトでやるのとは違うのだろうか?
試しにやってみたと思う。

ZynqMP-FPGA-Linux で Vitis 2020.1 でビルドした vadd を動作させる1(Micro SD カードの準備)
ZynqMP-FPGA-Linux が Linux Kernel Version v5.4.0 になったということで、”Ultra96-V2 の Vitis 2020.1 アクセラレーション・プラットフォームを作る5(Vitis 2020.1 で作成したアプリを動作されるが動かない!)”でビルドされた sd_card.img を MicroSD カードに書いて、Ultra96V2 で起動してみたが、 PetaLinux がブートしなかった。しかし、”Ultra96-V2 の Vitis 2020.1 アクセラレーション・プラットフォームを作る4(Vitis 2020.1 でアプリケーション・プロジェクトを作成)”で、 binary_container_1.xclbin, vadd アプリケーションが生成されているので、これらを動かしてみたいということで、 ikwzm さんの ZynqMP-FPGA-Linux を使ってみることにした。

Ultra96-V2 の Vitis 2020.1 アクセラレーション・プラットフォームを作る6(Vitis 2020.1 で作成したアプリを動作されるが動かない! 2)
前回記事のコメントで、yanagi さんに”2020.1 need copy boot.src to sd card”ということを教えていただいたので、MicroSD カードの第 1 パーティションに boot.scr をコピーしてみたところ、 u-boot から Linux は起動したのだが、Linux が途中で止まってしまった。まだ、何処かドライバがおかしいか? あるようだ。

ZynqMP-FPGA-Linux で Vitis 2020.1 でビルドした vadd を動作させる2(Debian を起動)
前回は、 ikwzm さんの ZynqMP-FPGA-Linux を使ってみることにしたということで、ブート用の MicroSD カードを作成した。今回は、作成した MicroSD カードをUltra96-V2 に入れて Debian をブートしてみよう。ブートすることができた。
ZynqMP-FPGA-Linux で Vitis 2020.1 でビルドした vadd を動作させる3(XRT インストール、Vitis サンプル・デザインの実行)
前回は、ikwzm さんの ZynqMP-FPGA-Linux を使ってみることにしたということで、作成した MicroSD カードをUltra96-V2 に挿入して起動し、GUI の設定などを行った。今回は、XRT をインストールして、Vitis アクセラレーション・アプリケーションを動作させることができた。
ZynqMP-FPGA-Linux で Vitis 2020.1 でビルドした vadd を動作させる4(vadd の実行)
前回は、ikwzm さんの ZynqMP-FPGA-Linux を使ってみることにしたということで、作成した MicroSD カードをUltra96-V2 に挿入して起動し、XRT をインストールして、Vitis アクセラレーション・アプリケーションを動作させることができた。今回は、Vitis 2020.1 でビルドした vadd と xclbin ファイルを動作させてみよう。うまく行かなかった。
ZynqMP-FPGA-Linux で Vitis 2020.1 でビルドした vadd を動作させる5(libcrypt.so.2 のコピーと vadd の実行)
前回は、Vitis 2020.1 で生成した vadd と binary_container_1.xclbin を Ultra96-V2 の ikwzm さんの ZynqMP-FPGA-Linux で実行してみたが、 libcrypt.so.2 が無いと言われて動作しなかった。今回は、libcrypt.so.2 を見つけたので、 Ultra96-V2 の Debian 上にコピーしてから、 vadd と binary_container_1.xclbin を実行したところ成功した。

Vitis 2020.1 で lap_filter_axis_dma をビルドし動作テストを行う1(Vitis プロジェクトの生成とビルド)
”ZynqMP-FPGA-Linux で Vitis 2020.1 でビルドした vadd を動作させる5(libcrypt.so.2 のコピーと vadd の実行)”で、Vitis 2020.1 で生成した vadd と binary_container_1.xclbin を Ultra96-V2 の ikwzm さんの ZynqMP-FPGA-Linux で実行することができた。使用している Vitis 2020.1 のアクセラレーション・プラットフォームは ultra96v2_min2_201 だった。このアクセラレーション・プラットフォームは生成されたイメージで PetaLinux を起動することはできないものの、生成されたアプリケーションと xclbin ファイルは動作することが確認できた。そこで、 lap_filter_axis_dma を動作させてみよう。
Vitis 2020.1 で lap_filter_axis_dma をビルドし動作テストを行う2(実機確認)
Vitis 2020.1 のアクセラレーション・プラットフォームは ultra96v2_min2_201 を使用して、Vitis 2019.2 で動作している lap_filter_axis_dma を動作させてみようということで、前回は、 Vitis 2020.1 で lap_filter_axis_dma アクセラレーション・アプリケーション・プロジェクトを作成して、ビルドし成功した。今回は、ビルドできたホスト・アプリケーションと xclbin ファイルを使って、 ikwzm さんの ZynqMP-FPGA-Linux で実行させてみよう。
データがすべて 0 だった。
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 の自作アクセラレーション・アプリケーション・プロジェクトは結果のデータが 0 で、 array_partition はテストが通った。この違いは何だろう? ホストのOpenCL コードはほとんど一緒なのだが?
プロジェクトの環境変数が違うのだろうか?

Vitis 2020.1 で ultra96v2_min2_201 アクセラレーション・プラットフォームを使用した自作アプリケーション・プロジェクトが動作しない原因がわかった
ここ数日間悩んでいた、 Vitis 2020.1 で ultra96v2_min2_201 アクセラレーション・プラットフォームを使用した自作アプリケーション・プロジェクトが動作しない原因がわかったので、ブログに書いておく。
Vitis 2020.1 では m_axi 指示子を使用して AXI_Master アクセスをする場合に(たぶん offset=slave の場合だと思う)、 AXI4 Lites Slave で再指定する必要があるようだ。

Vitis 2020.1 で lap_filter_axis_dma をビルドし動作テストを行う3(再度、実機確認)
Vitis 2020.1 のアクセラレーション・プラットフォームは ultra96v2_min2_201 を使用して、Vitis 2019.2 で動作している lap_filter_axis_dma を動作させてみようということで、前回は、ビルドできたホスト・アプリケーションと xclbin ファイルを使って、 ikwzm さんの ZynqMP-FPGA-Linux で実行させたが、データがオール 0 で失敗した。失敗する原因は、”Vitis 2020.1 で ultra96v2_min2_201 アクセラレーション・プラットフォームを使用した自作アプリケーション・プロジェクトが動作しない原因がわかった”で解決済みなので、 lap_filter_axis_dma も同様に成功するのか?確かめてみよう。
成功した。

Vitis_Embedded_Platform_Source/Xilinx_Official_Platforms/zcu104_base/ を make してみた
Xilinx 社の GitHub の Xilinx/Vitis_Embedded_Platform_Source の Xilinx_Official_Platforms/zcu104_base を make してみよう。

Xilinx のオフィシャル・プラットフォームのブロックデザインを参考にした ultra96v2_min3_201 プロジェクト(Vitis 2020.1 のアクセラレーション・プラットフォームのハードウェア・コンポーネント)
”Vitis_Embedded_Platform_Source/Xilinx_Official_Platforms/zcu104_base/ を make してみた”で Vitis_Embedded_Platform_Source/Xilinx_Official_Platforms/zcu104_base/ を make したところ、途中でエラーでストップしてしまったが、Vivado のプロジェクトは生成されていて、ブロックデザインも生成されていた。
そのブロックデザインは、axi_vip が 2 つと axi_register_slice 、 axi_intc などの IP が使われていた。なぜそれらの IP が使われているか?分からないが、同じようなブロックデザインで Ultra96V2 の Vivado プロジェクトを作ってみようと思う。つまり、Vitis 2020.1 のアクセラレーション・プラットフォームのハードウェア・コンポーネントを作ってみようと思う。
Xilinx のオフィシャル・プラットフォームのブロックデザインを参考にした ultra96v2_min3_201 プラットフォーム・プロジェクト(ソフトウェア・コンポーネント編)
今回は前回作成した ultra96v2_min3_201 プロジェクトを使用して PetaLinux プロジェクトの ultra96v2_min3_201 を作成し、ビルドしていこう。
Xilinx のオフィシャル・プラットフォームのブロックデザインを参考にした ultra96v2_min3_201 プラットフォーム・プロジェクト(Vitis 2020.1 アクセラレーション・プラットフォーム編)
”Vitis_Embedded_Platform_Source/Xilinx_Official_Platforms/zcu104_base/ を make してみた”で Vitis_Embedded_Platform_Source/Xilinx_Official_Platforms/zcu104_base/ を make した時に生成されたVivado のプロジェクトのブロックデザインを使用して、ハードウェア・コンポーネントを作成し、PetaLinux 2020.1 を使用してソフトウェア・コンポーネントも作成した。今回は、それらを使用して Vitis 2020.1 のアクセラレーション・プラットフォームを作成していこう。

Xilinx のオフィシャル・プラットフォームのブロックデザインを参考にした ultra96v2_min3_201 プラットフォーム・プロジェクト(vadd アプリケーションの作成編)
”Xilinx のオフィシャル・プラットフォームのブロックデザインを参考にした ultra96v2_min3_201 プラットフォーム・プロジェクト(Vitis 2020.1 アクセラレーション・プラットフォーム編)”で作成した Vitis 2020.1 アクセラレーション・アプリケーション・プラットフォームを使って、サンプル・アプリケーションの vadd を試してみよう。
Xilinx のオフィシャル・プラットフォームのブロックデザインを参考にした ultra96v2_min3_201 プラットフォーム・プロジェクト(実機確認編)
”Xilinx のオフィシャル・プラットフォームのブロックデザインを参考にした ultra96v2_min3_201 プラットフォーム・プロジェクト(Vitis 2020.1 アクセラレーション・プラットフォーム編)”で作成した Vitis 2020.1 アクセラレーション・アプリケーション・プラットフォームを使って作成したサンプル・アプリケーションの vadd はうまく動作しなかった。

Vitis のエンベデッド・ソフトウェア開発フローで Vivado の回路の更新をVitis に反映する
Vitis のエンベデッド・ソフトウェア開発フロー、つまり、Vivado で作成したハードウェアのアプリケーション・ソフトウェアを作成して、実行する時に、Vivado で作成した XSA ファイルを使用して、Vitis でプラットフォームを作り、そこからアプリケーション・ソフトウェアを作成する。一旦、それらのファイルを作成した後で、Vivado で回路を変更したら、Vitis に Vivado の変更を反映する必要がある。その方法を探っていこう。
前回、Vivado Analyzer を入れたビットファイルを Vitis に反映できなかったので、その方法を探っていきたいと言うのが動機だ。

Vitis のデフォルトの Stack size, Heap size は 8k バイトだった
”Vivado HLS 2019.2 で合成した IP を Vivado で使ったが動作しなかった5(デバック編 1)”で、Vivado HLS 2019.2 でニューラルネットワークの IP を作成し、Vivado で IP を使用して回路を作成したが、動作しなかった。 Vivado Analyzer を挿入して AXI インターフェースのアクセスがあるかどうか?を調べてみたところ、アクセスが出てなかった。そして、”Vivado HLS 2019.2 で合成した IP を Vivado で使ったが動作しなかった7(デバック編 3)”で Vitis のアプリケーション・プロジェクトのソフトウェア( mnist_nn_test.c )を小さくすれば動作することが分かった。どうやら、int main() 関数の下に大きな配列を作成したのが原因のようだった。
k林さんに教えていただいたのだが、Vitis のデフォルトの Stack size, Heap size は 8k バイトということだった。これでは、スタックがオーバーフローするのも仕方がない。
k林さんありがとうございました。

”Ultra96v2 Linux-Based Platform in Xilinx Vitis 2020.1”をやってみる1(1- XSA design その1)
前回、自分で Vitis 2020.1 のアクセラレーション・プラットフォームを作成したが、PetaLinux は起動しないままだった。
”Ultra96v2 Linux-Based Platform in Xilinx Vitis 2020.1”を見つけたので、この通りにやってみることにした。
まずは、Vivado でハードウェア・プラットフォームから作成する。
”Ultra96v2 Linux-Based Platform in Xilinx Vitis 2020.1”をやってみる2(1- XSA design その2)
前回は、Vivado 2020.1 でプロジェクトを作り、Zynq UltraScale+ MPSoC を Add IP した。今回は、残りの Vivado 2020.1 で作業をやっていこう。ブロック・デザインを完成させて、論理合成、インプリメンテーション、ビットストリームの生成を行って、XSAファイルをエクスポート した。
”Ultra96v2 Linux-Based Platform in Xilinx Vitis 2020.1”をやってみる3(2- Linux OS その1)
前回、自分で Vitis 2020.1 のアクセラレーション・プラットフォームを作成したが、PetaLinux は起動しないままだった。
”Ultra96v2 Linux-Based Platform in Xilinx Vitis 2020.1”を見つけたので、この通りにやってみることにしたということで、前回は、ハードウェア・プラットフォームを作成して、XSA ファイルを出力した。今回は、PetaLinux を使用して、設定を行っていこう。
”Ultra96v2 Linux-Based Platform in Xilinx Vitis 2020.1”をやってみる4(2- Linux OS その2)
”Ultra96v2 Linux-Based Platform in Xilinx Vitis 2020.1”を見つけたので、この通りにやってみることにしたということで、前回は、PetaLinux を使用して、”petalinux-config -c kernel”まで終了した。今回は、”2- Linux OS”の残りをやっていこう。
”Ultra96v2 Linux-Based Platform in Xilinx Vitis 2020.1”をやってみる5(SDカードのフォーマット)
前回は、”2- Linux OS”の残りを実行し、終了した。今回は、3- Prepare SDCARD で MicroSD カードのフォーマットを行う。
”Ultra96v2 Linux-Based Platform in Xilinx Vitis 2020.1”をやってみる6(3- Prepare SDCARD and Test Linux の残り)
前回は、3- Prepare SDCARD で MicroSD カードのフォーマットを独自の方法で行った。今回は、3- Prepare SDCARD and Test Linux の残りということで、MicroSD カードにファイルを書き込み、 Ultra96V2 にできあがった MicroSD カードを挿入して Linux を起動してみよう。
”Ultra96v2 Linux-Based Platform in Xilinx Vitis 2020.1”をやってみる7(4 – Create Platform)
前回は、MicroSD カードにファイルを書き込み、 Ultra96V2 にできあがった MicroSD カードを挿入して Linux を起動することができた。今回は、Vitis 2020.1 を使用してアクセラレーション・プラットフォームを作成しよう。
”Ultra96v2 Linux-Based Platform in Xilinx Vitis 2020.1”をやってみる7(5- Test the Platform)
前回は、Vitis 2020.1 を使用してアクセラレーション・プラットフォームを作成した。今回は、前回作成したアクセラレーション・プラットフォームを使用してアクセラレーション・アプリケーショ ン・プロジェクトを作成してテストしよう。
”Ultra96v2 Linux-Based Platform in Xilinx Vitis 2020.1”をやってみる8(リモートデバック)
前回は、前々回作成したアクセラレーション・プラットフォームを使用してアクセラレーション・ アプリケーション・プロジェクトを作成してテストし成功した。今回は、”Ultra96v2 Linux-Based Platform in Xilinx Vitis 2020.1”ではやっていないが、TCF Agent が走っているので、リモートデバックをやってみる。

ultra96v2-platform で lap_fitler_axis_dma を試してみる1(プロジェクトの作成とビルド)
””Ultra96v2 Linux-Based Platform in Xilinx Vitis 2020.1”をやってみる7(4 – Create Platform)”で作成した Ultra96V2 用の Vitis アクセラレーション・プラットフォーム ultra96v2-platform を使用して、 lap_filter_axis_dma をビルドしてみよう。
ultra96v2-platform で lap_fitler_axis_dma を試してみる2(Vitis 2019.2 のカーネルコードはVitis 2020.1で使用できない)
前回、Ultra96V2 用の Vitis アクセラレーション・プラットフォーム ultra96v2-platform を使用して、 lap_filter_axis_dma をビルドしたのだが、Vivado を立ち上げてブロックデザインを見ると、使用されていない AXI4-Lite インターフェースがあった。これは、”Vitis HLS 2020.1 と Vivado HLS 2019.2 の違い(AXI4 Master インターフェースでの offset=slave オプション時の扱いの違い)”で探った Vivado HLS と Vitis HLS の違いが原因のようだ。今回は、そこを修正してもう一度ビルドしよう。
ultra96v2-platform で lap_fitler_axis_dma を試してみる2(リモートデバックで動作を確認)
Ultra96V2 用の Vitis アクセラレーション・プラットフォーム ultra96v2-platform を使用して、 lap_filter_axis_dma をビルドしたのだが、Vivado を立ち上げてブロックデザインを見ると、使用されていない AXI4-Lite インターフェースがあった。これは、”Vitis HLS 2020.1 と Vivado HLS 2019.2 の違い(AXI4 Master インターフェースでの offset=slave オプション時の扱いの違い)”で探った Vivado HLS と Vitis HLS の違いが原因のようだ。今回は、そこを修正してもう一度ビルドし成功した。今回は、ビルドできたラプラシアンフィルタをリモートデバックで動作させてみよう。

Vitis アクセラレーション・プラットフォームでデフォルト・クロックを変更する1(Vitis の V++ コンパイラとリンカの設定)
今回の Vitis アクセラレーション・プラットフォームでハードウェア・プラットフォームを作る際にクロックを 100 MHz, 200 MHz, 300 MHz, 600 MHz の 4 つのクロックを生成して、 100 MHz をデフォルト・クロックとして使用するように設定した。
デフォルト・クロック( 100 MHz )を使用してアクセラレーション・ハードウェアを使用してきたが、他のクロックも使用したい。そこで、 200 MHz のクロックを使用できるように Vitis のオプションを探ってみた。
Vitis アクセラレーション・プラットフォームでデフォルト・クロックを変更する2(実機でテスト)
 前回は、200 MHz のクロックを使用できるように Vitis のオプションを探って見つけることができた。今回は、できあがったバイナリと xclbin ファイルを Ultra96V2 で実行した。
Vitis アクセラレーション・プラットフォームでデフォルト・クロックを変更する3(デフォルト・クロックを 300 MHz に変更)
 前回は、動作周波数を 200 MHz に変更して、できあがったバイナリと xclbin ファイルを Ultra96V2 で実行することができた。性能も向上した。今回は、動作周波数を 300 MHz にしてみよう。
Vitis アクセラレーション・プラットフォームでデフォルト・クロックを変更する4(デフォルト・クロックを 300 MHz に変更2)
 前回は、動作周波数を 300 MHz にして Vitis のアクセラレーション・アプリケーション・プロジェクトをビルドすることができた。今回は、できあがったファイルを Ultra96V2 で試したところ成功し、実行時間も短くなった。

Vitis 2020.1 でカーネルの ChipScope Debug をやってみた
Vitis 2020.1 でカーネルの ChipScope Debug をやってみることにした。

Vitis 2020.1 の Protocol Checker をやってみた
Vitis 2020.1 で Protocol Checker を入れて試してみよう。
Protocol Checker は相当前に ChipScope AXI Monitor を試してみたことがあったが、それと同じようなものだろうか?
slot0 と slot1 に Protocol Checker Assertion が追加されていた。

Vitis 2020.1 で Application Timeline を確認する
Vitis 2020.1 で Application Timeline を確認してみよう。

Vitis から ZYBO Z7-20 の Quad-SPI Flash に書き込む方法
Vivado でハードウェア回路を作成し、Vitis でアプリケーション・ソフトウェアを作成して、ZYBO Z7-20 にダウンロードして動作した後で、電源ON でそれを動作させたいというときに ZYBO Z7-20 に搭載されている Quad-SPI Flash に Boot.bin を書く方法を書いておく。

Windows 10 のVivado 2021.1 と Vitis 2021.1 で Vitis HLS 2021.1 の AXI4-Liteを使用した IP を実装する1
2020.2 の時は、”Windows 10 版の Vitis HLS 2020.2 で作成した AXI4Lite インターフェースの IP を使用した回路は Vitis 2020.2 でプラットフォームがビルドできない”の記事のように Windows 10 では、Vitis 2020.2 でアプリケーション・プロジェクトをビルドするときにビルド・エラーになっていた。

2021.1 ではどうだろうか?
今回は、”Vitis HLS 2021.1 を使ってみる(DMA_pow2)”の DMA_pow2 IP を Vivado 2021.1 でブロックデザイン上に実装して、論理合成、インプリメンテーション、ビットストリームの生成を行う。そして、XSAファイルを生成する。
Windows 10 のVivado 2021.1 と Vitis 2021.1 で Vitis HLS 2021.1 の AXI4-Liteを使用した IP を実装する2
前回は、”Vitis HLS 2021.1 を使ってみる(DMA_pow2)”の DMA_pow2 IP を Vivado 2021.1 でブロックデザイン上に実装して、論理合成、インプリメンテーション、ビットストリームの生成を行った。そして、XSAファイルを生成した。
今回は、Vitis 2021.1 を立ち上げて、プラットフォームとアプリケーション・プロジェクトを作成して、ビルドを行い、ZYBO Z7-10 で動作させたところ、問題無く動作した。

SD カード・ブートモードの Zynq UltraScale+ MPSoC で Vitis を使用してコンフィギュレーション、ソフトウェアを起動する
””MicroZed Chronicles: Kria & Raspberry Pi Camera”をやってみる4”で Adam Taylor さんが用意してくれた Viits 2021.1 の display_port_app アプリケーション・プロジェクトは動作した。しかし、自分で作成した Vitis のアプリケーション・プロジェクトを動かしてみたい。しかし、KV260 には PS_MODE の切り替えスイッチが無いので、JTAG モードに設定できない。そこで、 KV260 の Vitis での制御方法を探ってみた。

xilffs を使用してSDカードにデータを書き込む1
今度、データを SD カードに記録する必要が出てきたので、Vitis のベアメタル・アプリケーションで SDカードに書き込む方法を探っていた。
xilffs を使用してSDカードにデータを書き込む2
Vitis のベアメタル・アプリケーションで SDカードの書き込みを試すということで、前回は、Vivado 2021.2 で ZYBO Z7-10 ボード用の xilffs_test プロジェクトを作成し、ブロックデザインを作成し、論理合成、インプリメンテーション、ビットストリームの生成を行った。今回は、ハードウェアをエクスポートし、 Vitis を起動して、プラットフォームとアプリケーション・プロジェクトを作成し、xilffs_polled_example.c を用意して、コンパイルした。更に、ZYBO Z7-10 に MicroSD カードを入れて、アプリケーション・ソフトウェアを実行した。
xilffs を使用してSDカードにデータを書き込む3(SD カードの書き込み時間間隔の最大値を確認)
前回は、ハードウェアをエクスポートし、Vitis を起動して、プラットフォームとアプリケーション・プロジェクトを作成し、xilffs_polled_example.c を用意して、コンパイルした。更に、ZYBO Z7-10 に MicroSD カードを入れて、アプリケーション・ソフトウェアを実行した。今回は、前回作成した Vitis プラットフォームを使用して、テキスト・ファイルを SD カードに書き込むアプリケーション・プロジェクトを作成し、アプリケーション・ソフトウェアの file_test.c を書いて、SD カードの書き込み性能を探ってみた。
xilffs を使用してSDカードにデータを書き込む4(300 Hz で書き込み)
前回は、Vitis プラットフォームを使用して、テキスト・ファイルを SD カードに書き込むアプリケーション・プロジェクトを作成し、アプリケーション・ソフトウェアの file_test.c を書いて、SD カードの書き込み性能を探ってみた。結果としては、最大時間間隔は約 2 ms ということが分かった。今回は、300 Hz でデータを書き込めるか?を確かめる。

Vitis 2021.1, 2021.2 の GUI で、ワークスペース設定時にエラーで落ちる
Ubuntu 18.04 LTS の Vitis 2021.1 の GUI を起動してワークスペースを設定しようとしたが、エラーダイアログを出して、落ちてしまう。また、Vitis 2021.2 も同様ということで困っていたのだが、解消することができた。

”Vitis Custom Embedded Platform Creation Example on KV260”をやってみよう1(Step 1: Create the Vivado Hardware Design and Generate XSA その1)
KV260 のアクセラレーション・プラットフォームを作ってみたいということで、丁度良いチュートリアルの”Vitis Custom Embedded Platform Creation Example on KV260”を見つけたので、やってみよう。
最初に”Step 1: Create the Vivado Hardware Design and Generate XSA”からやっていこう。
”Vitis Custom Embedded Platform Creation Example on KV260”をやってみよう2(Step 1: Create the Vivado Hardware Design and Generate XSA その2)
KV260 のアクセラレーション・プラットフォームを作ってみたいということで、前回から”Step 1: Create the Vivado Hardware Design and Generate XSA”をやってみている。前回は、Vivado 2021.1 の kv260_custom_platform プロジェクトを作成し、system ブロック・デザインを作成して Zynq UltraScale+ MPSoC を Add IP した。今回は、system ブロック・デザインのクロックとリセットを作成した。
”Vitis Custom Embedded Platform Creation Example on KV260”をやってみよう3(Step 1: Create the Vivado Hardware Design and Generate XSA その3)
KV260 のアクセラレーション・プラットフォームを作ってみたいということで、”Step 1: Create the Vivado Hardware Design and Generate XSA”をやってみている。前回は、system ブロック・デザインのクロックとリセットを作成した。今回は、割り込み・サポートを追加した。
”Vitis Custom Embedded Platform Creation Example on KV260”をやってみよう4(Step 1: Create the Vivado Hardware Design and Generate XSA その4)
KV260 のアクセラレーション・プラットフォームを作ってみたいということで、”Step 1: Create the Vivado Hardware Design and Generate XSA”をやってみている。前回は、割り込み・サポートを追加した。今回は、Platform の AXI インターフェースをイネーブルし、エミュレーション設定を行って、XSA ファイルを出力した。
”Vitis Custom Embedded Platform Creation Example on KV260”をやってみよう5(Step 2: Create the Software Components その1)
”Step 1: Create the Vivado Hardware Design and Generate XSA”が終了したので、今日からは、”Step 2: Create the Software Components”をやってみたのだが、petalinux-build でエラーになってしまった。
”Vitis Custom Embedded Platform Creation Example on KV260”をやってみよう6(Step 2: Create the Software Components その2)
前回は、”Step 2: Create the Software Components”をやってみたのだが、petalinux-build でエラーになってしまった。今回は、Vivado プロジェクトでビットストリームまで生成し、XSA ファイルにビットストリームをインクルードして、PetaLinux プロジェクトを生成し、petalinux-build したところ成功した。
”Vitis Custom Embedded Platform Creation Example on KV260”をやってみよう7(Step 2: Create the Software Components その3)
前回は、Vivado プロジェクトでビットストリームまで生成し、XSA ファイルにビットストリームをインクルードして、PetaLinux プロジェクトを生成し、petalinux-build したところ成功した。今回は、デバイス・ツリー・オーバーレイを生成する。
”Vitis Custom Embedded Platform Creation Example on KV260”をやってみよう8(Step 3: Create the Vitis Platform その1)
前回は、”Step 2: Create the Software Components”のデバイス・ツリー・オーバーレイを生成した。今回は、”Step 3: Create the Vitis Platform”をやっていこう。
”Vitis Custom Embedded Platform Creation Example on KV260”をやってみよう9(Step 3: Create the Vitis Platform その2)
前回は、”Step 3: Create the Vitis Platform”をやっていこうということで、kv260_custom_platform ディレクトリ以下を作成し、sysroot をインストールした。また、kv260_custom_pkg/pfm ディレクトリに boot ディレクトリと sd_dir ディレクトリを新規作成し、中身をコピーした。今回は、”Step 3: Create the Vitis Platform”の残りの項目の Vitis プラットフォームを作成する。
”Vitis Custom Embedded Platform Creation Example on KV260”をやってみよう10(Step 4: Test the Platform その1)
前回は、、”Step 3: Create the Vitis Platform”の残りの項目の Vitis プラットフォームを作成した。今回は、”Step 4: Test the Platform”をやっていこう。
”Vitis Custom Embedded Platform Creation Example on KV260”をやってみよう11(Step 4: Test the Platform その2)
前回は、”Step 4: Test the Platform”をやっていこうということで、Vitis 2021.1 で vadd アプリケーション・プロジェクトの作成を行った。今回は、実機で動作するための準備を行って、今まで使用していた Kria-PYNQ に FTP して動作させようとしたが、xmutil コマンドが入っていなかった。
”Vitis Custom Embedded Platform Creation Example on KV260”をやってみよう12(Step 4: Test the Platform その3)
前回は、実機で動作するための準備を行って、今まで使用していた Kria-PYNQ に FTP して動作させようとしたが、xmutil コマンドが入っていなかった。今回は、””設計開始 Kria KV260 ビジョン AI スターター キット使用”をやってみる1”の SD カードを用意して、ファイル群をコピーして環境を整えたところ、vadd が動作した。
”Vitis Custom Embedded Platform Creation Example on KV260”をやってみよう13(Step 4: Test the Platform その4)
前回は、””設計開始 Kria KV260 ビジョン AI スターター キット使用”をやってみる1”の SD カードを用意して、ファイル群をコピーして環境を整えたところ、vadd が動作した。今回は、”Step 4: Test the Platform”はもう終わりだが、vadd の生成した Vitis HLS 2021.1 と Vivado 2021.1 のプロジェクトを見ていこう。

作成した KV260 のアクセラレーション・プラットフォームを使用して square を動作させる1
今まで作ってきた KV260 のアクセラレーション・プラットフォームを使用して square アプリケーションを動作させてみよう。
square はデータを 2 乗するアプリケーションだ。
作成した KV260 のアクセラレーション・プラットフォームを使用して square を動作させる2
今まで作ってきた KV260 のアクセラレーション・プラットフォームを使用して square アプリケーションを動作させてみようということで、前回は、ハードウェア化するカーネルの square.cpp とホスト・アプリケーションの square_host.cpp を用意して、プロジェクトの組み込んだ。今回は、Emulation-HW と Hardware のビルドを行って成功した。Emulation-HW を実行したが vadd 同様にエラーだった。そして、 square.bit.bin, square.dtbo などのファイルを用意した。
作成した KV260 のアクセラレーション・プラットフォームを使用して square を動作させる3
前回は、プロジェクトの準備が終了したので、ビルドを行ったが、エラーになった。エラーの原因 のカーネル関数の INTERFACE 指示子を削除したところ、ビルドが成功した。それに、square.bit.bin、 vadd.dtbo ファイルを作成した。今回は、KV260 の Petalinux を起動して、KV260 に用意したファイルを転送し、square の動作を確かめた結果、成功した。
作成した KV260 のアクセラレーション・プラットフォームを使用して square を動作させる4
前回は、KV260 の Petalinux を起動して、KV260 に用意したファイルを転送し、square の動作を確かめた結果、成功した。今回は、生成された Vitis HLS 2021.1 のプロジェクトと Vivado 2021.1 のプロジェクトを見ていこう。

XRT でアクセラレーション・カーネルのホスト・アプリケーションを書いてみよう1
前回までは、アクセラレーション・カーネルを OpenCL を使用したホスト・アプリケーションで制御していたが、XRT を使用してホスト・アプリケーションを書くこともできる。
”FPGAカーネル超入門 (2)”を参照して、OpenCL コードの代わりに低レベルの XRT コードを使用して、ホスト・アプリケーションを作成してみよう。
XRT でアクセラレーション・カーネルのホスト・アプリケーションを書いてみよう2
”FPGAカーネル超入門 (2)”を参照して、OpenCL コードの代わりに低レベルの XRT コードを使用して、ホスト・アプリケーションを作成してみようということで、前回は、"xclbinutil --info -i binary_container_1.xclbin"で xclbin ファイルの情報を確認した。今回は、IP_LAYOUT、 MEM_TOPOLOGY、 CONNECTIVITY、 EMBEDDED_METADATA の 4 つのセクションの情報を確認した。
XRT でアクセラレーション・カーネルのホスト・アプリケーションを書いてみよう3
”FPGAカーネル超入門 (2)”を参照して、OpenCL コードの代わりに低レベルの XRT コードを使用して、ホスト・アプリケーションを作成してみようということで、前回は、IP_LAYOUT、 MEM_TOPOLOGY、 CONNECTIVITY、 EMBEDDED_METADATA の 4 つのセクションの情報を確認した。今回は、”FPGAカーネル超入門 (2)”の”4. XRTコアライブラリによるプログラミング”を Vitis 2021.1 でやっていこう。
XRT でアクセラレーション・カーネルのホスト・アプリケーションを書いてみよう4
前回は、”FPGAカーネル超入門 (2)”の”4. XRTコアライブラリによるプログラミング”を Vitis 2021.1 でやっていたらビルドでエラーが発生した。今回は、エラーを解消することができてビルドが成功した。
XRT でアクセラレーション・カーネルのホスト・アプリケーションを書いてみよう5
前回は、XRT のライブラリをリンクして、ビルドを成功させることができた。今回は、vadd_xrt.bit.bin と vadd_xrt.dtbo を作成し、ファイルを KV260 に SFTP でアップデートし、動作を確認したところ、エラーだった。
XRT でアクセラレーション・カーネルのホスト・アプリケーションを書いてみよう6
前回は、、vadd_xrt.bit.bin と vadd_xrt.dtbo を作成し、ファイルを KV260 に SFTP でアップデートし、動作を確認したところ、xclOpen でエラーが発生した。今回は、ikwzm さんのの助けがあり、vadd_xrt.c のソースコードの xclbin ファイルの名前を修正してもう一度やってみたところ、今度は、xclOpenContext で Invalid argument になってしまった。
XRT でアクセラレーション・カーネルのホスト・アプリケーションを書いてみよう7
前回は、ikwzm さんのの助けがあり、vadd_xrt.c のソースコードの xclbin ファイルの名前を修正してもう一度やってみたところ、今度は、xclOpenContext で Invalid argument になってしまった。今回は、xclOpenContext の CU の数は 1 の様なので、CU の数を 3 から 1 に変更してやってみたところ data different !! (0) だった。

Vitis の Native XRT Examples の Hello World XRT をやってみる1
前回まで、”FPGAカーネル超入門 (2)”を参照して、OpenCL コードの代わりに低レベルの XRT コードを使用して、ホスト・アプリケーションを作成していたが、うまく行かなかった。そこで、Vitis に Native XRT Examples があることが分かったので、その内の Hello World XRT をやってみることにした。
Vitis の Native XRT Examples の Hello World XRT をやってみる2
前回は、Vitis に Native XRT Examples があることが分かったので、その内の Hello World XRT をやってみることにしたということで、Vitis 2021.1 で helloworld_xrt プロジェクトを作成し、Hello World XRT (XRT Native API's) を選択してプロジェクトを作成した。そして、ビルドを行って成功した。今回は、bin ファイルを作成し、dtbo ファイルを作成して、ファイルを KV260 に転送し、動作させみたところ成功した。

RGB 24 ビット・データ入出力対応のメディアン・フィルタを Vitis HLS 2021.2 で作成する3
前回から時間が経っているが、前回は、RGB 24 ビット・データ入出力対応のメディアン・フィルタ median_axis_RGB24 の C シミュレーション、C コードの合成、C/RTL 協調シミュレーション、Export RTL、Implementation を行った。前回は、100 MHz 対応の solution1 だったが、200 MHz 対応の solution2 を作成し、C コードの合成、C/RTL 協調シミュレーション、Export RTL、Implementation を行った。

メディアン・フィルタを含んだ Vitis アクセラレーション・プラットフォームを作成する1(Vivado で kv260_median_platform プロジェクトを作成1)
”RGB 24 ビット・データ入出力対応のメディアン・フィルタを Vitis HLS 2021.2 で作成する3”のメディアン・フィルタ IP を使用して、kv260_median_platform プロジェクトを Vivado 2021.1 で作成する。
メディアン・フィルタを含んだ Vitis アクセラレーション・プラットフォームを作成する2(Vivado で kv260_median_platform プロジェクトを作成2)
メディアン・フィルタ IP を使用した kv260_median_platform プロジェクトを Vivado 2021.1 で作成するということで、前回は、kv260_median_platform プロジェクトを作成し、system ブロック・デザインを紹介した。今回は、Platform Setup ウインドウの設定を紹介し、エミュレーション設定をして、論理合成、インプリメンテーション、ビットストリームの生成を行って成功した。
メディアン・フィルタを含んだ Vitis アクセラレーション・プラットフォームを作成する3(Vivado で kv260_median_platform プロジェクトを作成3)
前回は、Platform Setup ウインドウの設定を紹介し、エミュレーション設定をして、論理合成、インプリメンテーション、ビットストリームの生成を行って成功した。今回は、ハードウェアをエクスポー トして、XSA ファイルを生成した。
メディアン・フィルタを含んだ Vitis アクセラレーション・プラットフォームを作成する4(ソフトウェア・コンポーネント編1)
前回は、Vivado 2021.1 で XSA ファイルを生成して、Vivado パートは終了した。今回は、Petalinux で kv260_median_platform 用の Petalinux をビルドした。
メディアン・フィルタを含んだ Vitis アクセラレーション・プラットフォームを作成する5(ソフトウェア・コンポーネント編2)
前回は、Petalinux で kv260_median_platform 用の Petalinux をビルドした。今回は、デバイス・ツリー・オーバーレイを生成する。pl.dtsi, pl.dtbo を作成した。
メディアン・フィルタを含んだ Vitis アクセラレーション・プラットフォームを作成する6(プラットフォームの作成1)
前回は、デバイス・ツリー・オーバーレイを生成した。今回は、sysroot をインストールし、 boot ディレクトリと sd_dir ディレクトリを用意する。
メディアン・フィルタを含んだ Vitis アクセラレーション・プラットフォームを作成する7(プラットフォームの作成2)
前回は、sysroot をインストールし、 boot ディレクトリと sd_dir ディレクトリを用意した。今回は、Vitis 2021.1 で kv260_median アクセラレーション・プラットフォームを作成した。
メディアン・フィルタを含んだ Vitis アクセラレーション・プラットフォームを作成する8(プラットフォームのテスト1)
前回は、Vitis 2021.1 で kv260_median アクセラレーション・プラットフォームを作成した。今回は、vadd アプリケーション・プロジェクトを作成し、ビルドして成功した。そして、Vitis HLS 2021.1 のプロジェクトと Vivado 2021.1 のプロジェクトを見ていこう。
メディアン・フィルタを含んだ Vitis アクセラレーション・プラットフォームを作成する9(プラットフォームのテスト2)
前回は、vadd アプリケーション・プロジェクトを作成し、ビルドして成功した。そして、Vitis HLS 2021.1 のプロジェクトと Vivado 2021.1 のプロジェクトを見た。今回は、KV260 に転送するファイルを準備して、KV260 にファイルを転送し、KV260 で vadd を動作させた。
メディアン・フィルタを含んだ Vitis アクセラレーション・プラットフォームを作成する10(メディアン・フィルタのレジスタにアクセスに失敗)
結論としては、Vitis アクセラレーション・プラットフォームで、プラットフォームに含まれるメディアン・フィルタにアクセスしようとしているが krnl.read_register() では、Vitis で作られたアクセレーション・カーネルのみアクセスすることができて、プラットフォームの IP にはアクセスすることができないようだ。
メディアン・フィルタを含んだ Vitis アクセラレーション・プラットフォームを作成する10(UIO を使ったレジスタ設定に失敗)
”ZYBO (Zynq) 初心者ガイド (16) Linuxから自作IPをUIOで制御する”を参考にさせていただいて、プラットフォームに含まれるメディアン・フィルタや axi_dma を UIO にマップしようとしたが、今回のプラットフォームは Xilinx イメージで作られた SD カードでブートされた Petalinux 上でデバイス・ツリー・オーバーレイでロードされているので、UIO ドライバを有効にすることができていない。

kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる1
kv260_median_platform に埋め込まれているメディアン・フィルタを OpenCV 3.4.16 をインストールした KV260 の Petalinux から動作させてみよう。

u-dma-buf を Petalinux 2021.1 でビルドする
kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる1”で連続領域のメモリにマップできる u-dma-buf の必要性を痛感したので、Petalinux 2021.1 で u-dma-buf をビルドし成功した。
Petalinux 2021.1 でビルドした u-dma-buf を insmod する
”u-dma-buf を Petalinux 2021.1 でビルドする”で作成した u-dma-buf.ko を KV260 の Petalinux に SFTP してコピーし、insmod してみたところ、無事に u-dma-buf がロードできた。

v260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる2
前回は、medianf_pf.cpp を作成したが、メモリ上にDMA 用の連続領域を取れないというバグがあった。今回は、”u-dma-buf を Petalinux 2021.1 でビルドする”で作成した u-dma-buf.ko を使用して、メモリ上に連続領域を取れることになったので、u-dma-buf を利用するように medianf_pf.cpp を書き直して、ビルドして成功した。
kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる3
現在行っていることは、kv_median_platform でメディアン・フィルタ付きのプラットフォームを作成したので、プラットフォームのメディアン・フィルタを動作させてみたいということだ。プラットフォームにメディアン・ フィルタが付いているとそのプラットフォームを元に作成した Vitis アクセラレーション・アプリケーションのカーネルもメディアン・フィルタ付きになる。
前回は、”u-dma-buf を Petalinux 2021.1 でビルドする”で作成した u-dma-buf.ko を使用して、メモリ上に連続領域を取れることになったので、u-dma-buf を利用するように medianf_pf.cpp を書き直して、ビルドして成功した。今回は、前回作成された medianf_pf 実行ファイルを実行してメディアン・フィルタ処理後のファイルを作成したが、画像のノイズが除去されていない。
kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる4
前回は、medianf_pf 実行ファイルを実行してメディアン・フィルタ処理後のファイルを作成したが、ノイズが取れていなかった。今回は、ソースコードを見直して、やり直してみたが、今度は真っ黒 な画像だった。
kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる5
前回は、メディアン・フィルタを動作させるソースコードを見直して、やり直してみた が、今度は真っ黒な画像だった。今回は、Vitis アクセラレーション・アプリケーション・プロジェクト vadd_xrt の Vivado 2021.1 プロジェクトのブロック・デザインに ILA を挿入して、vadd.bit.bin を作成した。
kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる6
前回は、Vitis アクセラレーション・アプリケーション・プロジェクト vadd_xrt の Vivado 2021.1 プロジェクトのブロック・デザインに ILA を挿入して、vadd.bit.bin を作成した。今回は、vadd.bit.bin を KV260 の Petalinux にアップロードし、KV260 上でロードして、ILA ダッシュボードを開いてデバッグする。とりあえず、median_axis_RGB_0 の設定を確認した。
kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる7
前回は、vadd.bit.bin を KV260 の Petalinux にアップロードし、KV260 上でロードして、ILA ダッシュボードを開いてデバッグした。とりあえず、median_axis_RGB_0 の設定を確認した。今回は、AXI DMA の設定が間違っていることに気付いて、アプリケーション・ソフトウェアを修正したら、median_filter.jpg がノイズを除去した画像ファイルになったが、色が違っていた。

_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる8
2021.1 バージョンのツールで、メディアン・フィルタ入りのハードウエア・プラットフォームを作成し、Petalinux でソフトウェア・プラットフォームを作成して、Vitis アクセラレーション・プラットフォームの kv260_median_platform を作成した。プラットフォームのメディアン・フィルタを使おうと /dev/mem を使用して、メディアン・フィルタを使用したが、RGB のはずが RBG で色がおかしくなっていた。今回は、2022.1 バージョンのツールを使用して、Vitis アクセラレーション・プラットフォームを作成して行こうと思うが、色を RBG に修正して、また、multi_axi4ls IP を追加して、ハードウエア・プラットフォームを作成していこう。
kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる9
前回は、2022.1 バージョンのツールを使用して、Vitis アクセラレーション・プラットフォームを作成して行こうと思うが、色を RBG に修正して、また、multi_axi4ls IP を追加して、ハードウエア・プラットフォームを作成する。ということで、Vivado 2021.1 の kv260_custom_platform プロジェクトをコピーして、Vivado 2022.1 で読み込んでアップグレードした。そして、ブロック・デザインに multi_axi4ls IP と AXI4-Stream Subset Converter を追加して配線して、論理合成、インプリメンテーション、ビットストリームの生成を行った。今回は、ハードウエアをエクスポートする。そして、Petalinux 2022.1 で kv260_median_plnx プロジェクトを作成し、petalinux-config で設定を行って、petalinux-build すると成功した。また、petalinux-build --sdk も成功した。
なお、使用しているパソコンの OS は Ubuntu 18.04 LTS だ。
kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる10
前回は、ハードウエアをエクスポートした。そして、Petalinux 2022.1 で kv260_median_plnx プロジェクトを作成し、petalinux-config で設定を行って、petalinux-build すると成功した。また、petalinux-build --sdk も成功した。今回は、デバイス・ツリー・オーバーレイを生成する。
kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる11
前回は、デバイス・ツリー・オーバーレイを生成した。今回は、sysroot をインストールし、 boot ディレクトリと sd_dir ディレクトリを用意する。
kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる12
前回は、sysroot をインストールし、 boot ディレクトリと sd_dir ディレクトリを用意した。今回は、Vitis 2022.1 で kv260_median アクセラレーション・プラットフォームを作成する。
kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる13
前回は、、Vitis 2022.1 で kv260_median アクセラレーション・プラットフォームを作成した。今回は、作成した kv260_median アクセラレーション・プラットフォームを使用して、vadd アプリケーション・プロジェクトを作成し、ビルドして成功した。そして、Vitis HLS 2022.1 のプロジェクトと Vivado 2022.1 のプロジェクトを見ていこう。
kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる14
前回は、作成した kv260_median アクセラレーション・プラットフォームを使用して、vadd アプリケーション・プロジェクトを作成し、ビルドして成功した。そして、Vitis HLS 2022.1 のプロジェクトと Vivado 2022.1 のプロジェクトを見た。今回は、system.bit から vadd.bit.bin を作成し、vadd.dtbo ファイルを用意した。更に、pl.dtsi を vadd.bit.bin を使用するように変更し、再度コンパイルして、pl.dtbo を作成し、名前を vadd.dtbo に変更した。shell.json ファイルを作成した。最後に、5 つのファイルを KV260 で動作する Petalinux に SFTP で送った。
kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる15
前回は、system.bit から vadd.bit.bin を作成し、vadd.dtbo ファイルを用意した。更に、pl.dtsi を vadd.bit.bin を使用するように変更し、再度コンパイルして、pl.dtbo を作成し、名前を vadd.dtbo に変更した。shell.json ファイルを作成した。最後に、5 つのファイルを KV260 で動作する Petalinux に SFTP で送った。今回は、すでにロードされているハードウェアをアンロードして、vadd をロードし、vadd を走らせたが、”./vadd: cannot execute binary file: Exec format error”で異常終了した。
kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる16
前回は、すでにロードされているハードウェアをアンロードして、vadd をロードし、vadd を走らせたが、”./vadd: cannot execute binary file: Exec format error”で異常終了した。今回は、異常終了する原因を探ってみた。file コマンドで vadd を見たところ、x86 バイナリだった。これが原因だ。。。

KV260 のブートファームウェアを更新した
KV260 で動作する Petalinux のバージョンを 2022.1 にするに当たって、ブートファームウェアを更新する必要があるそうだ。

kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる17
前回は、異常終了する原因を探ってみた。file コマンドで vadd を見たところ、x86 バイナリだったので、これが原因だった。今回は、再度、Vitis 2022.1 で vadd アクセラレーション・アプリケーション・プロジェクトを削除して、再度 vadd を作り直したところ、ARM aarch64 バイナリになった。vadd.bit.bin を作成し、vadd.bit.bin, vadd, binary_container_1.xclbin を KV260 の Petalinux に転送して、vadd を動作せたところ、”/lib/libc.so.6: version `GLIBC_2.34' not found (required by ./vadd)”エラーになってしまった。

KV260 用 Petalinux 2022.1 のイメージを MicroSD カードに書いた1
KV260 の Petalinux をバージョン 2022.1 にするために”KRIA KV260のSDカードイメージの導入の仕方(バージョン2022.1)”を参照してやっていこう。
KV260 用 Petalinux 2022.1 のイメージを MicroSD カードに書いた2
KV260 の Petalinux をバージョン 2022.1 にするために、前回は、Kria K26 SOM の Petalinux から Kria Starter Kit 2022.1 の Starter Kit PetaLinux Image をダウンロードし、balenaEtcher でイメージを 32 GB の MicroSD カードに書き込んだ。Micro SD カードを KV260 に挿して、電源 ON したら Petalinux 2022.1 が起動した。今回は、設定を行った。

KV260 用 Petalinux 2022.1 のイメージで SFTP できない
”KV260 用 Petalinux 2022.1 のイメージを MicroSD カードに書いた2”で Petalinux 2022.1 が KV260 で動作したが、FileZilla で SFTP しようとしてもサーバーに接続できない。
KV260 用 Petalinux 2022.1 のイメージで SFTP できない2
”KV260 用 Petalinux 2022.1 のイメージを MicroSD カードに書いた2”で Petalinux 2022.1 が KV260 で動作したが、FileZilla で SFTP しようとしてもサーバーに接続できない、ということで、前回は、openssh-sftp.cortexa72_cortexa53 をインストールしてみたが SFTP を行うことができなかった。今回は、openssh-sftp-server.cortexa72_cortexa53 をインストールしたところ、Ubuntu パソコンから FileZilla で SFTP することができるようになった。

kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる18
前回は、再度、Vitis 2022.1 で vadd アクセラレーション・アプリケーション・プロジェクトを削除して、再度 vadd を作り直したところ、ARM aarch64 バイナリになった。vadd.bit.bin を作成し、vadd.bit.bin, vadd, binary_container_1.xclbin を KV260 の Petalinux に転送して、vadd を動作せたところ、”/lib/libc.so.6: version `GLIBC_2.34' not found (required by ./vadd)”エラーになってしまった。今回は、Petalinux 2022.1 を用意して、再々度 vadd を実行したところ、成功した。

u-dma-buf を Petalinux 2022.1 でビルドする
Petalinux 2022.1 で u-dma-buf をビルドしてみよう。
Petalinux 2021.1 ではすでに u-dma-buf をビルド済みなので、それを参考にして Petalinux 2022.1 でビルドする。
Petalinux 2022.1 でビルドした u-dma-buf を insmod する
”u-dma-buf を Petalinux 2022.1 でビルドする”で作成した u-dma-buf.ko を KV260 の Petalinux に SFTP してコピーし、insmod してみたところ、無事に u-dma-buf がロードできた。

Xilinx の Petalinux 2022.1 イメージの KV260 に OpenCV を dnf でインストールする
”Xilinx の Petalinux 2022.1 イメージの KV260 に OpenCV 3.4.16 をインストールしようとしたが失敗した”で OpenCV 3.4.16 のソースコードをダウンロードして、ビルドしようとしたら、失敗した。
まずは、dnf search で opencv 関連のパッケージがどのくらいあるか?調べてみる。
 OpenCV 4.5.2 をインストールすることができた。
KV260 の Petalinux 2022.1 にインストールした OpenCV 4.5.2 を使った C++ アプリケーション・ソフトウェアを cmake でコンパイルする
元ネタは”KV260 の Petalinux にインストールした OpenCV を使った C++ アプリケーション・ソフトウェアを cmake でコンパイルする”を使っている。インストールした OpenCV 4.5.2 の関数を使った C++ アプリケーション・ソフトウェアを cmake でコンパイルする。

kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる19
dnf で KV260 の Petalinux 2022.1 にいろいろな GUI ソフトウエアをインストールしてきたが、これで環境が整ったため、やっと元ネタに戻ってこれた。今回は、kv260_median プラットフォームのハードウエア・プラットフォームに実装されたメディアン・フィルタを動作させるために、/dev/mem を使用したソフトウエアでメディアン・フィルタを動作させてみようとしたが失敗した。
kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる20
前回は、kv260_median プラットフォームのハードウエア・プラットフォームに実装されたメディアン・フィルタを動作させるために、/dev/mem を使用したソフトウエアでメディアン・フィルタを動作させてみようとしたが失敗した。今回は、System ILA を入れてみようと思ったが、Vitis アクセラレーション・プラットフォームのハードウエア・プラットフォームの不具合なので、System ILA を入れても動作させるまでに手順が大変だ。そこで、printf() デバックをしてみた。
kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる21
前回は、System ILA を入れてみようと思ったが、Vitis アクセラレーション・プラットフォームのハードウエア・プラットフォームの不具合なので、System ILA を入れても動作させるまでに手順が大変だ。そこで、printf() デバックをしてみた。すると、s2mm の DMA 終了待ちループで止まっているようだった。今回は、大体の原因はわかったが、詳しい原因を調べるために、kv260_medeian_platform プロジェクトをコピーして、System ILA を挿入した。
kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる22
前回は、詳しい原因を調べるために、kv260_medeian_platform プロジェクトをコピーして、System ILA を挿入して Vivado 2022.1 で論理合成、インプリメンテーション、ビットストリームの生成を行って、成功した。今回は、生成されたビットファイルと hwh ファイルを使用して、Kria-PYNQ で動作を確認したところ動作した。なぜ?
kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる23
前回は、生成されたビットファイルと hwh ファイルを使用して、Kria-PYNQ で動作を確認したところ動作した。今回は、”axi dma をシンプル DMA モードで動作させる方法”を踏まえて、バグを含んでいると思われる”kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる7”の median_pf.cpp を修正して、KV260 の Petalinux 2022.1 環境で make して、実行してみたが、動作しなかった。その後、試行錯誤の結果、axi dma をリセットしなければ、median_pf が動作することを確認した。

Vitis アクセラレーション・アプリケーション上でハードウエア・プラットフォームの IP を使用する
今、FPGAの部屋のブログでやっているのは、Vitis アクセラレーション・アプリケーション上でハードウエア・プラットフォームの IP を使用したいので、やってみている。
つまり、ハードウエア・プラットフォームに例えばカメラ回路とディスプレイ出力回路を置いといて、Vitis アクセラレーション・アプリケーションとして画像フィルタなどを実装すれば、画像フィルタだけを設計すればカメラ入力ー画像フィルターディスプレイ出力回路が作れて動作す るはずだ。

kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる24
前回は、”axi dma をシンプル DMA モードで動作させる方法”を踏まえて、バグを含んでいると思われる”kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる7”の median_pf.cpp を修正して、KV260 の Petalinux 2022.1 環境で make して、実行してみたが、動作しなかった。その後、試行錯誤の結果、axi dma をリセットしなければ、median_pf が動作することを確認した。今回は、Vitis で前回のソフトウエアを動かそうとしたが、OpenCV ライブラリが使用できなかったので、BMP ファイルを扱うようにソフトウエアを変更した。Vitis で median_pf_bmp アプリケーション・プロジェクトを作成し、アプリケーション・ソフトウエアを書いて、ビルドを行った。ビルドが成功したので、できあがった median_pf_bmp.elf ファイルを Petalinux 2022.1 が起動する KV260 にアップロードし、動作させたところ成功した。
kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる25
前回は、Vitis で前回のソフトウエアを動かそうとしたが、OpenCV ライブラリが使用できなかったので、BMP ファイルを扱うようにソフトウエアを変更した。Vitis で median_pf_bmp アプリケーション・プロジェクトを作成し、アプリケーション・ソフトウエアを書いて、ビルドを行った。ビルドが成功したので、できあがった median_pf_bmp.elf ファイルを Petalinux 2022.1 が起動する KV260 にアップロードし、動作させたところ成功した。今回は、ハードウエア・プラットフォームのメディアン・フィルタを使用して、画像のノイズを除去してから、アクセラレーショ ン・アプリケーションとしてソーベル・フィルタを実装して、エッジを検出するシステムを Vitis アクセラレーション・アプリケーションとして作成する。そのために Vitis 2022.1 で median_sobel_bmp プロジェクトを作成する。
kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる26
前回は、ハードウエア・プラットフォームのメディアン・フィルタを使用して、画像のノイズを除 去してから、アクセラレーション・アプリケーションとしてソーベル・フィルタを実装して、エッジを検出するシステムを Vitis アクセラレーション・アプリケーションとして作成する。そのために Vitis 2022.1 で median_sobel_bmp プロジェクトを作成したが、Templates 画面で Empty Application (C++) を選択したため、こちらで用意したアプリケーション・ソフトウエアがうまくコンパイルでなかったので、このプロジェクトは廃棄した。今回は、ハードウエア・プラットフォー ムのメディアン・フィルタを使用して、画像のノイズを除去してから、アクセラレーション・アプリケーションとしてソーベル・フィルタを実装して、エッジを検出 するシステムを Vitis アクセラレーション・アプリケーションとして作成した。その際に、Templates 画面で Empty Application を選択した。

Viits 2022.1 のアクセラレーション・アプリケーションでカーネルを指定する方法(C++ の場合)
前回は、ハードウエア・プラットフォームのメディアン・フィルタを使用して、画像のノイズを除 去してから、アクセラレーション・アプリケーションとしてソーベル・フィルタを実装して、エッジを検出するシステムを Vitis アクセラレーション・アプリケーションとして作成する。そのために Vitis 2022.1 で median_sobel_bmp プロジェクトを作成した。今回は、sobel_filter_axim_k.cpp をカーネルとして指定するのだが、Vitis 2019.2 で行うカーネルの指定方法と Vitis 2022.1 のカーネル指定方法がだいぶ違っていたので、タイトルを変えて、その方法を書いておく。プロジェクトを作成する際に
Templates 画面で Empty Application (C++) を選択した場合の手順を示している。
Viits 2022.1 のアクセラレーション・アプリケーションでカーネルを指定する方法(C の場合)
前回は、ハードウエア・プラットフォームのメディアン・フィルタを使用して、画像のノイズを除 去してから、アクセラレーション・アプリケーションとしてソーベル・フィルタを実装して、エッジを検出するシステムを Vitis アクセラレーション・アプリケーションとして作成した。その際に、Templates 画面で Empty Application を選択した。今回は、sobel_filter_axim_k.cpp をカーネルとして指定するのだが、Vitis 2019.2 で行うカーネルの指定方法と Vitis 2022.1 のカーネル指定方法がだいぶ違っていたので、タイトルを変えて、その方法を書いておく。プロジェクトを作成する際にTemplates 画面で Empty Application を選択した場合の手順を示している。

kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる27
前回は、sobel_filter_axim_k.cpp をカーネルとして指定するのだが、Vitis 2019.2 で行うカーネルの指定方法と Vitis 2022.1 のカーネル指定方法がだいぶ違っていたので、タイトルを変えて、その方法を書いておく。プロジェクトを作成する際にTemplates 画面で Empty Application を選択した場合の手順を示している。今回は、median_sobel_bmp_host.cpp、 bmp_header.h、 sobel_filter_axim_k.cpp のソースコードを貼っておく。
kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる28
前回は、median_sobel_bmp_host.cpp、 bmp_header.h、 sobel_filter_axim_k.cpp のソースコードを貼った。今回は、Vitis 2022.1 の median_sobel_bmp アクセラレーション・アプリケーション・プロジェクトをビルドしたところ成功した。Vitis HLS のプロジェクトと Vivado のプロジェクトを確認した。
kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる29
前回は、Vitis 2022.1 の median_sobel_bmp アクセラレーション・アプリケーション・プロジェクトをビルドしたところ成功した。Vitis HLS のプロジェクトと Vivado のプロジェクトを確認した。今回は、system.bit から median_sobel_bmp.bit.bin を作成し、median_sobel_bmp.dtbo ファイルを用意した。更に、pl.dtsi を median_sobel_bmp.bit.bin を使用するように変更し、再度コンパイルして、pl.dtbo を作成し、名前を median_sobel_bmp.dtbo に変更した。
kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる30
前回は、system.bit から median_sobel_bmp.bit.bin を作成し、median_sobel_bmp.dtbo ファイルを用意した。更に、pl.dtsi を median_sobel_bmp.bit.bin を使用するように変更し、再度コンパイルして、pl.dtbo を作成し、名前を median_sobel_bmp.dtbo に変更した。今回は、必要なファイルを KV260 の Petalinux 2022.1 に SFTP でアップロードした。median_soble_bmp を実行できるように環境を整備して、実行したところ成功した。

kv260_median アクセラレーション・プラットフォームに Vitis-AI の DPU を追加する1
”kv260_median_platform のメディアン・フィルタを KV260 の Petalinux から動作させる30”で ひとまず KV260 のアクセラレーション・プラットフォーム上の回路とハードウエア・カーネルを連帯させて動作させることができた。これで、UltraScale+ MPSoC のボードで Vitis アクセラレーション・アプリケーション開発ができるようになった。
次のFPGAの部屋のブログのシリーズは、その kv260_median アクセラレーション・プラットフォームに Vitis-AI の DPU を追加してみたい。
kv260_median アクセラレーション・プラットフォームに Vitis-AI の DPU を追加する2
kv260_median アクセラレーション・プラットフォームに Vitis-AI の DPU を追加してみたいということで、前回は、Vitis-AI を git clone した。今回は、Vitis-AI のレシピを Petalinux 2022.1 の project-spec/meta-user ディレクトリにコピーして、rootfsコンフィグに Vitis-AI のエントリを追加し、petalinux-config で設定を行ってから、ビルドしたらエラーが発生した。
kv260_median アクセラレーション・プラットフォームに Vitis-AI の DPU を追加する3
前回は、Vitis-AI のレシピを Petalinux 2022.1 の project-spec/meta-user ディレクトリにコピーして、rootfsコンフィグに Vitis-AI のエントリを追加し、petalinux-config で設定を行ってから、ビルドしたらエラーが発生した。今回は、Vitis-AI ライブラリを有効化する時に CONFIG_vitis-ai-library-dbg にチェックを入れなければビルドが通った。ついでに OpenCV ライブラリも追加して、ビルドを行った。その後、sdk.sh を作成し、Petalinux 2022.1 イメージを作成した。
kv260_median アクセラレーション・プラットフォームに Vitis-AI の DPU を追加する4
前回は、Vitis-AI ライブラリを有効化する時に CONFIG_vitis-ai-library-dbg にチェックを入れなければビルドが通った。ついでに OpenCV ライブラリも追加して、ビルドを行った。その後、sdk.sh を作成し、Petalinux 2022.1 イメージを作成した。今回は、作成した Petalinux 2022.1 イメージを balenaEtcher で MicroSD カードに書き込んで、KV260 でブートしてみたところ、途中で止まってしまった。
kv260_median アクセラレーション・プラットフォームに Vitis-AI の DPU を追加する5
前回は、作成した Petalinux 2022.1 イメージを balenaEtcher で MicroSD カードに書き込んで、KV260 でブートしてみたところ、途中で止まってしまった。今回は、従来から使用している KV260 の Petalinux 2022.1 に Vitis-AI を dnf でインストールしてみよう。
kv260_median アクセラレーション・プラットフォームに Vitis-AI の DPU を追加する6
前回は、従来から使用している KV260 の Petalinux 2022.1 に Vitis-AI を dnf でインストールした。今回は、ホストパソコン上で、sysroot を生成し、DPUCZDX8G をダウンロードし、Vitis 2022.1 の kv260_median_pkg ワークスペースでライブラリのリポジトリに DPUCZDX8G を追加した。
kv260_median アクセラレーション・プラットフォームに Vitis-AI の DPU を追加する7
前回は、ストパソコン上で、sysroot を生成し、DPUCZDX8G をダウンロードし、Vitis 2022.1 の kv260_median_pkg ワークスペースでライブラリのリポジトリに DPUCZDX8G を追加した。今回は、dpuprj アプリケーション・プロジェクトを作成し、dpu_conf.vhを修正した。更に、dpuprj_system_hw_link/Hardware/dpu- link.cfg を修正して、make を行った。
kv260_median アクセラレーション・プラットフォームに Vitis-AI の DPU を追加する8
前回は、dpuprj アプリケーション・プロジェクトを作成し、dpu_conf.vhを修正した。更に、dpuprj_system_hw_link/Hardware/dpu- link.cfg を修正して、make を行った。今回は、DPU が挿入された Vivado プロジェクトのブロック・デザインを確認し、arch.json を kv260_myarch.json として dpuprj_system_hw_link ディレクトリにコピーした。
kv260_median アクセラレーション・プラットフォームに Vitis-AI の DPU を追加する9
前回は、DPU が挿入された Vivado プロジェクトのブロック・デザインを確認し、arch.json を kv260_myarch.json として dpuprj_system_hw_link ディレクトリにコピーした。今回は、dpu.dtbo ファイルを用意して、dpu.dtbo、dpu.xclbin、shell.json ファイルを KV260 の Petalinux 2022.1 に SFTP でアップロードした。KV260 の Petalinux でそれらのファイルを /lib/firmware/xilinx/dpuprj にコピーして xmutil でロードすることができた。
kv260_median アクセラレーション・プラットフォームに Vitis-AI の DPU を追加する10
前回は、dpu.dtbo ファイルを用意して、dpu.dtbo、dpu.xclbin、shell.json ファイルを KV260 の Petalinux 2022.1 に SFTP でアップロードした。KV260 の Petalinux でそれらのファイルを /lib/firmware/xilinx/dpuprj にコピーして xmutil でロードすることができた。今回は、”KV260向けにVitisプラットフォームを作成してDPUを動かす その2 (Vitis 2022.1 + Vitis-AI v2.5)”を参考に進めていく。tf_yolov4_coco_416_416_60.3G_2.5.zip と yolov4_leaky_416_tf-zcu102_zcu104_kv260-r2.5.0.tar.gz を wget して、展開した。Vitis-AI の docker を起動して、conda を実行したところで、エラーになってしまった。
kv260_median アクセラレーション・プラットフォームに Vitis-AI の DPU を追加する11
前回は、tf_yolov4_coco_416_416_60.3G_2.5.zip と yolov4_leaky_416_tf-zcu102_zcu104_kv260-r2.5.0.tar.gz を wget して、展開した。Vitis-AI の docker を起動して、conda を実行したところで、エラーになってしまった。今回は、エラーを解消して、続きの環境の設定と量子化および評価に使用するCOCOデータセットをダウンロードして変換し た。
v260_median アクセラレーション・プラットフォームに Vitis-AI の DPU を追加する12
前回は、エラーを解消して、続きの環境の設定と量子化および評価に使用するCOCOデータセッ トをダウンロードして変換した。今回は、Tensorflowモデルの生成と量子化を行った。
kv260_median アクセラレーション・プラットフォームに Vitis-AI の DPU を追加する13
前回は、Tensorflowモデルの生成と量子化を行った。今回は、コンパイルと prototxtの用意 を行った。
kv260_median アクセラレーション・プラットフォームに Vitis-AI の DPU を追加する14
前回は、コンパイルと prototxtの用意 を行った。今回は、できあがった compiled ディレクトリを KV260 の Petalinux 2022.1 にアップロードした。アプリケーション・ソフトウエアを git clone し、ビルドした。古いモジュールをアンロードして、dpuprj をロードした。アプリケーション・ソフトウエアを実行したところ成功した。
kv260_median アクセラレーション・プラットフォームに Vitis-AI の DPU を追加する15
前回は、できあがった compiled ディレクトリを KV260 の Petalinux 2022.1 にアップロードした。アプリケーション・ソフトウエアを git clone し、ビルドした。古いモジュールをアンロードして、dpuprj をロードした。アプリケーション・ソフトウエアを実行したところ成功した。今回は、前回までで”KV260向けにVitisプラットフォームを作成してDPUを動かす その2 (Vitis 2022.1 + Vitis-AI v2.5)”のチュートリアルは成功した。そこで、kv260_median アクセラレーション・プラットフォームに含まれるメディアン・フィルタを使って、ノイズを除去してから YOLOV4 で物体を認識してみたところ成功した。

Vitis-AI 2.5 の Custom OP Workflow のクイックスタートをやってみる1
Vitis-AI 2.5 の Custom OP Workflow のクリックスタートをやる前に Custom OP Workflow について見ていく。
Vitis-AI 2.5 の Custom OP Workflow のクイックスタートをやってみる2
Vitis-AI 2.5 のカスタム OP ワークフローをやってみようということで、前回は、tf2_custom_op_demo.tar.gz をダウンロードして解凍し、1_run_train.sh を実行して学習した。今回は、量子化を行ってコンパイルして XMODL を生成した。

Vitis-AI 2.5 の Custom OP Workflow のクイックスタートを使って、TensorFlow + Keras で学習した MNIST を XMDEL にする
前回は、たぶん MNIST の量子化を行ってコンパイルして XMODL を生成した。今回は、私が自分で学習した MNIST の h5 ファイルを使用して、XMODEL を作成してみよう。

Vitis-AI 2.5 の Custom OP Workflow のクイックスタートをやってみる3
前回は、量子化を行ってコンパイルして XMODL を生成した。今回は、生成された XMODEL と sample.jpg を KV260 に送って、動作させてみたがエラーになってしまった。
Vitis-AI 2.5 の Custom OP Workflow のクイックスタートを使って、TensorFlow + Keras で学習した MNIST を XMDEL にする2
前回は、私が自分で学習した MNIST の h5 ファイルを使用して、XMODEL を作成した。今回は、その XMODEL を使用して、KV260 の Petalinux 2022.1 で実際に MNIST を動作させたが、結果が微妙だった。

自作の白線間走行用 CNN を Vitis-AI の Custom OP WorkFlow で実行する1
”白線間走行用CNNをKerasで学習する”で学習した白線間走行用 CNN を Vitis-AI のカスタム OP ワークフローで動作させてみたいということで、今回は、修正した train_eval_line.py と quntize_curve_line.py を貼っておく。更に、train_curve_run_image、train_curve_run_label、test_curve_run_image、 test_curve_run_label、学習用データとテスト・データを読み込む curve_dataset.py を Vitis-AI/tf2_custom_op_demo ディレクトリにコピーした。
自作の白線間走行用 CNN を Vitis-AI の Custom OP Flow で実行する2
前回は、修正した train_eval_line.py と quntize_curve_line.py を貼っておく。更に、train_curve_run_image、train_curve_run_label、test_curve_run_image、 test_curve_run_label、学習用データとテスト・データを読み込む curve_dataset.py を Vitis-AI/tf2_custom_op_demo ディレクトリにコピーした。今回は、train_eval_line.py による学習を行った。
自作の白線間走行用 CNN を Vitis-AI の Custom OP Flow で実行する3
前回は、train_eval_line.py による学習を行った。今回は、量子化とコンパイルを行って、XMODEL を生成した。
自作の白線間走行用 CNN を Vitis-AI の Custom OP Flow で実行する4
前回は、量子化とコンパイルを行って、XMODEL を生成した。今回は、XMODEL と テスト用画像を kv260 の Petalinux 2022.1 にアップロードして推論したが、結果が間違っているようだった。
自作の白線間走行用 CNN を Vitis-AI の Custom OP Flow で実行する5
”自作の白線間走行用 CNN を Vitis-AI の Custom OP WorkFlow で実行する1”のソースコードだが、”白線間走行用CNNをKerasで学習する”を見ると、配列の次元の位置を変えるには transpose じゃなくて reshape のようだったので、ソースコードを変更した。

Vitis-AI 2.5 の Custom OP Workflow のクイックスタートをやってみる4
”Vitis-AI 2.5 の Custom OP Workflow のクイックスタートをやってみる3”では、7 の数字の認識だけやったので、時分で書いた手書き数字はどのくらい認識できるか?試してみたところ、8 と 9 の推論が間違っていた。

KR260 で Vitis アクセラレーション・プラットフォームを作成する1
KR260 で Vitis アクセラレーション・プラットフォームを作成してみようということ で、今回は、”Getting Started with the Kria KR260 in Vivado 2022.1”に従ってVivado 2022.1 で kr260_custom プロジェクトを作成し、Zynq UltraScale+ MPSoC IP を Add IP して、”Add Peripheral Support to Kria KR260 Vivado 2022.1 Project”に従って設定を行った。これは、KR260 のファンのコントロールを取り入れたいからだ。
KR260 で Vitis アクセラレーション・プラットフォームを作成する2
前回は、”Getting Started with the Kria KR260 in Vivado 2022.1”に従ってVivado 2022.1 で kr260_custom プロジェクトを作成し、Zynq UltraScale+ MPSoC IP を Add IP して、”Add Peripheral Support to Kria KR260 Vivado 2022.1 Project”に従って設定を行った。今回は、”Getting Started with the Kria KR260 in Vivado 2022.1”を参考にブロック・デザインを完成させた。
KR260 で Vitis アクセラレーション・プラットフォームを作成する3
前回は、”Getting Started with the Kria KR260 in Vivado 2022.1”を参考にブロック・デザインを完成させた。今回は、同様に、”Getting Started with the Kria KR260 in Vivado 2022.1”を参考に Platform Setup を行って、ブロック・デザインを生成し、論理合成、インプリメンテーション、ビットストリームの生成を行って成功した。ハードウェアをエクスポートして、XSA ファイルを生成した。
KR260 で Vitis アクセラレーション・プラットフォームを作成する4
前回は、”Getting Started with the Kria KR260 in Vivado 2022.1”を参考に Platform Setup を行って、ブロック・デザインを生成し、論理合成、インプリメンテーション、ビットストリームの生成を行って成功した。ハードウェアをエクスポートして、XSA ファイルを生成した。今回は、”Getting Started with the Kria KR260 in Vivado 2022.1”を参考にして、petalinux-create で、Petalinux 2022.1 プロジェクトを作成し、petalinux-config を行い、petalinux-build でビルドしたところ成功した。
KR260 で Vitis アクセラレーション・プラットフォームを作成する5
前回は、”Getting Started with the Kria KR260 in Vivado 2022.1”を参考にして、petalinux-create で、Petalinux 2022.1 プロジェクトを作成し、petalinux-config を行い、petalinux-build でビルドしたところ成功した。今回は、その続きで、sdk.sh を作成し、BOOT.BIN を作成した。最後に SD カードのイメージを作成し、SD カードに書き込んだ。
KR260 で Vitis アクセラレーション・プラットフォームを作成する6
KR260 で Vitis アクセラレーション・プラットフォームを作成してみようということで、前回は、sdk.sh を作成し、BOOT.BIN を作成した。最後に SD カードのイメージを作成し、SD カードに書き込んだ。今回は、Vitis ディレクトリ構造を作成して、xsct を使用したデバイスツリー・オーバレイを作成した。
KR260 で Vitis アクセラレーション・プラットフォームを作成する7
前回は、Vitis ディレクトリ構造を作成して、xsct を使用したデバイスツリー・オーバレイを作成した。今回は、Vitis 2022.1 を立ち上げて kr260_custom プラットフォームを作成した。
KR260 で Vitis アクセラレーション・プラットフォームを作成する8
前回は、Vitis 2022.1 を立ち上げて kr260_custom プラットフォームを作成した。今回は、kr260_vadd アプリケーション・プロジェクトを作成し、ビルドを行ったら失敗してしまった。原因は system.dtb が無いためだったので、KR260/kr260_custom_platform/kr260_custom_platform/pfm/boot ディレクトリの system-zynqmp-sck-kr-g-revB.dtb の名前を system.dtb に変更して、kr260_custom をクリーンしてからビルドした。もう一度、kr260_vadd アプリケーション・プロジェクトをビルドしたところビルドに成功した。
KR260 で Vitis アクセラレーション・プラットフォームを作成する9
前回は、kr260_vadd アプリケーション・プロジェクトを作成し、ビルドを行ったら失敗してしまった。原因は system.dtb が無いためだったので、KR260/kr260_custom_platform/kr260_custom_platform/pfm/boot ディレクトリの system-zynqmp-sck-kr-g-revB.dtb の名前を system.dtb に変更して、kr260_custom をクリーンしてからビルドした。もう一度、kr260_vadd アプリケーション・プロジェクトをビルドしたところビルドに成功した。今回は、KR260 にファイルを転送して kr260_vadd を実行したところ成功した。
KR260 で Vitis アクセラレーション・プラットフォームを作成する10
前回は、KR260 にファイルを転送して kr260_vadd を実行したところ成功した。今回は、Vitis のビルド時に作成された Vitis HLS プロジェクトと Vivado プロジェクトを見てみよう。

”RPi+PMOD Connector GPIO with Custom PL Design in Kria KR260”をやってみる1
”RPi+PMOD Connector GPIO with Custom PL Design in Kria KR260”をやってみようということで、今回は、”KR260 で Vitis アクセラレーション・プラットフォームを作成する2”のブロック・デザインに axi_gpio を 4 個追加して、論理合成、インプリメンテーション、ビットストリームの生成を行った。そして、ハードウェアをエクスポートした。
”RPi+PMOD Connector GPIO with Custom PL Design in Kria KR260”をやってみる2
”RPi+PMOD Connector GPIO with Custom PL Design in Kria KR260”をやってみようということで、前回は、”KR260 で Vitis アクセラレーション・プラットフォームを作成する2”のブロック・デザインに axi_gpio を 4 個追加して、論理合成、インプリメンテーション、ビットストリームの生成を行った。そして、ハードウェアをエクスポートした。今回は、Petalinux 2022.1 の linux_os プロジェクトに XSA ファイルをインポートし、ビルドを行って成功した。wic イメージ・ファイルを作成した。
”RPi+PMOD Connector GPIO with Custom PL Design in Kria KR260”をやってみる3
前回は、Petalinux 2022.1 の linux_os プロジェクトに XSA ファイルをインポートし、ビルドを行って成功した。wic イメージ・ファイルを作成した。今回は、wic イメージ・ファイルを balenaEtcher を使用して MicroSD カードに書き込み、KR260 に挿入して Petalinux 2022.1 を起動した。
”RPi+PMOD Connector GPIO with Custom PL Design in Kria KR260”をやってみる4
前回は、wic イメージ・ファイルを balenaEtcher を使用して MicroSD カードに書き込み、KR260 に挿入して Petalinux 2022.1 を起動した。今回は、KR260 の Petalinux 2022.1 に必要なパッケージをインストールした。
”RPi+PMOD Connector GPIO with Custom PL Design in Kria KR260”をやってみる5
前回は、KR260 の Petalinux 2022.1 に必要なパッケージをインストールした。今回は、PL デザインのデバイスツリー・オーバレイを生成して、KR260 の Petalinux に転送するファイルを集めて転送した。
”RPi+PMOD Connector GPIO with Custom PL Design in Kria KR260”をやってみる6
前回は、PL デザインのデバイスツリー・オーバレイを生成して、KR260 の Petalinux に転送するファイルを集めて転送した。今回は、/lib/firmware ディレクトリにファイルをコピーし、PL デザインやデバイスツリー・オーバレイをロードした。/sys/class/gpio を確認し、また操作して、PMOD1 の 1 番ピンの LED を点灯させることができた。
”RPi+PMOD Connector GPIO with Custom PL Design in Kria KR260”をベースにプログラムで Lチカしてみる
””RPi+PMOD Connector GPIO with Custom PL Design in Kria KR260”をやってみる6”を使用して、LED を点滅させるアプリケーション・ソフトウェアの blink_led.c を作成し、コンパイルし、動作させた。

kr260_gpio 用の Vitis アクセラレーション・プラットホームを作成する1
””RPi+PMOD Connector GPIO with Custom PL Design in Kria KR260”をやってみる1”用の Vitis アクセラレーション・プラットホームを作成してみたいということで、今回は、sdk.sh と BOOT.bin を作成する。また、pfm/boot ディレクトリを更新し、sdk.sh を起動して、sysroot を更新した。
kr260_gpio 用の Vitis アクセラレーション・プラットホームを作成する2
””RPi+PMOD Connector GPIO with Custom PL Design in Kria KR260”をやってみる1”用の Vitis アクセラレーション・プラットホームを作成してみたいということで、前回は、sdk.sh と BOOT.bin を作成する。また、pfm/boot ディレクトリを更新し、sdk.sh を起動して、sysroot を更新した。今回は、”KR260 で Vitis アクセラレーション・プラットフォームを作成する7”で作成した kr260_custom アクセラレーション・プラットホームを更新し、”KR260 で Vitis アクセラレーション・プラットフォームを作成する8”で作成した kr260_vadd アプリケーション・プロジェクトを再ビルドを行った。
kr260_gpio 用の Vitis アクセラレーション・プラットホームを作成する3
前回は、”KR260 で Vitis アクセラレーション・プラットフォームを作成する7”で作成した kr260_custom アクセラレーション・プラットホームを更新し、”KR260 で Vitis アクセラレーション・プラットフォームを作成する8”で作成した kr260_vadd アプリケーション・プロジェクトを再ビルドを行った。今回は、kr260_vadd で生成された Vitis HLS 2022.1 のプロジェクトと Vivado 2022.1 のプロジェクトを見た。
kr260_gpio 用の Vitis アクセラレーション・プラットホームをテストする
前回は、kr260_vadd で生成された Vitis HLS 2022.1 のプロジェクトと Vivado 2022.1 のプロジェクトを見たが、4 個の GPIO が実装されていて安心した。今回は、”kr260_gpio 用の Vitis アクセラレーション・プラットホームを作成する2”で作成した。vadd アクセラレーション・アプリケーションを KR260 に転送して、動作させたところ成功した。しかも /sys/class/gpio に axi gpio も実装されていた。

KR260 の kr260_custom アクセラレーション・プラットホームにいろいろな IP を追加する1
KR260 の kr260_custom アクセラレーション・プラットホームにいろいろな IP を追加してみようということで、今回は、の multi_axi4ls と DMA_pow2、そして、Xilinx 社の IP の axi timer、axi dma を Vivado 2022.1 の kr260_custom プロジェクトに追加する。
KR260 の kr260_custom アクセラレーション・プラットホームにいろいろな IP を追加する2
KR260 の kr260_custom アクセラレーション・プラットホームにいろいろな IP を追加してみようということで、前回は、の multi_axi4ls と DMA_pow2、そして、Xilinx 社の IP の axi timer、axi dma を Vivado 2022.1 の kr260_custom プロジェクトに追加して、XSA ファイルを生成した。今回は、Petalinux 2022.1 の linux_os プロジェクトに XSA ファイルをインポートし、ビルドを行って成功した。wic イメージ・ファイルを作成した。wic ファイルを MicroSD カードに書き込んで、KR260 に挿入し、Petalinux 2022.1 を起動した。
KR260 の kr260_custom アクセラレーション・プラットホームにいろいろな IP を追加する3
前回は、Petalinux 2022.1 の linux_os プロジェクトに XSA ファイルをインポートし、ビルドを行って成功した。wic イメージ・ファイルを作成した。wic ファイルを MicroSD カードに書き込んで、KR260 に挿入し、Petalinux 2022.1 を起動した。今回は、KR260 の Petalinux 2022.1 に必要なパッケージをインストールした。
KR260 の kr260_custom アクセラレーション・プラットホームにいろいろな IP を追加する4
前回は、KR260 の Petalinux 2022.1 に必要なパッケージをインストールした。今回は、PL デザインのデバイスツリー・オーバレイを生成して、KR260 の Petalinux に転送するファイルを集めて転送した。
KR260 の kr260_custom アクセラレーション・プラットホームにいろいろな IP を追加する5
前回は、、PL デザインのデバイスツリー・オーバレイを生成して、KR260 の Petalinux に転送するファイルを集めて転送した。今回は、/lib/firmware ディレクトリにファイルをコピーし、PL デザインやデバイスツリー・オーバレイをロードした。/sys/devices/virtual/devlink/platform:firmware:zynqmp- firmware:clock-controller--platform: にプラットホームの IP がロードされているのが確認できた。
KR260 の kr260_custom アクセラレーション・プラットホームにいろいろな IP を追加する6
前回は、/lib/firmware ディレクトリにファイルをコピーし、PL デザインやデバイスツリー・オーバレイをロードした。/sys/devices/virtual/devlink/platform:firmware:zynqmp- firmware:clock-controller--platform: にプラットホームの IP がロードされているのが確認できた。しかし、ハードウェア・プラットホームの IP を使用する方法は分からなかった。今回は、”KV260でVexRiscv動作させた”を参考にして、pl.dtsi を書き換えて、ハードウェア・プラットホーム上の IP を generic-uio に書き換えてみたい。そのため、Petalinux のカーネルを設定して、UIO ドライバをインストールし、UIO ドライバを起動オプションでロードするように設定した。その後、Petalinux をビルドして、SD カードを作成し、KR260 に挿入して Petalinux を起動し、設定を行った。
KR260 の kr260_custom アクセラレーション・プラットホームにいろいろな IP を追加する7
前回は、”KV260でVexRiscv動作させた”を参考にして、pl.dtsi を書き換えて、ハードウェア・プラットホーム上の IP を generic-uio に書き換えてみたい。そのため、Petalinux のカーネルを設定して、UIO ドライバをインストールし、UIO ドライバを起動オプションでロードするように設定した。その後、Petalinux をビルドして、SD カードを作成し、KR260 に挿入して Petalinux を起動し、設定を行った。今回は、pl.dtsi のハードウェア・プラットホームに追加した IP の compatible を generic-uio に書き換えてコンパイルし、pl.dtbo を生成した。再生成した pl.dtbo を kr260_ip.dtbo に名前を変更し、kr260_ip.bin, shell.json と共に SFTP で KR260 の Petalinux 2022.1 に転送した。それらのファイルを /lib/firmware/xilinx/kr260_ip ディレクトリを新規作成してコピーした。既存のアプリケーションをアンロードし、kr260_ip をロードしたところ、/sys/class/uio ディレクトリに新しく uio が生成された。

IP を追加した KR260 の kr260_custom アクセラレーション・プラットホームで multi_axi4ls を動作させた
”KR260 の kr260_custom アクセラレーション・プラットホームにいろいろな IP を追加する7”でハードウェア・プラットホームに実装した IP を UIO にマップすることができた。今回は、その内の multi_axi4ls IP を動作させることができた。

IP を追加した KR260 の kr260_custom アクセラレーション・プラットホームで DMA_pow2 IP を動作させた
”KR260 の kr260_custom アクセラレーション・プラットホームにいろいろな IP を追加する7”でハードウェア・プラットホームに実装した IP を UIO にマップすることができた。”u-dma-buf を KR260 用の Petalinux 2022.1 でビルドする”で u-dma-buf.ko を作成して、Petalinux 2022.1 に実装し、DMA_pow2 IP を動作させたところ、成功した。

IP を追加した kr260_ip 用の Vitis アクセラレーション・プラットホームを作成する1
”KR260 の kr260_custom アクセラレーション・プラットホームにいろいろな IP を追加する1”用の Vitis アクセラレーション・プラットホームを作成してみたいということで、今回は、sdk.sh と BOOT.bin を作成する。また、pfm/boot ディレクトリを更新し、sdk.sh を起動して、sysroot を更新した。
IP を追加した kr260_ip 用の Vitis アクセラレーション・プラットホームを作成する2
前回は、sdk.sh と BOOT.bin を作成する。また、pfm/boot ディレクトリを更新し、sdk.sh を起動して、sysroot を更新した。今回は、kr260_custom アクセラレーション・プラットホームを更新したが、プラットホームをビルドし、kr260_vadd アプリケーション・プロジェクトをビルドしても、Vivado のブロック・デザインに追加した IP が実装されていなかった。次に、プラットホーム・プロジェクトとアプリケーション・プロジェクトを削除して、もう一度 kr260_custom アクセラレーション・プラットホームと kr260_vadd アプリケーション・プロジェクトをビルドしたところ、追加した IP が Vivado のブロック・デザインに追加されていた。
IP を追加した kr260_ip 用の Vitis アクセラレーション・プラットホームをテストする
”KR260 の kr260_custom アクセラレーション・プラットホームを”IP を追加した kr260_ip 用の Vitis アクセラレーション・プラットホームを作成する2”で作成することができて、kr260_vadd アクセラレーション・アプリケーション・プロジェクトもビルドが成功した。今回は、kr260_vadd を KR260 で動作させることができた。
vadd.cpp を書き換えて、multi_axi4ls と DMA_pow2 も動作させる
”IP を追加した kr260_ip 用の Vitis アクセラレーション・プラットホームをテストする”で vadd を動作させた環境で、multi_axi4ls と DMA_pow2_test アプリケーション・ソフトウェアも動作を確認できた。それでは、アクセラレーション・アプリケーションのホストのソフトウェアの vadd.cpp を書き換えて、multi_axi4ls と DMA_pow2 の動作を確認してみよう。当然ながら vadd も同時に動作させてみる。これができればハードウェア・プラットホーム上の IP を動作させながら、アクセラレーション・ハードウェアも同時に動作させることができる。結果は、問題なく動作した。

Vitis アクセラレーション・プラットホームを使用してハードウェアを作り、それを自作アプリケーション・ソフトウェアで動作させる1
Vitis アクセラレーション・プラットホームを使用してハードウェアを完成させ、それを自作アプリケーション・ソフトウェアで動作させてみたいということで、今回は、 kr260_custom アクセラレーション・プラットホームを使用して、vadd サンプル・アプリケーション・プロジェクトを作成し、ホスト・ソフトウェアの vadd.cpp の main() 関数内を削除して、ビルドしたところ成功した。生成された Vivado プロジェクトを確認して、ハードウェアをエクスポートした。
Vitis アクセラレーション・プラットホームを使用してハードウェアを作り、それを自作アプリケーション・ソフトウェアで動作させる2
前回は、kr260_custom アクセラレーション・プラットホームを使用して、vadd サンプル・アプリケーション・プロジェクトを作成し、ホスト・ソフトウェアの vadd.cpp の main() 関数内を削除して、ビルドしたところ成功した。生成された Vivado プロジェクトを確認して、ハードウェアをエクスポートした。今回は、PL デザインの pl.dtsi を生成し、pl.dtsi 上の動作させる IP の compatible を generic-uio に変更して、コンパイルして pl.dtbo を生成した。
Vitis アクセラレーション・プラットホームを使用してハードウェアを作り、それを自作アプリケーション・ソフトウェアで動作させる3
前回は、PL デザインの pl.dtsi を生成し、pl.dtsi 上の動作させる IP の compatible を generic-uio に変更して、コンパイルして pl.dtbo を生成した。今回は、ip_vadd2_file_transfer ディレクトリを作成し、ファイルを集めて、KR260 の Petalinux に転送した。そして、現在、ロードされているアクセラレーション・アプリケーションをアンロードして、kr260_ip_vadd2 をロードしたが、Vitis で生成された krnl_vadd IP は uio として生成されなかった。
Vitis アクセラレーション・プラットホームを使用してハードウェアを作り、それを自作アプリケーション・ソフトウェアで動作させる4
前回は、ip_vadd2_file_transfer ディレクトリを作成し、ファイルを集めて、KR260 の Petalinux に転送した。そして、現在、ロードされているアクセラレーション・アプリケーションをアンロードして、kr260_ip_vadd2 をロードしたが、Vitis で生成された krnl_vadd IP は uio として生成されなかった。今回は、Petalinux の kernel コンフィグレーションで Userspace platform driver with generic IRQ handling を M にしていて、常時組み込まれる * にしてなかったことが気になるので、もう一度 Petalinux のビルドからやってみることにした。Petalinux のビルド後、イメージ・ファイルを生成して、MicroSD カードに書いた。KR260 に MicroSD カードを挿入して Petalinux 2022.1 を起動した。Petalinux にモジュールをインストールして、環境を整えた。
Vitis アクセラレーション・プラットホームを使用してハードウェアを作り、それを自作アプリケーション・ソフトウェアで動作させる5
前回は、Petalinux の kernel コンフィグレーションで Userspace platform driver with generic IRQ handling を M にしていて、常時組み込まれる * にしてなかったことが気になるので、もう一度 Petalinux のビルドからやってみることにした。Petalinux のビルド後、イメージ・ファイルを生成して、MicroSD カードに書いた。KR260 に MicroSD カードを挿入して Petalinux 2022.1 を起動した。Petalinux にモジュールをインストールして、環境を整えた。今回は、ロードされているアクセラレーション・アプリケーションをアンロードして、kr260_ip_vadd2 をロードしたが、やはり、Vitis で生成された krnl_vadd IP は uio として生成されなかった。
Vitis アクセラレーション・プラットホームを使用してハードウェアを作り、それを自作アプリケーション・ソフトウェアで動作させる6
前回は、ロードされているアクセラレーション・アプリケーションをアンロードして、 kr260_ip_vadd2 をロードしたが、やはり、Vitis で生成された krnl_vadd IP は uio として生成されなかった。今回は、pl.dtsi の krnl_vadd セクションを最小限にして、コンパイルし、Petalinux に転送して、ロードしたところ、krnl_vadd が uio8 として実装できた。
Vitis アクセラレーション・プラットホームを使用してハードウェアを作り、それを自作アプリケーション・ソフトウェアで動作させる7
前回は、pl.dtsi の krnl_vadd セクションを最小限にして、コンパイルし、Petalinux に転送して、ロードしたところ、krnl_vadd が uio8 として実装できた。今回は、uio ドライバを使用して、multi_axi4ls IP と DMA_pow2 IP、krnl_vadd IP を使用するアプリケーション・ソフトウェアを作成し、動作を確認した。

Vitis アクセラレーション・プラットホームを使用して作ったハードウェアを KR260 の Ubuntu 22.04 で動作させる1
”Vitis アクセラレーション・プラットホームを使用してハードウェアを作り、それを自作アプリケーション・ソフトウェアで動作させる7”で動作させたハードウェアとソフトウェアを KR260 の Ubuntu 22.04 で動作させて見ようと思う。つまり、今までは、KR260 の Petalinux 2022.1 で動作させていたハードウェアとソフトウェアを Ubuntu 22.04 で動作させてみたい。
Vitis アクセラレーション・プラットホームを使用して作ったハードウェアを KR260 の Ubuntu 22.04 で動作させる2
”Vitis アクセラレーション・プラットホームを使用してハードウェアを作り、それを自作アプリケーション・ソフトウェアで動作させる7”で動作させたハードウェアとソフトウェアを KR260 の Ubuntu 22.04 で動作させてみたいということで、前回は、xmutil コマンドの動作を確認し、u-dma-buf.ko を生成した。今回は、ホスト・パソコンの ip_vadd2_file_transfer の内容を KR260 の Ubuntu 22.04 に転送した。ファイルを /lib/firmware/xilinx/kr260_ip_vadd2 ディレクトリにコピーして、kr260_ip_vadd2 をロードしたが、interrupt-controller が uio として実装されなかった。
Vitis アクセラレーション・プラットホームを使用して作ったハードウェアを KR260 の Ubuntu 22.04 で動作させる3
前回は、ホスト・パソコンの ip_vadd2_file_transfer の内容を KR260 の Ubuntu 22.04 に転送した。ファイルを /lib/firmware/xilinx/kr260_ip_vadd2 ディレクトリにコピーして、kr260_ip_vadd2 をロードしたが、interrupt-controller が uio として実装されなかった。今回は、もう一度、pl.dtsi の interrupt-controller@80000000 の項目を減らして、コンパイルして、KR260 の Petalinux 2022.1 に転送して、kr260_ip_vadd2 をロードしたところ、interrupt-controller が uio に追加された。
Vitis アクセラレーション・プラットホームを使用して作ったハードウェアを KR260 の Ubuntu 22.04 で動作させる4
前回は、もう一度、pl.dtsi の interrupt-controller@80000000 の項目を減らして、コンパイルして、KR260 の Petalinux 2022.1 に転送して、kr260_ip_vadd2 をロードしたところ、interrupt-controller が uio に追加された。今回は、uio のリストが変わってしまったので、アプリケーション・ソフトウェアの kr260_ip_vadd2.c を変更して、コンパイルした。環境を整えて kr260_ip_vadd2 を起動したところ、multi_axi4ls と DMA_pow2 は動作したが、krnl_vadd が終了しなかった。
Vitis アクセラレーション・プラットホームを使用して作ったハードウェアを KR260 の Ubuntu 22.04 で動作させる5
前回は、uio のリストが変わってしまったので、アプリケーション・ソフトウェアの kr260_ip_vadd2.c を変更して、コンパイルした。環境を整えて kr260_ip_vadd2 を起動したところ、multi_axi4ls と DMA_pow2 は動作したが、krnl_vadd が終了しなかった。今回は、Vivado の prj プロジェクトの kr260_bd_wrapper.bin ファイル(KR260/kr260_custom_platform/kr260_custom_platform /kr260_vadd2_system_hw_link/Hardware/binary_container_1.build/link/vivado/vpl/prj/prj.runs/impl_1/kr260_bd_wrapper.bin を binary_container_1.bin の代わりに使用して、自作アプリケーションを実行したが、krnl_vadd の出力は 0 だった。


KR260 を使用した次の課題
KR260 には 4 個の PMOD があるので、これに秋月電子の OV5642 を付けてみたい。
秋月電子の OV5642 は Ultra96 でも使っているので、そのプロジェクトが参考になるはず。
そして、DisplayPort にも出力してみたい。DisplayPort も Ultra96 や KV260 で使用している。

KR260 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームを作成する1
今までやってきた KR260 の Vitis アクセラレーション・プラットホーム作成を踏まえて、DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームを作成しよう。
KR260 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームを作成する2
今までやってきた KR260 の Vitis アクセラレーション・プラットホーム作成を踏まえて、DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームを作成しようということで、前回は、Vivado 2022.1 の kr260_cam_disp プロジェクトと kr260_bd ブロック・デザインを作成し、Zynq UltraScale+ MPSoC IP の設定を行った。今回は、kr260_bd ブロック・デザインの Diagram を完成させた。
KR260 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームを作成する3
前回は、kr260_bd ブロック・デザインの Diagram を完成させた。今回は、Platform ウインドウを設定し、kr260_bd の HDL Wrapper file を作成して、論理合成、インプリメンテーション、ビットストリームの生成を行ったが、論理合成でエラーになった。mt9d111_inf_axis IP と axis2video_out IP 内の pixel_fifo を作り直して、論理合成してもエラーになってしまった。mt9d111_inf_axis IP の pixel_fifo を削除して、cam_pixel_fifo に名前を変更したら論理合成が通った。しかし、write_bitstream でエラーになってしまった。外部入出力ピンの制約が無いのがエラーの原因だ。
KR260 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームを作成する4
前回は、Platform ウインドウを設定し、kr260_bd の HDL Wrapper file を作成して、論理合成、インプリメンテーション、ビットストリームの生成を行ったが、論理合成でエラーになった。mt9d111_inf_axis IP と axis2video_out IP 内の pixel_fifo を作り直して、論理合成してもエラーになってしまった。mt9d111_inf_axis IP の pixel_fifo を削除して、cam_pixel_fifo に名前を変更したら論理合成が通った。しかし、write_bitstream でエラーになってしまった。今回は、前回のエラーはカメラ・インターフェース信号を制約していかなかったことが原因なので、その制約を追加して、 Generate Bitstream したところ、place_desin_ERROR になってしまった。pclk のクロック制約を追加して、やっと、論理合成、インプリメンテーション、ビットストリームの生成が成功した。その後、プラットホームをエクスポートした。
KR260 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームを作成する5
前回は、前々回のエラーはカメラ・インターフェース信号を制約していかなかったことが 原因なので、その制約を追加して、Generate Bitstream したところ、place_desin_ERROR になってしまった。pclk のクロック制約を追加して、やっと、論理合成、インプリメンテーション、ビットストリームの生成が成功した。その後、プラットホームをエクスポートした。今回は、 Petalinux 2022.1 を使用して、petalinux-create で、Petalinux 2022.1 プロジェクトを作成し、petalinux-config を行い、petalinux-build でビルドしたところ成功した。
KR260 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームを作成する6
前回は、Petalinux 2022.1 を使用して、petalinux-create で、Petalinux 2022.1 プロジェクトを作成し、petalinux-config を行い、petalinux-build でビルドしたところ成功した。今回は、sdk.sh を作成し、BOOT.BIN を作成した。最後に MicroSD カードのイメージを作成し、MicroSD カードに書き込んだ。
KR260 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームを作成する7
前回は、sdk.sh を作成し、BOOT.BIN を作成した。最後に MicroSD カードのイメージを作成し、MicroSD カードに書き込んだ。今回は、。KR260 に MicroSD カードを挿入して Petalinux 2022.1 を起動した。Petalinux に必要なモジュールをインストールして、環境を整えた。
KR260 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームを作成する8
前回は、KR260 に MicroSD カードを挿入して Petalinux 2022.1 を起動した。Petalinux に必要なモジュールをインストールして、環境を整えた。今回は、Vitis ディレクトリ構造を作成して、xsct を使用したデバイスツリー・オーバレイを作成し、pl.dtsi 上の動作させる IP の compatible を generic-uio に変更して、コンパイルして pl.dtbo を生成した。
KR260 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームを作成する9
前回は、Vitis ディレクトリ構造を作成して、xsct を使用したデバイスツリー・オーバレイを作成し、pl.dtsi 上の動作させる IP の compatible を generic-uio に変更して、コンパイルして pl.dtbo を生成した。今回は、Vitis 2022.1 を立ち上げて kr260_cam_disp プラットフォームを作成し、kr260_vadd アプリケーション・プロジェクトを作成し、ビルドを行って成功した。Vivado のプロジェクトの kr260_bd ブロック・デザインを確認した。
KR260 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームを作成する10
前回は、Vitis 2022.1 を立ち上げて kr260_cam_disp プラットフォームを作成し、kr260_vadd アプリケーション・プロジェクトを作成し、ビルドを行って成功した。Vivado のプロジェクトの kr260_bd ブロック・デザインを確認した。今回は、、KR260 にファイルを転送して kr260_vadd を実行したところ成功した。
KR260 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームを作成する11
前回は、KR260 にファイルを転送して kr260_vadd を実行したところ成功した。今回は、ロードされているアクセラレーション・アプリケーションをアンロードして、kr260_vadd をロードした時の、uio の状態を観察した。kr260_vadd をロードしたら、uio4 〜 uio9 が増えた。

KR260 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームにラプラシアン・フィルタを実装する1
”KR260 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームを作成する9”で作成した DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホーム上に”Vitis 2019.2 アプリケーション・プロジェクト ラプラシアン・フィルタAXI Masterバージョン1”のラプラシアン・フィルタを載せてみよう。
KR260 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームにラプラシアン・フィルタを実装する2
”KR260 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームを作成する9”で作成した DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホーム上に”Vitis 2019.2 アプリケーション・プロジェクト ラプラシアン・フィルタAXI Masterバージョン1”のラプラシアン・フィルタを載せてみようということで、前回は、Vitis 2022.1 で laplacian_filter1 アクセラレーション・アプリケーション・プロジェクトを作成し、ソースコードを用意して、ビルドを行って成功した。今回は、KR260 の Petalinux 2022.1 に必要なファイルを転送し、kr260_lap アクセラレーション・アプリケーションをロードして、laplacian_filter1 を実行したところ、"Success HW and SW results match”が表示され、temp_lap.bmp が生成された。
KR260 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームにラプラシアン・フィルタを実装する3
前回は、KR260 の Petalinux 2022.1 に必要なファイルを転送し、kr260_lap アクセラレーション・アプリケーションをロードして、laplacian_filter1 を実行したところ、"Success HW and SW results match”が表示され、temp_lap.bmp が生成された。今回は、u-dma-buf の用意と OpenCV の C++ ソフトウェアのコンパイルと実行を行えるように環境を整備した。
KR260 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームにラプラシアン・フィルタを実装する4
前回は、u-dma-buf の用意と OpenCV の C++ ソフトウェアのコンパイルと実行を行えるように環境を整備した。今回は、”カメラ画像をDisplayPortに出力する9(アプリを作成、完成)”の cam_dp_ov5642.cpp をコピーし、KR260 の kr260_cam_disp プラットホーム用に uio の番号を変更した。その後、cmake を行い、make を行って実行ファイルを生成した。
KR260 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームにラプラシアン・フィルタを実装する5
前回は、”カメラ画像をDisplayPortに出力する9(アプリを作成、完成)” の cam_dp_ov5642.cpp をコピーし、KR260 の kr260_cam_disp プラットホーム用に uio の番号を変更した。その後、cmake を行い、make を行って実行ファイルを生成した。今回は、前回作成した cam_dp_ov5642 実行ファイルを実行してみたところ、DisplayPort に画像は映ったが同期が掛かってない感じで画像が流れていた。BMP ファイルを表示してみたが、正常に表示されたので、カメラやカメラ回路は正常に動作しているようだ。
KR260 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームにラプラシアン・フィルタを実装する6
前回は、前々回作成した cam_dp_ov5642 実行ファイルを実行してみたところ、DisplayPort に画像は映ったが同期が掛かってない感じで画像が流れていた。BMP ファイルを表示してみたが、正常に表示されたので、カメラやカメラ回路は正常に動作しているようだ。今回は、”カメラ画像をDisplayPortに出力する9(アプリを 作成、完成)”の cam_dp_ov5642.cpp は 1 つ GPIO が多かったので、その GPIO の設定を削除した。また、DisplayPort DMA の方から映像の同期信号をもらう回路になっているので、HD 解像度にする必要があった。そこで、HD 解像度に設定してみたが、カメラ画像は正常に映らなかった。

トリプル・バッファの AXI4-Stream 出力 DMA を KR260 用に変更する
”ZYBO Z7-20 用カメラ画像表示システムの作成1”のディスプレイ回路を KR260 の DisplayPort 出力に利用しようということで、今回は、トリプル・バッファの AXI4-Stream 出力 DMA (DMA2axis_3buf)を KR260 用に変更しよう。
AXI4-Stream 入出力のビットマップ・ディスプレイ・コントローラを KR260 対応にする
”ビットマップ・ディスプレイ・コントローラをAXI4-Stream対応にする 6(Vivado 2022.1 で IP作成)”の bitmap_disp_cont_axis IP を KR260 対応に変更しよう
KR260 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホーム3を作成する1
KR260 で PS の DisplayPort の同期信号に合わせてカメラ画像を出力し、DisplayPort に出力しようとしてきたが、うまくカメラ画像が表示できない。そこで、今度は、同期信号を自分で作成し、カメラ画像を PS の DiaplayPort から出力しようと思う。
KR260 ディレクトリ上に kr260_cam_disp3_platform ディレクトリを作成した。
もう一度、KR260 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームを作成する1
Vivado 2022.1 で KR260 対応の kr260_cam_disp3 プロジェクトの kr260_bd ブロック・デザインを作成していて、kr260_cam_disp プロジェクトのバグが分かったので、もう一度、KR260 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームを作成しよう。
もう一度、KR260 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームを作成する2
Vivado 2022.1 で KR260 対応の kr260_cam_disp3 プロジェクトの kr260_bd ブロック・デザインを作成していて、kr260_cam_disp プロジェクトのバグが分かったので、もう一度、KR260 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームを作成しようということで、前回は、KR260 対応の kr260_cam_disp3 プロジェクトの kr260_bd ブロック・デザインを修正して、論理合成、インプリメンテーション、ビットストリームの生成を行って、XSA ファイルを生成した。今回は、Vitis 2022.1 の kr260_cam_disp プラットホームをアップデートしてビルドし、kr260_vadd と laplacian_filter1 アプリケーション・プロジェクトをビルドした。その後、laplacian_filter1 アプリケーション・プロジェクトの Vivado プロジェクトの kr260_bd ブロック・デザインを確認し、アップデートされていることを確認した。
もう一度、KR260 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームを作成する3
前回は、Vitis 2022.1 の kr260_cam_disp プラットホームをアップデートしてビルドし、kr260_vadd と laplacian_filter1 アプリケーション・プロジェクトをビルドした。その後、laplacian_filter1 アプリケーション・プロジェクトの Vivado プロジェクトの kr260_bd ブロック・デザインを確認し、アップデートされていることを確認した。今回は、xsct を使用したデバイスツリー・オーバレイを作成し、pl.dtsi 上の動作させる IP の compatible を generic-uio に変更して、コンパイルして pl.dtbo を生成した。
もう一度、KR260 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームを作成する4
前回は、xsct を使用したデバイスツリー・オーバレイを作成し、pl.dtsi 上の動作させる IP の compatible を generic-uio に変更して、コンパイルし pl.dtbo を生成した。今回は、file_transfer/lap2_file_transfer ディレクトリを作成し、KR260 の Petalinux 2022.1 に転送するファイルを集めて、examples/kr260_lap2 ディレクトリに転送した。KR260 の Petalinux 2022.1 で /lib/firmware/xilinx に kr260_lap2 ディレクトリを作成して、転送されたファイルの一部をコピーした。kr260_lap2 を xmutil コマンドでロード後に、/sys/class/uio ディレクトリを見たところ、uio0 〜 uio11 が実装されていた。
もう一度、KR260 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームを作成する5
前回は、file_transfer/lap2_file_transfer ディレクトリを作成し、KR260 の Petalinux 2022.1 に転送するファイルを集めて、examples/kr260_lap2 ディレクトリに転送した。KR260 の Petalinux 2022.1 で /lib/firmware/xilinx に kr260_lap2 ディレクトリを作成して、転送されたファイルの一部をコピーした。kr260_lap2 を xmutil コマンドでロード後に、/sys/class/uio ディレクトリを見たところ、uio0 〜 uio11 が実装されていた。今回は、アプリケーション・ソフトウェアの cam_dp_ov5642.cpp を用意して、make して、実行形式ファイルを生成した。その実行形式ファイルを実行したところ、カメラ画像が DisplayPort に表示された。成功だ。。。

KR260 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームを使用してラプラシアン・フィルタを動作させる
前回で、KR260 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームを使用した Vitis のラプラシアン・フィルタ・プロジェクトのビットストリームを使用して、カメラ画像を KR260 の DisplayPort に出力することができた。今回は、ラプラシアン・フィルタ結果も表示する様にアプリケーション・ソフトウェアの cam_dp_ov5642.cpp を変更して、コンパイルし、カメラ画像だけでなく、ラプラシアン・フィルタ処理画像も表示できるようにした。

”実践的!FPGA開発セミナー vol.22”で発表します
”実践的!FPGA開発セミナー vol.22”で”Vitisのアクセラレーション・アプリケーション開発をエッジで思う存分活用したい。。。2”というタイトルで発表します。
”実践的!FPGA開発セミナー vol.22”のスライドを公開します
”実践的!FPGA開発セミナー vol.22”のスライドを公開します。

KR260 の Ubuntu 22.04 で Vitis アクセラレーション・アプリケーションの laplacian_filter1 を動作させる
Vitis アクセラレーション・アプリケーションの laplacian_filter1 を KR260 の Ubuntu 22.04 で動作させてみたが、”Segmentation fault (core dumped)”だった。

KR260 の Ubuntu 22.04 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームを使用してラプラシアン・フィルタを動作させる1
今回は、cmake, make を使用して、cam_dp_ov5642 実行ファイルを生成したのだが、kr260_lap2 をロードして、/sys/class/uio を見ると、Petalinux とは uio の数が違っていたので、cam_dp_ov5642.cpp を書き換える必要があるようだ。
KR260 の Ubuntu 22.04 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームを使用してラプラシアン・フィルタを動作させる2
前回は、cmake, make を使用して、cam_dp_ov5642 実行ファイルを生成したのだが、kr260_lap2 をロードして、/sys/class/uio を見ると、Petalinux とは uio の数が違っていたので、cam_dp_ov5642.cpp を書き換える必要がある。今回は、cam_dp_ov5642.cpp を書き換えて、make して、実行ファイルを生成した。その後、環境を整えて、実行ファイルを実行してみたが、カメラ画像が DiaplayPort に出力されなかった。どうやら、Ubuntu 22.04 はスクリーン・セーバーが起動して画面が消えているようだ。カメラ画像はメモリのバッファに正常に保存されていた。

KR260 用 ZynqMP-FPGA-Debian11で Vitis で作成したラプラシアン・フィルタを実行する1
”KR260 で ikwzm さんの ZynqMP-FPGA-Debian11-1.0.0 を動作させてみる”で作成した ZynqMP-FPGA-Debian11 上で、”KR260 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームを使用してラプラシアン・フィルタを動作させる”のラプラシアン・フィルタを動作させたい。
KR260 用 ZynqMP-FPGA-Debian11で Vitis で作成したラプラシアン・フィルタを実行する2
”KR260 で ikwzm さんの ZynqMP-FPGA-Debian11-1.0.0 を動作させてみる”で作成した ZynqMP-FPGA-Debian11 上で、”KR260 で DisplayPort にカメラ画像を出力する Vitis アクセラレーション・プラットホームを使用してラプラシアン・フィルタを動作させる”のラプラシアン・フィルタを動作させたいということで、前回は、ファイルを用意し、環 境を整えて、dtbocfg.rb でデバイス・ツリーをロードしたが、dtbocfg.rb が無かった。今回は、ikwzm さんに教えていただいた dtbo-config を使って、デバイス・ツリーをロードした。その後、/sys/class/uio ディレクトリを調べたら uio が増えていた。
KR260 用 ZynqMP-FPGA-Debian11で Vitis で作成したラプラシアン・フィルタを実行する3
前回は、ikwzm さんに教えていただいた dtbo-config を使って、デバイス・ツリーをロードした。その後、/sys/class/uio ディレクトリを調べたら uio が増えていた。今回は、cam_dp_ov5642.cpp を書き換えて、make して、実行ファイルを生成した。その後、環境を整えて、実行ファイルを実行したところ、カメラ画像とラプラシアン・フィルタ画像を DisplayPort に表示することができた。

Vitis Unified IDE 2023.2 の HLS Development を試す1
Vitis Unified IDE 2023.2 の HLS Development を試してみようということで、HLS コンポーネントの HSVConverter プロジェクトを作成することにした。しかし、プロジェクトが作れなかったが、Settings 画面の項目を全て記入したところ HSVConverter プロジェクトを作成することができた。
Vitis Unified IDE 2023.2 の HLS Development を試す2
Vitis Unified IDE 2023.2 の HLS Development を試してみようということで、前回は、HLS コンポーネントの HSVConverter プロジェクトを作成することにした。やってみたところ、プロジェクトが作れなかったが、Settings 画面の項目を全て記入したところ HSVConverter プロジェクトを作成することができた。今回は、hls_config.cfg と vitis-comp.json を見て、ソースファイルとテストベンチファイル、画像ファイルをコピーした。コピーしたファイルを Vitis Unified IDE に登録して、C シミュレーションを行ったが、エラーになった。
Vitis Unified IDE 2023.2 の HLS Development を試す3
前回は、hls_config.cfg と vitis-comp.json を見て、ソースファイルとテストベンチファイル、画像ファイルをコピーした。コピーしたファイルを Vitis Unified IDE に登録して、C シミュレーションを行ったが、エラーになった。今回は、hls_config.cfg に OpenCV のインクルードパスとリンカー・オプションを設定したところ C シミュレーションが通った。
Vitis Unified IDE 2023.2 の HLS Development を試す4
前回は、hls_config.cfg に OpenCV のインクルードパスとリンカー・オプションを設定したところ C シミュレーションが通った。今回は、C コードの合成を行った。Function Call Graph を表示しようとしたらフリー・ライセンスが必要ということなので、ライセンスを取得したら、Function Call Graph、Schedule Viewer を表示することができた。
Vitis Unified IDE 2023.2 の HLS Development を試す5
前回は、C コードの合成を行った。Function Call Graph を表示しようとしたらフリー・ライセンスが必要ということなので、ライセンスを取得したら、Function Call Graph、Schedule Viewer を表示することができた。今回は、C/RTL 協調シミュレーションを行った。最初に trace_level を port にしたところ、C/RTL 協調シミュレーションが終了しなかった。trace_level を none にしたら、終了した。もう一度、trace_level を port にして、wave_debug にチェックを入れたところ、波形を確認することができた。
Vitis Unified IDE 2023.2 の HLS Development を試す6
前回は、C/RTL 協調シミュレーションを行った。最初に trace_level を port にしたところ、C/RTL 協調シミュレーションが終了しなかった。trace_level を none にしたら、終了した。もう一度、trace_level を port にして、wave_debug にチェックを入れたところ、波形を確認することができた。今回は、Export RTL と Implementation を行った。

"MicroZed Chronicles: Introducing Vitis Unified IDE"をやってみる1
Vitis Unified IDE 2023.2 の HLS Development を試したが、Vitis Unified IDE 2023.2 の通常のアプリケーション・プロジェクトも試してみよう。ちょうどAdam Talyer さんの"MicroZed Chronicles: Introducing Vitis Unified IDE"が公開されたので、これをやってみよう。
今回は、Vivado 2023.2 で zuboard_rgb_led プロジェクトを作成した。zub_rgb_led ブロック・デザインを作成し、2 つの RGB LED を制御する AXI GPIO を追加した。回路を完成させ、論理合成、インプリメンテーション、ビットストリームの生成を行った。その後、ハードウェアをエクスポートした。
"MicroZed Chronicles: Introducing Vitis Unified IDE"をやってみる2
前回は、Vivado 2023.2 で zuboard_rgb_led プロジェクトを作成した。zub_rgb_led ブロック・デザインを作成し、2 つの RGB LED を制御する AXI GPIO を追加した。回路を完成させ、論理合成、インプリメンテーション、ビットストリームの生成を行った。その後、ハードウェアをエクスポートした。今回は、Vitis Unified IDE 2023.2 を起動して、zub_rgb_led_pf プラットフォームを作成した。
"MicroZed Chronicles: Introducing Vitis Unified IDE"をやってみる3
前回は、Vitis Unified IDE 2023.2 を起動して、zub_rgb_led_pf プラットフォームを作成した。今回は、examples の Hello World を利用して、アプリケーション・プロジェクトを作成し、ZUBoard 1CG で実行した。
"MicroZed Chronicles: Introducing Vitis Unified IDE"をやってみる4
前回は、examples の Hello World を利用して、アプリケーション・プロジェクトを作成し、ZUBoard 1CG で実行した。今回は、"MicroZed Chronicles: Introducing Vitis Unified IDE"からソースコードを引用して、ZUBoard 1CG の RGB LED を点灯することができた。

ZUBoard 1CG の PYNQ v3.0.1 で自作の 5 個のフィルタを動作させる1
ZUBoard 1CG の PYNQ v3.0.1 で自作の 4 個のフィルタは動作させることができているので、次は RGB24toHSV - HSVConverter - HSVtoRGB24 の各 IP を加えた 5 個のフィルタを動作させたい。今回は、Vivado 2023.2 で i5filters プロジェクトを作成し、i4filters プロジェクトでブロック・デザインを出力した i4filters.tcl を i5filters.tcl に改名し、少々手直したあとで、i5filters プロジェクトで動作させてブロック・デザインを作成した。
ZUBoard 1CG の PYNQ v3.0.1 で自作の 5 個のフィルタを動作させる2
RGB24toHSV - HSVConverter - HSVtoRGB24 の各 IP を加えた 5 個のフィルタを動作させたいということで、前回は、Vivado 2023.2 で i5filters プロジェクトを作成し、i4filters プロジェクトでブロック・デザインを出力した i4filters.tcl を i5filters.tcl に改名し、少々手直したあとで、i5filters プロジェクトで動作させてブロック・デザインを作成した。今回は、RGB24toHSV - HSVConverter - HSVtoRGB24 の各 IP を加えたところ、HSVtoRGB24 IP に col_size の入力ポートが付いていたが、これはバグだ。正しくは、AXI4-Liteインターフェースのレジスタになるはずだった。そこで、Vitis HLS 2023.1 を起動して、バグを修正し、もう一度、HSVtoRGB24 IP をブロック・デザインに追加した。論理合成、インプリメンテーション、ビットストリームの生成を行って、成功した。
ZUBoard 1CG の PYNQ v3.0.1 で自作の 5 個のフィルタを動作させる3
前回は、RGB24toHSV - HSVConverter - HSVtoRGB24 の各 IP を加えたところ、HSVtoRGB24 IP に col_size の入力ポートが付いていたが、これはバグだ。正しくは、AXI4-Liteインターフェースのレジスタになるはずだった。そこで、Vitis HLS 2023.1 を起動して、バグを修正し、もう一度、HSVtoRGB24 IP をブロック・デザインに追加した。論理合成、インプリメンテーション、ビットストリームの生成を行って、成功した。今回は、ZUBoard 1CG の PYNQ を立ち上げて、upyter Notebook 上で i5filters フォルダを作成し、Jupyter Notebook で前回作成したビット・ファイルと hwh ファイルをアップグレードした。画像ファイルを用意して、i5filters.ipynb ファイルを作成し、実行したところ、真っ黒な画像が得られた。デバッグの必要がある。
ZUBoard 1CG の PYNQ v3.0.1 で自作の 5 個のフィルタを動作させる4
前回は、ZUBoard 1CG の PYNQ を立ち上げて、upyter Notebook 上で i5filters フォルダを作成し、Jupyter Notebook で前回作成したビット・ファイルと hwh ファイルをアップグレードした。画像ファイルを用意して、i5filters.ipynb ファイルを作成し、実行したところ、真っ黒な画像が得られた。デバッグの必要がある。今回は、System ILA を追加して、論理合成、インプリメンテーション、ビットストリームの生成を行って、再度、bit ファイルと hwh ファイルを ZUBoard 1CG の PYNQ にアップロードして、ILA ダッシュボードを起動して、波形を確認したところ、問題ないことがわかった。画像も正常に表示されていた。結局、昨日の 1 回のみバグっただけで、今日は何回やっても画像が表示された。なんだったんだろうか?
ZUBoard 1CG の PYNQ v3.0.1 で自作の 5 個のフィルタを動作させる5
前回は、System ILA を追加して、論理合成、インプリメンテーション、ビットストリームの生成を行って、再度、bit ファイルと hwh ファイルを ZUBoard 1CG の PYNQ にアップロードして、ILA ダッシュボードを起動して、波形を確認したところ、問題ないことがわかった。画像も正常に表示されていた。結局、昨日の 1 回のみバグっただけで、今日は何回やっても画像が表示された。今回は、バグが無かったので、正常に HSVConverter を PYNQ 上で試したところ、うまく行った。

Vitis Unified IDE 2023.2 の HLS Development を試す1
Vitis Unified IDE 2023.2 の HLS Development を試してみようということで、HLS コンポーネントの HSVConverter プロジェクトを作成することにした。しかし、プロジェクトが作れなかったが、Settings 画面の項目を全て記入したところ HSVConverter プロジェクトを作成することができた。
Vitis Unified IDE 2023.2 の HLS Development を試す2
Vitis Unified IDE 2023.2 の HLS Development を試してみようということで、前回は、HLS コンポーネントの HSVConverter プロジェクトを作成することにした。やってみたところ、プロジェクトが作れなかったが、Settings 画面の項目を全て記入したところ HSVConverter プロジェクトを作成することができた。今回は、hls_config.cfg と vitis-comp.json を見て、ソースファイルとテストベンチファイル、画像ファイルをコピーした。コピーしたファイルを Vitis Unified IDE に登録して、C シミュレーションを行ったが、エラーになった。
Vitis Unified IDE 2023.2 の HLS Development を試す3
前回は、hls_config.cfg と vitis-comp.json を見て、ソースファイルとテストベンチファイル、画像ファイルをコピーした。コピーしたファイルを Vitis Unified IDE に登録して、C シミュレーションを行ったが、エラーになった。今回は、hls_config.cfg に OpenCV のインクルードパスとリンカー・オプションを設定したところ C シミュレーションが通った。
Vitis Unified IDE 2023.2 の HLS Development を試す4
前回は、hls_config.cfg に OpenCV のインクルードパスとリンカー・オプションを設定したところ C シミュレーションが通った。今回は、C コードの合成を行った。Function Call Graph を表示しようとしたらフリー・ライセンスが必要ということなので、ライセンスを取得したら、Function Call Graph、Schedule Viewer を表示することができた。
Vitis Unified IDE 2023.2 の HLS Development を試す5
前回は、C コードの合成を行った。Function Call Graph を表示しようとしたらフリー・ライセンスが必要ということなので、ライセンスを取得したら、Function Call Graph、Schedule Viewer を表示することができた。今回は、C/RTL 協調シミュレーションを行った。最初に trace_level を port にしたところ、C/RTL 協調シミュレーションが終了しなかった。trace_level を none にしたら、終了した。もう一度、trace_level を port にして、wave_debug にチェックを入れたところ、波形を確認することができた。
Vitis Unified IDE 2023.2 の HLS Development を試す6
前回は、C/RTL 協調シミュレーションを行った。最初に trace_level を port にしたところ、C/RTL 協調シミュレーションが終了しなかった。trace_level を none にしたら、終了した。もう一度、trace_level を port にして、wave_debug にチェックを入れたところ、波形を確認することができた。今回は、Export RTL と Implementation を行った。

Vitis Unified IDE 2023.2 で平均化フィルタの average_axis_RGB24 を実装する1
Vitis Unified IDE 2023.2 で画像フィルタの一種である平均化フィルタを実装してみよう。使用する FPGA ボードは AVNET 社の ZUBoard 1CG とする。
Vitis Unified IDE 2023.2 で平均化フィルタの average_axis_RGB24 を実装する2
Vitis Unified IDE 2023.2 で画像フィルタの一種である平均化フィルタを実装するということで、前回は、Vitis Unified IDE 2023.2 で ZUBoard 1CG 用の average_axis_RGB24 プロジェクトを作成し、OpenCV を使用できる設定を行った。また、ヘッダ・ファイル、ソースコード、テストベンチのコードを示した。今回は、C シミュレーションと C コードの合成を行った。
Vitis Unified IDE 2023.2 で平均化フィルタの average_axis_RGB24 を実装する3
前回は、C シミュレーションと C コードの合成を行った。今回は、C/RTL 協調シミュレーションを行ったところ、エラーになった。Package と Implementation を行った。
Vitis Unified IDE 2023.2 で平均化フィルタの average_axis_RGB24 を実装する4
前回は、C/RTL 協調シミュレーションを行ったところ、エラーになった。Package と Implementation を行った。今回は、C/RTL 協調シミュレーションするために HLS プロジェクトを新規作成して、C/RTL Cosimulation を行ったところ成功した。

Vitis Unified IDE 2023.2 で最小値フィルタ、最大値フィルタの min_max_axis_RGB24 を実装する1
Vitis Unified IDE 2023.2 で最小値フィルタ、最大値フィルタの min_max_axis_RGB24 を実装してみよう。
Vitis Unified IDE 2023.2 で最小値フィルタ、最大値フィルタの min_max_axis_RGB24 を実装する2
前回は、Vitis Unified IDE 2023.2 で min_max_axis_RGB24 プロジェクトを作成し、ソースコードとテストベンチを示した。今回は、C シミュレーションと C コードの合成を行った。
Vitis Unified IDE 2023.2 で最小値フィルタ、最大値フィルタの min_max_axis_RGB24 を実装する3
前回は、C シミュレーションと C コードの合成を行った。今回は C/RTL 協調シミュレーション、Package、Implementation を行った。

Vitis Unified IDE 2023.2 でメディアンフィルタの median_axis_RGB24 を実装する1
”RGB 24 ビット・データ入出力対応のメディアン・フィルタを Vitis HLS 2021.2 で作成する1”のメディアンフィルタは 3 x 3 ピクセルの領域から、RGB それぞれの中央値を見つけるソースコードだったが、それでは、ピクセルを合成していることになってしまう。各ピクセルを輝度値に直して、中央値になるピクセルを見つけ、そ のピクセルをメディアンフィルタの値とする必要があるので、実装し直すことにした。
Vitis Unified IDE 2023.2 でメディアンフィルタの median_axis_RGB24 を実装する2
メディアンフィルタの median_axis_RGB24 がバグっていたので作り直すということで、前回は、Vitis Unified IDE 2023.2 で median_axis_RGB24 プロジェクトを作成し、設定を行った。そして、ソースコードとテストベンチを示した。今回は、C シミュレーション、C コードの合成、C/RTL 協調シミュレーション、Package、Implementation を行った。

Vitis Unified IDE 2023.2 でラプラシアン・フィルタの laplacian_axis_RGB24 を実装する1
Vitis Unified IDE 2023.2 でラプラシアン・フィルタの laplacian_axis_RGB24 を実装してみよう。
Vitis Unified IDE 2023.2 でラプラシアン・フィルタの laplacian_axis_RGB24 を実装する2
ラプラシアン・フィルタもたくさん実装しているが、改めて実装してみるということで、 前回は、Vitis Unified IDE 2023.2 で ZUBoard 1CG 用のラプラシアン・フィルタの laplacian_axis_RGB24 プロジェクトと作成し、ソースコードとテストベンチを書いた。今回は、C シミュレーション、C コードの合成、C/RTL 協調シミュレーション、Package、Implementation を行った。

Vitis Unified IDE 2023.2 でエッジ強調フィルタの edge_enhancement_axis_RGB24 を実装する1
Vitis Unified IDE 2023.2 でエッジ強調フィルタの edge_enhancement_axis_RGB24 を実装してみよう。
エッジ強調フィルタは画像の輪郭を強調して、画像をはっきりさせるためのフィルタだ。
Vitis Unified IDE 2023.2 でエッジ強調フィルタの edge_enhancement_axis_RGB24 を実装する2
Vitis Unified IDE 2023.2 でエッジ強調フィルタの edge_enhancement_axis_RGB24 を実装するということで、前回は、、Vitis Unified IDE 2023.2 で ZUBoard 1CG 用のエッジ強調フィルタの edge_enhancement_axis_RGB24 プロジェクトと作成し、ソースコードとテストベンチを書いた。今回は、C シミュレーション、C コードの合成を行った。
Vitis Unified IDE 2023.2 でエッジ強調フィルタの edge_enhancement_axis_RGB24 を実装する3
前回は、C シミュレーション、C コードの合成を行った。今回は、C/RTL 協調シミュレーション、Package 、Implementation を行った。

Vitis HLS 2023.2 で AXI4-Lite インターフェースのレジスタを生成する1
Vitis HLS 2023.2 (本当は統合されたので Vitis 2023.2 を使用しているが高位合成ということで、ご勘弁願いたい)で AXI4-Lite インターフェースのレジスタを生成したい。というのも、Bambu では画像の縦、横のピクセル数の設定を入力ポートでしか設定できなようだからだ。つまり、プロセッサから自由に画像サイズを設定したいということで、Vitis HLS 2023.2 で作成することにした。
Vitis HLS 2023.2 で AXI4-Lite インターフェースのレジスタを生成する2
Vitis HLS 2023.2 (本当は統合されたので Vitis 2023.2 を使用しているが高位合成ということで、ご勘弁願いたい)で AXI4-Lite インターフェースのレジスタを生成したいということで、前回は、Vitis 2023.2 で ZUBoard 1CG 用の HLS Development プロジェクトの median_reg プロジェクトを作成した。今回は、median_reg.cpp と median_reg_tb.cpp を貼って、C シミュレーションと C コードの合成を行った。
Vitis HLS 2023.2 で AXI4-Lite インターフェースのレジスタを生成する3
前回は、median_reg.cpp と median_reg_tb.cpp を貼って、C シミュレーションと C コードの合成を行った。今回は、C/RTL 協調シミュレーションと Package, Implementation を行った。








inserted by FC2 system