KRIA KV260 Vision AI Starter Kit

KRIA KV260 Vision AI Starter Kit が来ました
昨日、KRIA KV260 Vision AI Starter Kit が来ました。
待ちに待った KRIA KV260 Vision AI Starter Kit です。
KRIA KV260 Vision AI Starter Kit とアクセサリ・キットと電源を注文しましたが、アクセサリ・キットは後日ということになって、KRIA KV260 Vision AI Starter Kit と電源だけが到着しました。

”設計開始 Kria KV260 ビジョン AI スターター キット使用”をやってみる1
”設計開始 Kria KV260 ビジョン AI スターター キット使用”をやってみよう。
イメージファイルを MicroSD カードに書き込んだ。
”設計開始 Kria KV260 ビジョン AI スターター キット使用”をやってみる2
”設計開始 Kria KV260 ビジョン AI スターター キット使用”をやってみようということで、前回は、SD カード・イメージをダウンロードして、32GB の MicroSD カードに書き込んだ。今回は、その MicroSD カードを Kria KV260 ビジョン AI スターター キットに挿入して、 PetaLinux をブートしてみよう。
”設計開始 Kria KV260 ビジョン AI スターター キット使用”をやってみる3
”設計開始 Kria KV260 ビジョン AI スターター キット使用”をやってみようということで、前回は、 MicroSD カードを Kria KV260 ビジョン AI スターター キットに挿入して、 PetaLinux をブートすることができた。今回は、”ステップ 5. スマート カメラ アクセラレーション アプリケーションを起動する”をやってみよう。

Kria KV260 ビジョン AI スターター キットのリソース
Kria KV260 ビジョン AI スターター キットは今やっている”設計開始 Kria KV260 ビジョン AI スターター キット使用”の他のリソースを示す。
Kria KV260 ビジョン AI スターター キットのリソース2
回路図とかここにあるのかも?
https://www.xilinx.com/search/site-keyword-search.html#q=UG1091

AI Box with ReID をやってみる
今までやってきた”設計開始 Kria KV260 ビジョン AI スターター キット使用”の”ステップ 6. 次のステップおよびその他のリソース”にもあるのだが、今度は、 AI Box with ReID をやってみようと思う。
うまく動作しなかった。
NLP SmartVision をやってみる1
Kria KV260 Vision AI Starter Kit の NLP SmartVision をやってみる。
NLP SmartVision はビデオとオーディオがあって、ビデオは、DPU を使用して以下の機能があるようだ。(”Design Overview”参照)
顔検出-ネットワークモデル:cf_densebox_wider_360_640_1.11G_1.2
オブジェクト検出-ネットワークモデル:dk_yolov2_voc_448_448_0.77_7.82G_1.2
ナンバープレート検出-ネットワークモデル:cf_plate-detection_320_320_0.49G_1
オーディオは音声を認識する。例えば、down と言ったか? up と言ったか?を判断して分類できるようだ。
NLP SmartVision をやってみる2(音声の認識)
前回は、Kria KV260 Vision AI Starter Kit の NLP SmartVision をやってみたのだが、USB マイクが無いのでできなかった。今回は、 Google Command Dataset を取得して、音声の認識をしてみよう。
音声の認識はうまく行っているようだ。

”Xilinx Kria KV260- SmartCam Demo with Petalinux 2021.1 BSP”をやってみる1
””設計開始 Kria KV260 ビジョン AI スターター キット使用”をやってみる3”で SmartCam をやってみたが、もうすでにビルド済みの物を実行したのだった。”Xilinx Kria KV260- SmartCam Demo with Petalinux 2021.1 BSP”は SmartCam のビルド方法が載っているので、これをやってみることにした。
misc-config でエラーが出てしまった。
”Xilinx Kria KV260- SmartCam Demo with Petalinux 2021.1 BSP”をやってみる2
”Xilinx Kria KV260- SmartCam Demo with Petalinux 2021.1 BSP”は SmartCam のビルド方法が載っているので、これをやってみることにしたということで、前回は、Petalinux 2021.1 をインストールし、KV260 のボード・サポート・パッケージをダウンロードして、 Petalinux の kv260_smartcam プロジェクトを作成した。更に、設定を行って petalinux-build を行ったがエラーになってしまった。今回は、バグを修正して、 petalinux-build を行うことを目標にするが、結果をいうとエラーを解消することができなかった。
”Xilinx Kria KV260- SmartCam Demo with Petalinux 2021.1 BSP”をやってみる3
前回は、バグを修正して、 petalinux-build を行うことを目標にするが、結果をいうとエラーを解消することができなかった。今回は、バグを修正して、 petalinux-upgrade をしたところ petalinux-build が成功した。
”Xilinx Kria KV260- SmartCam Demo with Petalinux 2021.1 BSP”をやってみる4
前回は、バグを修正して、 petalinux-upgrade をしたところ petalinux-build が成功した。今回は、 Petalinux で SD カードイメージを作成し、それを MicroSD カードに書き込んで Kira KV260 Vision AI Starter Kit で動作させたところ、Starting kernel ... で止まってしまった。
”Xilinx Kria KV260- SmartCam Demo with Petalinux 2021.1 BSP”をやってみる5
前回は、 Petalinux で SD カードイメージを作成し、それを MicroSD カードに書き込んで Kira KV260 Vision AI Starter Kit で動作させたところ、Starting kernel ... で止まってしまった。今回は、 petalinux-config で INITRAMFS になっているのが不思議だったので、これを EXT4 (SD/eMMC/SATA/USB) に変更したら Petalinux が起動した。
”Xilinx Kria KV260- SmartCam Demo with Petalinux 2021.1 BSP”をやってみる6
前回は、 petalinux-config で INITRAMFS になっているのが不思議だったので、これを EXT4 (SD/eMMC/SATA/USB) に変更して petalinux-build を行ったところ成功した。そして、 petalinux-package を行って、 SD カードに書き込んだところ、無事に petalinux を起動することができた。今回は、その Petalinux で smartcam アプリケーションを起動して、テストしたら動作した。

”Smart Camera » Using Vivado to Build the Hardware Design”をやってみる1
”Smart Camera » Using Vivado to Build the Hardware Design”をやってみることにする。
これは、いままでやってきた Smart Camera の Vivado プロジェクトを生成できるので、Smart Camera のブロック・デザインを見ることができる。
”Smart Camera » Using Vivado to Build the Hardware Design”をやってみる2
”Smart Camera » Using Vivado to Build the Hardware Design”をやってみるということで、前回は、 kv260-vitis.git を git clone して、 kv260_ispMipiRx_vcu_DP を make xsa した。今回は、生成された SmartCam の Vivado プロジェクトを見ていこう。
”Smart Camera » Creating a Vitis Platform”をやってみる
前回は、”Smart Camera » Using Vivado to Build the Hardware Design”をやってみるということで、kv260-vitis.git を git clone して、 kv260_ispMipiRx_vcu_DP を make xsa した結果の Vivado プロジェクトを見た。今回は、次のステップの”Smart Camera » Creating a Vitis Platform”をやってみよう。これは Vitis のプラットフォームを作成する作業だ。
Vitis のプラットフォームが作成された。
Smart Camera » Integrating the overlay into the Platform をやってみる1
前回は、”Smart Camera » Creating a Vitis Platform”をやってみようということで、 Vitis のプラットフォームを作成した。今回は、”Smart Camera » Integrating the overlay into the Platform”をやってみよう。高速化された機能で構成されるオーバーレイをプラットフォームに統合する手順をやっていく。
make overlay OVERLAY=smartcamするとエラーが発生した。
Smart Camera を 2021.1 で Smart Camera » Creating a Vitis Platform までやり直す
前回は、”Smart Camera » Integrating the overlay into the Platform”をやってみたのだが、タイミング・エラーが出てしまった。今回は、コメント欄で kv260-vitis.git が 2020.2 バージョンだと言うことを教えていただいた。(ありがとうございます)生成されたディレクトリなどから気がついてはいたのだが、そのままやってみた。更に kv260-vitis.git に 2021.1 バージョンがあるのは知らなかった。という訳で、 kv260-vitis.git の 2021.1 バージョンを git clone してもう一度、”Smart Camera » Integrating the overlay into the Platform”までやってみよう。
Smart Camera » Building Petalinux をやってみる1
前回は、kv260-vitis.git の 2021.1 バージョンを git clone して、もう一度、”Smart Camera » Integrating the overlay into the Platform”まで実行して成功した。今回は、その次の”Smart Camera » Building Petalinux”をやってみよう。
images/linux/petalinux-sdimage.wic が生成された。
Smart Camera » Building Petalinux をやってみる2
”Smart Camera » Building Petalinux”をやってみようということで、前回は、 petalinux-build して、 petalinux-package したところ、 petalinux-sdimage.wic が生成された。今回は、その petalinux-sdimage.wic を MicroSD カードに書いて、KRIA KV260 Vision AI Stater Kit に挿入して Petalinux をブートすることができた。
Smart Camera » Building Petalinux をやってみる3
”Smart Camera » Building Petalinux”をやってみようということで、前回は、 petalinux-sdimage.wic を MicroSD カードに書いて、KRIA KV260 Vision AI Stater Kit に挿入して Petalinux をブートすることができた。今回は、次の”Enable Xilinx Application Packages”と”Build the SDK”をやってみよう。
コマンドで BOARD_VARIANT 変数を設定する。
アプリケーション・パッケージ・グループをユーザー rootfs 構成ファイルに追加する。
petalinux-build -s で sdk.sh を生成する。
Smart Camera » Building Petalinux をやってみる4
”Smart Camera » Building Petalinux”をやってみようということで、前回は、”Enable Xilinx Application Packages”と”Build the SDK”をやってみて、成功した。今回は、”Smart Camera » Building Petalinux をやってみる3”で追加した 4 個のパッケージが使用できる状態になっているか?を petalinux-build して試してみよう。
MicroSDカードにイメージを書いて SmartCam を起動したところ成功した。

”TVM を使ってディープラーニングを手軽に FPGA で高速化 (3)”をやってみる1
”TVM を使ってディープラーニングを手軽に FPGA で高速化 (3)”をやってみようと思う。
この記事は Kira KV260 Vision AI Starter Kit で TVM Vitis-AI Integration を動作させるそうだ。

”MicroZed Chronicles: Kria & Raspberry Pi Camera”をやってみる1
”MicroZed Chronicles: Kria & Raspberry Pi Camera”では、Kira KV260 Vitsion AI Starter Kit に Digilent 社の PCam5C を接続して画像を表示している。それをやってみることにした。
”MicroZed Chronicles: Kria & Raspberry Pi Camera”をやってみる2
”MicroZed Chronicles: Kria & Raspberry Pi Camera”をやってみるということで、前回は、Vivado ディレクトリの bd.tcl を実行して、design_1 プロジェクトを作成し、 io.xdc をインポートした。今回は、論理合成、インプリメンテーション、ビットストリームの生成を行った。
”MicroZed Chronicles: Kria & Raspberry Pi Camera”をやってみる3
前回は、論理合成、インプリメンテーション、ビットストリームの生成を行った。今回は、ハード ウェアをエクスポートして、 XSA ファイルを生成する。そして、Vitis 2021.1 を起動して、プロジェクトをインポートする。
”MicroZed Chronicles: Kria & Raspberry Pi Camera”をやってみる4
前回は、ハードウェアをエクスポートして、 XSA ファイルを生成した。そして、Vitis 2021.1 を起動して、プロジェクトをインポートした。今回は、Vitis のプロジェクトをビルドして、KV260 でカメラ画像をディスプレイに表示されることを確認する。そして、自分で修正した XSA ファイルでアップデートして、もう一度、KV260 でカメラ画像をディスプレイに表示されることを確認できた。

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 での制御方法を探ってみた。

”MicroZed Chronicles: Kria & Raspberry Pi Camera”をやってみる5
前回は、SD カード・ブートモードでの KV260 での Vitis での FPGA コンフィギュレーション+アプリケーション・ソフトウェアの起動方法を探って、それを解明することができた。今回は、””MicroZed Chronicles: Kria & Raspberry Pi Camera”をやってみる2”で自分でブロック・デザインを修正して作成した XSA ファイルでカメラ画像がディスプレイに表示されるか?を確かめよう。
カメラ画像がディスプレイに表示された。成功だ。
”MicroZed Chronicles: Kria & Raspberry Pi Camera”をやってみる6
”MicroZed Chronicles: Kria & Raspberry Pi Camera”をやってみようということで、前回は、””MicroZed Chronicles: Kria & Raspberry Pi Camera”をやってみる2”で自分でブロック・デザインを修正して作成した XSA ファイルでカメラ画像がディスプレイに表示されるか?を確かめたところ、問題なくカメラ画像をディスプレイに表示することができた。今回は、ブロック・デザインでのデータ の流れを確認してみよう。
”MicroZed Chronicles: Kria & Raspberry Pi Camera”をやってみる7
”MicroZed Chronicles: Kria & Raspberry Pi Camera”をやってみようということで、前回は、ブロック・デザインでのデータの流れを確認した。今回は、ブロック・デザインの各部のストリーム・データを Vivado Analyzer で確認してみよう。

RBG 24 ビット・データ入出力対応のソーベル・フィルタを Vitis HLS 2021.1 で作成する1
”MicroZed Chronicles: Kria & Raspberry Pi Camera”のブロック・デザインにソーベル・フィルタを追加するために RBG 24 ビット・データ入出力対応のソーベル・フィルタを Vitis HLS 2021.1 で作成することにした。今回は、ソーベル・フィルタのソースコードを貼って、 Vitis HLS 2021.1 で sobel_filter_axis_RBG プロジェクトを作成した。
RBG 24 ビット・データ入出力対応のソーベル・フィルタを Vitis HLS 2021.1 で作成する2
前回は、ソーベル・フィルタのソースコードを貼って、 Vitis HLS 2021.1 で sobel_filter_axis_RBG プロジェクトを作成した。今回は、 C シミュレーションを行ったが、エラーになってしまった。 Kria KV260 ボードを指定したのだが、これを単体の FPGA チップにしたところ、エラーが解消した。
RBG 24 ビット・データ入出力対応のソーベル・フィルタを Vitis HLS 2021.1 で作成する3
前回は、C シミュレーションを行ったが、エラーになってしまった。 Kria KV260 ボードを指定したのだが、これを単体の FPGA チップにしたところ、エラーが解消した。今回は残りの C コードの合成、 C/RTL 協調シミュレーション、 Export RTL 、 Implementation を行った。

ソーベル・フィルタ を”MicroZed Chronicles: Kria & Raspberry Pi Camera”のブロック・デザインに追加する1
前回は、ソーベル・フィルタを残りの C コードの合成、 C/RTL 協調シミュレーション、 Export RTL 、 Implementation を行った。今回は、作成されたソーベル・フィルタ IP を Vivado で使用して、ブロック・デザインを修正し、論理合成、インプリメンテーション、ビットストリームの生成を行ったところ、タイミング・エラーが発生してしまった。
ソーベル・フィルタ を”MicroZed Chronicles: Kria & Raspberry Pi Camera”のブロック・デザインに追加する2
前回は、作成されたソーベル・フィルタ IP を Vivado で使用して、ブロック・デザインを修正し、論理合成、インプリメンテーション、ビットストリームの生成を行ったところ、タイミング・エラーが発生し解消できなかった。今回 は、実は Vitis HLS 2021.1 に設定する動作周波数が間違っていたので、もう一度、 Vitis HLS で C コードの合成と Export RTL を行って IP を変更して、 Vivado で論理合成、インプリメンテーション、ビットストリームの生成を行う。
ソーベル・フィルタ を”MicroZed Chronicles: Kria & Raspberry Pi Camera”のブロック・デザインに追加する3
前回は、 Vitis HLS 2021.1 に設定する動作周波数が間違っていたので、もう一度、 Vitis HLS で C コードの合成と Export RTL を行って IP を変更して、 Vivado で論理合成、インプリメンテーション、ビットストリームの生成を行って成功した。今回は、ハードウェアをエクスポートして、 Vitis の kria_n プラットフォームをアップデートした。そして、 Vitis のhelloworld.c にソーベル・フィルタ IP の制御プログラムを追加し、 KV260 で確認したところ、動作した。

RBG 24 ビット・データ入出力対応のガウシアン・フィルタを Vitis HLS 2021.1 で作成する1
”MicroZed Chronicles: Kria & Raspberry Pi Camera”のブロック・デザインにソーベル・フィルタを追加するために RBG 24 ビット・データ入出力対応のガウシアン・フィルタを Vitis HLS 2021.1 で作成することにした。今回は、ガウシアン・フィルタのソースコードを貼って、 Vitis HLS 2021.1 で gaussian_filter_axis_RBG プロジェクトを作成した。
RBG 24 ビット・データ入出力対応のガウシアン・フィルタを Vitis HLS 2021.1 で作成する2
前回は、ガウシアン・フィルタのソースコードを貼って、 Vitis HLS 2021.1 で gaussian_filter_axis_RBG プロジェクトを作成した。今回は、 C シミュレーションと C コードの合成を行った。
RBG 24 ビット・データ入出力対応のガウシアン・フィルタを Vitis HLS 2021.1 で作成する3
前回は、C シミュレーションと C コードの合成を行った。今回は、 C/RTL 協調シミュレーションを行って、Export RTL で IP 化して、 Implementation を行った。

RBG 24 ビット・データ入出力対応のメディアン・フィルタを Vitis HLS 2021.1 で作成する1
ガウシアン・フィルタを作ってきたが、ガウシアン・フィルタのノイズ除去性能は以前 OpenCV で実装したメディアン・フィルタの性能を下回っている。そこで、メディアン・フィルタも自分で実装してみたくなった。
メディアン・フィルタは中央値フィルタで、3 x 3 のカーネル内のピクセルの中央の値を取るフィルタだ。
RBG 24 ビット・データ入出力対応のメディアン・フィルタを Vitis HLS 2021.1 で作成する2
メディアン・フィルタを実装してみたくなった、ということで、前回は、ソースコードとテストベ ンチコードを貼って、 Vitis HLS 2021.1 で median_filter_axis_RBG プロジェクトを作成した。今回は、 C シミュレーションと C コードの合成を行った。
RBG 24 ビット・データ入出力対応のメディアン・フィルタを Vitis HLS 2021.1 で作成する3
前回は、 C シミュレーションと C コードの合成を行った。今回は、メディアン・フィルタの演算部分、主にバブルソートの C コードの合成の様子を見ていこうと思う。
RBG 24 ビット・データ入出力対応のメディアン・フィルタを Vitis HLS 2021.1 で作成する4
前回は、メディアン・フィルタの演算部分、主にバブルソートの C コードの合成の様子をみた。今回は、 C/RTL 協調シミュレーションを行い、 Export RTL で IP 化、 Implementation で Vivado での合成レポートを確認しよう。

ガウシアン・フィルタとメディ アン・フィルタを”MicroZed Chronicles: Kria & Raspberry Pi Camera”のブロック・デザインに追加する1
”MicroZed Chronicles: Kria & Raspberry Pi Camera”のブロック・デザインにガウシアン・フィルタとメディアン・フィルタを追加しよう。
ガウシアン・フィルタとメディ アン・フィルタを”MicroZed Chronicles: Kria & Raspberry Pi Camera”のブロック・デザインに追加する2
前回は、Vivado 2021.1 のブロック・デザインにガウシアン・フィルタとメディアン・フィルタを追加して、論理合成、インプリメンテーション、ビットストリームの生成を行った。今回は、ハードウェ アをエクスポートし、Vitis でプラットフォームを更新して、ソースコードを変更してビルドした。そして、実機にビットストリームをダウンロードして、アプリケーション・ソフトウェアを起動した。カメ ラ画像が表示され、フィルタも動作した(たぶん)。

KV260 で ikwzm さんの ZynqMP-FPGA-Linux を試してみる1
ikwzm さんの ZynqMP-FPGA-Linux を KV260 にインストールしてみよう。
ZynqMP-FPGA-Linux/doc/install/kv260.md を参照しながら、 KV260 用の Debian 10 の SD カードを作成する。
KV260 で ikwzm さんの ZynqMP-FPGA-Linux を試してみる2
前回は、 ikwzm さんの ZynqMP-FPGA-Linux を git clone して Micro SD カードをアンマウントした。今回は、 Micro SD カードをフォーマットし、各種ファイルをコピー、設定を行った。 Micro SD カードを KV260 に挿入して、 Debian 10 を起動することができた。
KV260 で ikwzm さんの ZynqMP-FPGA-Linux を試してみる3
前回は、Micro SD カードをフォーマットし、各種ファイルをコピー、設定を行った。 Micro SD カードを KV260 に挿入して、 Debian 10 を起動することができた。今回は、 KV260 上でパッケージをインストールし、 nautilus や geany GUI アプリケーションをインストールした。

KV260 で ikwzm さんの ZynqMP-FPGA-Linux を試してみる4(OpenCV 4.5.4 をインストール、その1)
ikwzm さんの ZynqMP-FPGA-Linux を KV260 にインストールしてみようということで、前回は、KV260 上でパッケージをインストールし、 nautilus や geany GUI アプリケーションをインストールした。今回は、OpenCV 4.5.4 をインストールしよう。cmake までを書いた。
KV260 で ikwzm さんの ZynqMP-FPGA-Linux を試してみる5(OpenCV 4.5.4 をインストール、その2)
KV260 に ikwzm さんの ZynqMP-FPGA-Linux をインストールして、前回は、OpenCV 4.5.4 をインストールしようということで、cmake まで実行した。今回は、OpenCV 4.5.4 の残りのインストールを行う。

Vitis HLS 2021.2 で DMA Readしたデータを2乗し、DMA Writeする KV260 用 IP を作成
KV260 で ikwzm さんの Debian をインストールしてきたが、Ultra96 でやったように DMA Readしたデータを2乗し、DMA Writeする KV260 用 IP を Vitis HLS 2021.2 で作って、Vivado で実装して KV260 の Debian に持っていて動作させてみよう。今回は手始めに Vitis HLS 2021.2 で DMA Read したデータを2乗し、DMA Writeする KV260 用 IP を Vitis HLS 2021.2 で作成する。

デバイスツリー・オーバーレイ をテストするための KV260 用の Vivado 2021.2 のプロジェクトを作成する1
前回は、Vitis HLS 2021.2 で DMA Read したデータを2乗し、DMA Writeする KV260 用 IP を Vitis HLS 2021.2 で作成した。今回は、その DMA_pow2 IP を使用してVivado 2021.2 でDMA_pow2_test プロジェクトを作成し、ブロック・デザインを作成して、論理合成、インプリメンテーション、ビットストリームの生成を行った。
デバイスツリー・オーバーレイ をテストするための KV260 用の Vivado 2021.2 のプロジェクトを作成する2
前回は、DMA_pow2 IP を使用してVivado 2021.2 でDMA_pow2_test プロジェクトを作成し、ブロック・デザインを作成して、論理合成、インプリメンテーション、ビットストリームの生成を行った。今回は、ハードウェアをエクスポートして、 Vitis 2021.2 を立ち上げて、プラットフォームとアプリケーション・プロジェクトを作成して、実機で確かめてみたが、gtkterm に何も表示されなかった。
デバイスツリー・オーバーレイ をテストするための KV260 用の Vivado 2021.2 のプロジェクトを作成する3
前回は、ハードウェアをエクスポートして、Vitis 2021.2 を立ち上げて、プラットフォームとアプリケーション・プロジェクトを作成して、実機で確かめてみたが、gtkterm に何も表示されなかった。今回は、gtkterm に何も表示されなかった原因を追求し、実機確認で動作を確認できたが、キャッシュに書き込むことはできなかった。

KV260 で ikwzm さんのデバイスツリー・オーバーレイをテストする1
KV260 で ikwzm さんの Debian をインストールしてきたが、Ultra96 でやったように DMA Readしたデータを2乗し、DMA Writeする KV260 用 IP を Vitis HLS 2021.2 で作って、Vivado で実装して KV260 の Debian に持っていて動作させてみよう。前回は、ハードウェアの動作を一応確認できた。今回は、”Ultra96 ボードでデバイスツリー・オーバーレイをテストする1”を参照しながら、デバイスツリー・オーバーレイをやってみよう。
KV260 で ikwzm さんのデバイスツリー・オーバーレイをテストする2
前回は、”Ultra96 ボードでデバイスツリー・オーバーレイをテストする1”を参照しながら、デバイスツリー・オーバーレイをやって行ったのだが、デバイスツリー・オーバーレイでクロックの設 定をしたところエラーになってしまった。今回は、ikwzm さんにお聞きして fclk0-zynqmp.dts を変更してクロックの設定を行い、u-dma-buf の設定を行った。
KV260 で ikwzm さんのデバイスツリー・オーバーレイをテストする3
前回は、、ikwzm さんにお聞きして fclk0-zynqmp.dts を変更してクロックの設定を行い、u-dma-buf の設定を行った。今回は、アプリケーション・ソフトウェアの DMA_pow2_test.c を用意して、コンパイルし、FPGAに書いた DMA_pow2 回路の動作を確認しよう。

Vitis HLS 2021.2 で DMA_read IP を作成した
”KV260 で ikwzm さんのデバイスツリー・オーバーレイをテストする3”で ZynqMP の S_AXI_HPC0_FPD を使用しても、キャッシュに読み書きできていないということが分かった。ikwzm さんにお聞きすると、キャッシュに読み書きさせるようにするのも、今の所難しいということだった。
そこで、キャッシュに読み書きするのではなく、メモリに UIO 経由でメモリに直接 read/write する IP を作成しようと思う。最初に DMA_read IP を作成する。
Vitis HLS 2021.2 で DMA_write IP を作成した
メモリに UIO 経由でメモリに直接 read/write する IP を作成しようと思うということで、前回は、DMA_read IP を作成した。今回は、DMA write IP を作成する。

デバイスツリー・オーバーレイ をテストするための KV260 用の Vivado 2021.2 のプロジェクトを作成する4
”Vitis HLS 2021.2 で DMA_read IP を作成した”の DMA_read IP と”Vitis HLS 2021.2 で DMA_write IP を作成した”の DMA_write IP を”デバイスツリー・オーバーレイをテストするための KV260 用の Vivado 2021.2 のプロジェクトを作成する1”のブロック・デザインに追加して、論理合成、インプリメンテーション、ビットストリームの生成を行い、Vitis でデザインにあったアプリケーション・ソフトウェアを作成して動作を確認する。

KV260 に ikwzm さんの Debian 11 をインストールした
Linux で DMA_read IP, DMA_write IP を試す前に KV260 に ikwzm さんの Debian 11 をインストールした。

KV260 で ikwzm さんのデバイスツリー・オーバーレイをテストする4
”KV260 に ikwzm さんの Debian 11 をインストールした”で MicroSD カードに ikwzm さんの Debian 11 をインストールしたので、”KV260 で ikwzm さんのデバイスツリー・オーバーレイをテストする1”からやり直す。
KV260 で ikwzm さんのデバイスツリー・オーバーレイをテストする5
前回は、FPGAビットファイル、クロック設定、u-dma-buf 設定をロードして、/dev/uio* と /dev/udmabuf* が生成されているのを確認した。今回は、/dev/uio* と /dev/udmabuf* のアクセス・モードをユーザーからも使えるように変更し、Make ファイルとアプリケーション・ソフトウェアの DMA_pow2_test.c を作成して、DMA_pow2 回路を動作させてみよう。
成功したが、キャッシュに読み書きできないので、DMA_Write IPでメモリに書き込んで、DMA_pow2 IP で2乗して、DMA_read IPでメモリの内容を見ている。

”MicroZed Chronicles: Kria & Raspberry Pi Camera”+ガウシアンフィルタ+メディアンフィルタ+ソーベルフィルタを ikzwm さんの Debian 11 で動作させる1
DMA_pow2_test の Vivado 2021.2 プロジェクトを ikzwm さんの Debian 11 で動作させることができた。
次は、”ガウシアン・フィルタとメディアン・フィルタを”MicroZed Chronicles: Kria & Raspberry Pi Camera”のブロック・デザインに追加する2”を ikzwm さんの Debian 11 で動作させてみたい。
なお、元ネタは Adam Taylor さんの”MicroZed Chronicles: Kria & Raspberry Pi Camera”だ。
”MicroZed Chronicles: Kria & Raspberry Pi Camera”+ガウシアンフィルタ+メディアンフィルタ+ソーベルフィルタを ikzwm さんの Debian 11 で動作させる2
前回は、各種デバイス・ツリーを作成し、コンパイルした。今回は、それらのデバイス・ツリーを ロードして、UIO と U-DMA-BUF についての情報を見ていこう。
”MicroZed Chronicles: Kria & Raspberry Pi Camera”+ガウシアンフィルタ+メディアンフィルタ+ソーベルフィルタを ikzwm さんの Debian 11 で動作させる3
前回は、それらのデバイス・ツリーをロードして、UIO と U-DMA-BUF についての情報を確認した。今回は、fpga/examples/Kria_PCAM ディレクトリの下に build ディレクトリを作成し、Vitis HLS で作成した IP のドライバをコピーして、Makefile を作成し、 display_port_appn.cpp を試作した。

Kria-PYNQ をやってみる1(SD カード作成)
Kria-PYNQ をやってみようと思う。
Kria-PYNQ をやってみる2(KV260 で Ubuntu 20.04 をブート)
前回は、KV260 用 Ubuntu 20.04 LTS イメージをダウンロードして、MicroSD カードに書き込んだ。今回は、KV260 に MicroSD カードを挿入して、Ubuntu 20.04 LTS をブートして、設定を行った。
Kria-PYNQ をやってみる3(Kira-PYNQ を git clone)
前回は、KV260 に MicroSD カードを挿入して、Ubuntu 20.04 LTS をブートして、設定を行い、X アプリケーションをホスト・パソコンに表示することができた。今回は、Kria-PYNQ を git clone してインストールしようとしたがライブラリの依存関係のエラーがでてしまった。そこで、もう一度 KV260 の MicroSD カードを作り直して、再度挑戦したら Kria-PYNQ をインストールすることができた。Jupyter Notebook を表示した。
Kria-PYNQ をやってみる4(Kira-PYNQ の Jupyter Notebook をやってみる1)
前回は、Kria-PYNQ を git clone してインストールしようとしたがライブラリの依存関係のエラーがでてしまった。そこで、もう一度 KV260 の MicroSD カードを作り直して、再度挑戦したら Kria-PYNQ をインストールすることができた。Jupyter Notebook を表示した。今回は、Jupyter Notebook の kv260/video ディレクトリの display_port_introduction.ipynb と mipi_to_displayport.ipynb をやってみよう。
Kria-PYNQ をやってみる5(Kira-PYNQ の Jupyter Notebook をやってみる2)
Jupyter Notebook の kv260/video ディレクトリの display_port_introduction.ipynb と mipi_to_displayport.ipynb をやってみたのだが、Pcam5C カメラの画像はキャプチャできたが、DisplayPort に出力できなかった。今回は、前回失敗した時の解像度は 1280 x 720 ピクセルだったが、640 x 480 ピクセルに設定してやり直してみたところ DisplayPort に出力することができた。
Kria-PYNQ をやってみる6(Kira-PYNQ の Jupyter Notebook をやってみる3)
前回やったのは、Jupyter Notebook の kv260/video ディレクトリの display_port_introduction.ipynb と mipi_to_displayport.ipynb をやった時に、失敗した時の解像度は 1280 x 720 ピクセルだったが、640 x 480 ピクセルに設定してやり直してみたところ DisplayPort に出力することができた。今回は、opencv_face_detect_webcam.ipynb と opencv_filters_webcam.ipynb をやってみよう。
Kria-PYNQ をやってみる7(Kira-PYNQ の Jupyter Notebook をやってみる4)
前回は、opencv_face_detect_webcam.ipynb と opencv_filters_webcam.ipynb をやってみた。今回は、opencv_filters_webcam.ipynb をちょっと改造して、ジュピター・ノートブックに元画像を表示した。ラプラシアン・フィルタの画像を追加した。ソーベル・フィルタを追加した。

自作した Vivado プロジェクトの DMA_pow2_test を PYNQ で実行する1(構想編)
Kria-PYNQ の pynq-hellowrld に resizer_pl.ipynb ファイルがある。
これは、KV260 の PL に実装した Resize IP を PYNQ の Python から制御するソフトウェアだ。
Resize IP の代わりに Sobel IP などの自分で作成した IP を実装して PYNQ で動作させてみたい。
自作した Vivado プロジェクトの DMA_pow2_test を PYNQ で実行する2(制御用 Python コードの書き方を調べる)
Sobel IP などの自分で作成した IP を実装して Kria-PYNQ で動作させてみたいということで、前回は、PYNQ で使用される Vivado の生成ファイルを調べた。今回は、制御用 Python コードの書き方を調べてみた。

Vitis HLS 2021.2 で KV260 用の DMA_pow2_axis IP を作成する
”PYNQ を使って Python で手軽に FPGA を活用 (5)”をやってみるために、AXI4-Stream インターフェースの 2 乗する IP 、DMA_pow2_axis を作成しよう。

”PYNQ を使って Python で手軽に FPGA を活用 (5)”をやってみる1(Vivado で DMA_pow2_axis_i プロジェクトを作成する)
”PYNQ を使って Python で手軽に FPGA を活用 (5)”を KV260 でやってみるということで、前回は、AXI4-Stream 版の 2 乗 IP の DMA_pow2_axis を Vitis HLS で作成した。今回は、DMA_pow2_axis IP を使用して、Vivado 2021.2 の DMA_pow2_axis_i プロジェクトを作成した。
”PYNQ を使って Python で手軽に FPGA を活用 (5)”をやってみる2(Jupyter Notebook で確認)
”PYNQ を使って Python で手軽に FPGA を活用 (5)”を KV260 でやってみるということで、前回は、DMA_pow2_axis IP を使用して、Vivado 2021.2 の DMA_pow2_axis_i プロジェクトを作成し、論理合成、インプリメンテーション、ビットストリームの生成を行って、成功した。今回は、できあがったビットファイルと hwh ファイルを KV260 のアップロードし、Jupyter Notebook のコードを用意して KV260 で実行した。結果は実行することができなかった。
”PYNQ を使って Python で手軽に FPGA を活用 (5)”をやってみる3(System ILA を使用したデバック)
”PYNQ を使って Python で手軽に FPGA を活用 (5)”を KV260 でやってみるということで、前回は、できあがったビットファイルと hwh ファイルを KV260 のアップロードし、Jupyter Notebook のコードを用意して KV260 で実行した。結果は実行することができなかった。今回は、その原因を探るためにブロック・デザインに System ILA を入れて、波形を見てみよう。

Vitis HLS 2021.2 で KV260 用の DMA_pow2_axis IP を作成する2
前回、”PYNQ を使って Python で手軽に FPGA を活用 (5)”をやってみるために、AXI4-Stream インターフェースの 2 乗する IP 、DMA_pow2_axis を作成したが、””PYNQ を使って Python で手軽に FPGA を活用 (5)”をやってみる3(System ILA を使用したデバック)”に示すように、AXI4-Stream インターフェース出力で tlast を出力する必要があることが分かったので、ソースコードに tlast を追加しようと思う。

”PYNQ を使って Python で手軽に FPGA を活用 (5)”をやってみる4(System ILA を使用したデバック2)
前回は、その原因を探るためにブロック・デザインに System ILA を入れて、波形を観察したところ、S2MM の AXI4-Stream の最後のデータ送出時に TLAST が 1 になっていなかった。そこで、”Vitis HLS 2021.2 で KV260 用の DMA_pow2_axis IP を作成する2”で、TLAST と TUSER を処理した DMA2_pow2 IP を作成した。今回は、この DMA_pow2 IP を使用して、再度 Jupyter Notebook で DMA pow2 を動作させてみたところ、まだ DMA が終了しなかった。
”PYNQ を使って Python で手軽に FPGA を活用 (5)”をやってみる5(System ILA を使用したデバック3)
前回は、DMA_pow2 IP を使用して、再度 Jupyter Notebook で DMA pow2 を動作させてみたところ、まだ S2MM の DMA Write が終了しなかった。具体的には、10 個のデータを DMA Write するはずが、バースト長が 32 個になっていた。今回は、DMA の個数を S2MM の AXI4 Master Write のデータ転送の最後に WLAST が 1 にアサートするまで、データの個数を増やしてみた。33 個のデータで WLAST が 1 になったが、Jupyter Notebook のコード実行はやはり終了しなかった。

”PYNQ を使って Python で手軽に FPGA を活用 (5)”を手順通りにやってみる
今までは、”PYNQ を使って Python で手軽に FPGA を活用 (5)”の”PL から PS に接続されたメモリを読み書きする”の stream_double.v を Vitis HLS 2021.2 で作った DMA_pow2_axis に置き換えて KV260 の PYNQ で実行して失敗していた。今回は、”PYNQ を使って Python で手軽に FPGA を活用 (5)”の”PL から PS に接続されたメモリを読み書きする”をそのままやってみる。つまり、DMA_pow2_axis の代わりに stream_double.v を使って、やってみよう。

DMA_pow2 を Kria-PYNQ の jupyter Notebook で動作させる1(DMA pow2 IP を Vitis HLS で作成する)
””PYNQ を使って Python で手軽に FPGA を活用 (5)”を手順通りにやってみる”で、Vitis HLS 2021.2 で作成した DMA_pow2_axis IP を元々の stream_double.v に変更したら、Jupyter Notebook で動作した。今回は、Xilinx 社の AXI DMA IP を使用せずに、Vitis HLS で作成した AXI4 Master インターフェースの DMA_pow2 IP だとJupyter Notebook で動作するのか?を確認する。今回は、Vitis HLS 2021.2 で DMA_pow2 IP を作成する。
DMA_pow2 を Kria-PYNQ の jupyter Notebook で動作させる2(Vivado でビットファイルと hwh ファイルを生成)
前回は、Vitis HLS 2021.2 で DMA_pow2 IP を作成した。今回は、 Vivado 2021.2 で DMA_pow2_test32 プロジェクトを作成する。 DMA_pow2 IP を使用して DMA_pow2_test32 ブロック・デザインを作成し、論理合成、インプリメンテーション、ビットストリームの生成を行って、ビットファイルと hwh ファイルを生成する。
DMA_pow2 を Kria-PYNQ の jupyter Notebook で動作させる3(Jupyter Notebook で動作確認する)
前回は、Vivado 2021.2 で DMA_pow2_test32 プロジェクトを作成する。 DMA_pow2 IP を使用して DMA_pow2_test32 ブロック・デザインを作成し、論理合成、インプリメンテーション、ビットストリームの生成を行って、ビットファイルと hwh ファイルを生成した。今回は、Jupyter Notebook にビットファイルと hwh ファイルをアップロードして、動作確認を行って成功した。また、System ILA を使って、波形を観察した。

AXI4-Stream におけるサイド・チャネル信号 TKEEP と TSTRB の扱いについて
今まで、TKEEP と TSTRB は”Vivado Design Suite AXI リファレンス ガイド UG1037 (v3.0) 2015 年 6 月 24 日”の 148 ページの”AXI4‐Stream 信号のま とめ”の”表 A-7”によるとオプションで Vitis HLS で IP コアを作成する時も C コードに処理を書かなかったのですが、特に DMA に入力する AXI4-Stream の TKEEP の処理については、入力をそのまま出力に返すか、オール 1 にしないと問題が起こる様だ。

AXI4-Stream の信号についてのまとめ
”AXI4-Stream におけるサイド・チャネル信号 TKEEP と TSTRB の扱いについて”を踏まえて、もう一度 AXI4-Stream 信号についてまとめておきたい。前回 AXI4-Stream について、まとめた資料は”AXI4-Stream のお勉強”

axi_dma と DMA_pow2_axis を Kria-PYNQ で動作させる1(Vitis HLS で DMA_pow2_axis IP を作成)
TKEEP と TSTRB は、入力された信号を出力するか、オール 1 にする必要がありそうだということで、それを踏まえて、再度 axi_dma と DMA_pow2_axis を Kria-PYNQ で動作させてみようと思う。
axi_dma と DMA_pow2_axis を Kria-PYNQ で動作させる2(Vivado でビットファイルと hwh ファイルを生成)
TKEEP と TSTRB は、入力された信号を出力するか、オール 1 にする必要がありそうだということで、それを踏まえて、再度 axi_dma と DMA_pow2_axis を Kria-PYNQ で動作させてみようとうことで、前回は、TKEEP, TSTRB の処理を追加して、DMA_pow2_axis IP を再合成し、IP にした。今回は、その再合成された DMA_pow2_axis IP を使用して、Vivado 2021.2 の DMA_pow2_axis_i プロジェクトを再度、論理合成、インプリメンテーション、ビットストリームの生成を行って、ビットファイルと hwh ファイルを生成する。
axi_dma と DMA_pow2_axis を Kria-PYNQ で動作させる3(Jupyter Notebook で動作確認、波形を確認)
TKEEP と TSTRB は、入力された信号を出力するか、オール 1 にする必要がありそうだ。それを踏まえて、再度 axi_dma と DMA_pow2_axis を Kria-PYNQ で動作させてみようということで、前回は、DMA_pow2_axis IP を使用して、Vivado 2021.2 の DMA_pow2_axis_i プロジェクトを再度、論理合成、インプリメンテーション、ビットストリームの生成を行って、ビットファイルと hwh ファイルを生成した。今回は、Jupyter Notebook で動作を確認し、ILA ダッシュボードで波形を確認する。
動作を確認できた。

PYNQ の画像ファイル・フォーマットを調査するために choose_RGB IP を Vitis HLS 2021.2 で作成する1
”自作した Vivado プロジェクトの DMA_pow2_test を PYNQ で実行する2(制御用 Python コードの書き方を調べる)”で引用した pynq-helloworld/resizer_pl.ipynb ファイルだが、このフレーム・ワークを自分で使用しようとした時に 32 ビット・フィールドの内の R, G, B の割当が分からない?ので、Vitis HLS 2021.2 を使って、確かめてみることにした。
PYNQ の画像ファイル・フォーマットを調査するために choose_RGB IP を Vitis HLS 2021.2 で作成する2
PL の FPGA で画像処理をアクセラレーションする時の、R, G, B のバイト・フィールドを確かめるために、前回は、Vitis HLS 2021.2 で choose_RGB プロジェクトを作成した。今回は、C シミュレーション、C コードの合成、C/RTL 協調シミュレーション、Export RTL 、Implementation を行った。
PYNQ の画像ファイル・フォーマットを調査するために choose_RGB IP を Vitis HLS 2021.2 で作成する3
PL の FPGA で画像処理をアクセラレーションする時の、R, G, B のバイト・フィールドを確かめるために、前回は、choose_RGB プロジェクトで、C シミュレーション、C コードの合成、C/RTL 協調シミュレーション、Export RTL 、Implementation を行った。今回は、前回作成した choose_RGB IP を使用して、Vivado 2021.2 で check_RGB プロジェクトを作成し、論理合成、インプリメンテーション、ビットストリームの生成を行った。
PYNQ の画像ファイル・フォーマットを調査するために choose_RGB IP を Vitis HLS 2021.2 で作成する4
PL の FPGA で画像処理をアクセラレーションする時の、R, G, B のバイト・フィールドを確かめるために、前回は、choose_RGB IP を使用して、Vivado 2021.2 で check_RGB プロジェクトを作成し、論理合成、インプリメンテーション、ビットストリームの生成を行った。今回は、KV260 の Jupyter Notebook に生成されたビットファイルと hwh ファイル、画像ファイルをアップロードして、動作させたところ動作しなかった。
PYNQ の画像ファイル・フォーマットを調査するために choose_RGB IP を Vitis HLS 2021.2 で作成する5
PL の FPGA で画像処理をアクセラレーションする時の、R, G, B のバイト・フィールドを確かめるために、前回は、KV260 の Jupyter Notebook に生成されたビットファイルと hwh ファイル、画像ファイルをアップロードして、動作させたところ動作しなかった。今回は、動作しない原因を確かめるために、AXI4 インターフェースと AXI4-Stream インターフェースに System ILA を挿入し、ILA ダッシュボードで見てみよう。
AXI4-Stream の axi_dma_0_M_AXIS_MM2S を見ると、これは、cv::xf::Mat 形式のデータのようだ。。。
もしかして、AXI4 Stream Data Width Converter で変換できるのだろうか?
PYNQ の画像ファイル・フォーマットを調査するために choose_RGB IP を Vitis HLS 2021.2 で作成する6
PL の FPGA で画像処理をアクセラレーションする時の、R, G, B のバイト・フィールドを確かめるために、前回は、動作しない原因を確かめるために、AXI4 インターフェースと AXI4-Stream インターフェースに System ILA を挿入し、ILA ダッシュボードで見た。その結果、AXI4-Stream の axi_dma_0_M_AXIS_MM2S を見ると、cv::xf::Mat 形式のデータのようだった。cv::xf::Mat 形式のデータだと 3 バイトのデータを 4 バイト幅にエンコードしているので、ワード数が少なくなっているのが、実行が終了しない原因のようだ。今回は、Vitis HLS 2021.2 の choose_RGB IP を 24 ビット幅にして、Vivado 2021.2 のブロック・デザインで AXI4-Stream Data Width Converter を使用して、32 ビット幅から 24 ビット幅に変換してみよう。とりあえずは、Vitis HLS 2021.2 で choose_RGB IP を 24 ビット幅の AXI4-Stream に変更する。
PYNQ の画像ファイル・フォーマットを調査するために choose_RGB IP を Vitis HLS 2021.2 で作成する7
PL の FPGA で画像処理をアクセラレーションする時の、R, G, B のバイト・フィールドを確かめるために、前回は、Vitis HLS 2021.2 の choose_RGB IP を 24 ビット幅にして、Vivado 2021.2 のブロック・デザインで AXI4-Stream Data Width Converter を使用して、32 ビット幅から 24 ビット幅に変換してみよう。とりあえずは、Vitis HLS 2021.2 で choose_RGB IP を 24 ビット幅の AXI4-Stream に変更した。今回は、データ幅を 24 ビットに変更した choose_RGB IP と AXI4-Stream Data Width Converter を使用して Vivado 2021.2 でブロック・デザインを修正して、論理合成、インプリメンテーション、ビットストリームの生成を行った。
PYNQ の画像ファイル・フォーマットを調査するために choose_RGB IP を Vitis HLS 2021.2 で作成する8
PL の FPGA で画像処理をアクセラレーションする時の、R, G, B のバイト・フィールドを確かめるために、前回は、データ幅を 24 ビットに変更した choose_RGB IP と AXI4-Stream Data Width Converter を使用して Vivado 2021.2 でブロック・デザインを修正して、論理合成、インプリメンテーション、ビットストリームの生成を行った。今回は、できあがったビットファイルと hwh ファイルを KV260 の Jupyter Notebook にアップロードし、動作をテストしたところ成功した。

RGB 24 ビット・データ入出力対応のソーベル・フィルタを Vitis HLS 2021.1 で作成する1
”PYNQ の画像ファイル・フォーマットを調査するために choose_RGB IP を Vitis HLS 2021.2 で作成する8”までの作業で画像を KV260 の PYNQ で処理する手順と RGB のフィールドは確認することができた。それじゃ実際の画像アプリケーションを KV260 の PYNQ で実装してみたいということで、ソーベル・フィルタを KV260 の PYNQ で実装してみることにした。
そういう訳で、RGB 24 ビット・データ入出力対応のソーベル・フィルタを Vitis HLS 2021.1 で作成する。今回は、ヘッダとソースコード、テストベンチを貼っておく。
RGB 24 ビット・データ入出力対応のソーベル・フィルタを Vitis HLS 2021.1 で作成する2
前回は、PYNQ で使用するためのソーベル・フィルタを Vitis HLS 2021.2 で作成するためのコードを貼って、sobel_axis_RGB24 プロジェクトを作成した。今回は、C シミュレーション、C コードの合成、C/RTL 協調シミュレーション、Export RTL 、Implementation を行った。
KV260 の PYNQ で自作のソーベル・フィルタを動作させる1
”RGB 24 ビット・データ入出力対応のソーベル・フィルタを Vitis HLS 2021.1 で作成する1”
”RGB 24 ビット・データ入出力対応のソーベル・フィルタを Vitis HLS 2021.1 で作成する2”
で作成した RGB 24 ビット・データ入出力対応のソーベル・フィルタ IP を使用して、Vivado 2021.2 で img_filtプロジェクトを作成し、img_filt ブロック・デザインを作成した。そして、論理合成、インプリメンテーション、ビットストリームの生成を行って、ビットファイルと hwh ファイルを作成した。
KV260 の PYNQ で自作のソーベル・フィルタを動作させる2
前回は、RGB 24 ビット・データ入出力対応のソーベル・フィルタ IP を使用して、Vivado 2021.2 で img_filtプロジェクトを作成し、img_filt ブロック・デザインを作成した。そして、論理合成、インプリメンテーション、ビットストリームの生成を行って、ビットファイルと hwh ファイルを作成した。今回は、ビットファイルと hwh ファイルを KV260 の Jupyter Notebook にアップロードし、sobel.ipynb を作成して、動作を確認したが、DMA buffer サイズが足りないというエラーになった。
KV260 の PYNQ で自作のソーベル・フィルタを動作させる3
前回は、ビットファイルと hwh ファイルを KV260 の Jupyter Notebook にアップロードし、sobel.ipynb を作成して、動作を確認したが、DMA buffer サイズが足りないというエラーになった。今回は、axi_dma_0 の Width of Buffer Length Register が 14 ビットで足りないのじゃないか?という ikwzm さんのツィートでのご指摘があったので、26 ビットに変更して、Vivado プロジェクトで論理合成、インプリメンテーション、ビットストリームの生成を行って、Jupyter Notebook にアップロードして確かめたが、今度は、DMA が終了しなかった。更に、sobel_axis_RGB24 IP の TKEEP, TSTRB をオール 1 にしていないバグも修正したが、やはり、DMA が終了しなかった。
KV260 の PYNQ で自作のソーベル・フィルタを動作させる4
前回は、axi_dma_0 の Width of Buffer Length Register が 14 ビットで足りないのじゃないか?という ikwzm さんのツィートでのご指摘があったので、26 ビットに変更して、Vivado プロジェクトで論理合成、インプリメンテーション、ビットストリームの生成を行って、Jupyter Notebook にアップロードして確かめたが、今度は、DMA が終了しなかった。更に、sobel_axis_RGB24 IP の TKEEP, TSTRB をオール 1 にしていないバグも修正したが、やはり、DMA が終了しなかった。今回は、Vivado のブロック・デザインに System_ILA を実装して、ILA ダッシュボードで波形を確認してみよう。
ここまでやってみて、気がついたことがある。
ソーベル・フィルタ IP は、AXI VDMA の仕様で作ってあって、AXI DMA の仕様じゃなかった。。。
ソーベル・フィルタ IP は、AXI DMA の仕様にする必要があると思う。
TUSER は使わないでスタートして、データの一番最後だけ TLAST を 1 にする必要があるんじゃないだろうか?

Xilinx の axi_dma IP を画像用に使用するための方法
Xilinx 社の axi vdma などの画像用仕様では、画像フレームの最初のデータで AXI4-Stream の tuser を 1 にして、その後は 0 にする。画像の行の最後のデータで tlast を 1 にするという規則がある。

RGB 24 ビット・データ入出力対応のソーベル・フィルタを Vitis HLS 2021.1 で作成する3
”KV260 の PYNQ で自作のソーベル・フィルタを動作させる4”で sobel_axis_RGB24 IP が動作しなかったので、見直した所、”Xilinx の axi_dma IP を画像用に使用するための方法”に示すように、axi_vdma 用と axi_dma 用に動作を分けることにした。改めて、ソースコードとテストベンチを示す。
RGB 24 ビット・データ入出力対応のソーベル・フィルタを Vitis HLS 2021.1 で作成する4
前回は、axi_vdma 用と axi_dma 用に動作を分けた sobel_axis_RGB24 のソースコードとテストベンチを貼った。今回は、sobel_axis_RGB24 の C シミュレーション、C コードの合成、C/RTL 協調シミュレーション、Export RTL、Implementation を行った。
KV260 の PYNQ で自作のソーベル・フィルタを動作させる5
”RGB 24 ビット・データ入出力対応のソーベル・フィルタを Vitis HLS 2021.1 で作成する4”で、Vitis HLS 2021.2 で sobel_axis_RGB24 の C シミュレーション、C コードの合成、C/RTL 協調シミュレーション、Export RTL、Implementation を行った。今回は、”KV260 の PYNQ で自作のソーベル・フィルタを動作させる1”で作成した img_filt ブロック・デザインの sobel_axis_RGB24 IP を入れ替えて、論理合成、インプリメンテーション、ビットストリームの生成を行って、ビット・ファイルと hwh ファイルを生成した。それらのファイルを Jupyter Notebook にアップロードして、確かめた所、ソーベル・フィルタが動作した。完成だ。
KV260 の PYNQ で自作のソーベル・フィルタを動作させる6
前回は、”KV260 の PYNQ で自作のソーベル・フィルタを動作させる1”で作成した img_filt ブロック・デザインの sobel_axis_RGB24 IP を入れ替えて、論理合成、インプリメンテーション、ビットストリームの生成を行って、ビット・ファイルと hwh ファイルを生成した。それらのファイルを Jupyter Notebook にアップロードして、確かめた所、ソーベル・フィルタが動作した。今回は、ソーベル・フィルタは動作したが、せっかく System ILA を入れてあるので、波形を確認してみよう。

RGB 24 ビット・データ入出力対応のメディアン・フィルタを Vitis HLS 2021.2 で作成する1
今まで、ソーベル・フィルタを KV260 の PYNQ で動作させてきたが、メディアン・フィルタも KV260 の PYNQ で動作させてみよう。とりあえず、RGB 24 ビット・データ入出力対応のメディアン・フィルタを Vitis HLS 2021.2 で作成することにした。今回は、RGB 24 ビット・データ入出力対応のメディアン・フィルタ median_axis_RGB24 のソースコードとテストベンチ・コードを貼って、Vitis HLS 2021.2 で作成した median_axis_RGB24 プロジェクトを示す。
RGB 24 ビット・データ入出力対応のメディアン・フィルタを Vitis HLS 2021.2 で作成する2
前回は、RGB 24 ビット・データ入出力対応のメディアン・フィルタ median_axis_RGB24 のソースコードとテストベンチ・コードを貼って、Vitis HLS 2021.2 で作成した median_axis_RGB24 プロジェクトを示した。今回は、RGB 24 ビット・データ入出力対応のメディアン・フィルタ median_axis_RGB24 の C シミュレーション、C コードの合成、C/RTL 協調シミュレーション、Export RTL、Implementation を行った。

KV260 の PYNQ で自作のメディアン・フィルタとソーベル・フィルタを動作させる1
”KV260 の PYNQ で自作のソーベル・フィルタを動作させる5”のブロック・デザインに”RGB 24 ビット・データ入出力対応のメディアン・フィルタを Vitis HLS 2021.2 で作成する2”で作成した median_axis_RGB24 IP を追加して、論理合成、インプリメンテーション、ビットストリームの生成を行った。
KV260 の PYNQ で自作のメディアン・フィルタとソーベル・フィルタを動作させる2
前回は、”KV260 の PYNQ で自作のソーベル・フィルタを動作させる5”のブロック・デザインに”RGB 24 ビット・データ入出力対応のメディアン・フィルタを Vitis HLS 2021.2 で作成する2”で作成した median_axis_RGB24 IP を追加して、論理合成、インプリメンテーション、ビットストリームの生成を行った。今回は、生成されたビット・ファイルと hwh ファイルを KV260 上の Jupyter Notebook にアップロードし、img_filt.ipynb ファイルを作成して、動作を確認したところ動作した。

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 を行った。

Xilinx の Petalinux イメージの KV260 に gcc をインストールする
Xilinx の Petalinux イメージの KV260 に dnf で gcc をインストールしてみる。
Xilinx の Petalinux イメージには、Ubuntu などの apt と同様なコマンド dnf がインストールされているので、これでインストールしてみよう。
memread, memwrite を使用して kv260_median_platform を使用した vadd アプリケーション・プロジェクトの IP にアクセスする
”Xilinx の Petalinux イメージの KV260 に gcc をインストールする”で作成した memread を使用して、”メディアン・フィルタを含んだ Vitis アクセラレーション・プラットフォームを作成する9(プラットフォームのテスト2)”でテストしている vadd アプリケーション・プロジェクトの メディアン・フィルタ IP と vadd IP にアクセスしてみよう。
Xilinx の Petalinux イメージの KV260 に OpenCV 3.4.9 をインストールする
Xilinx の Petalinux イメージの KV260 に OpenCV 3.4.9 のソースコードをダウンロードしてインストールしようとしたが、make でエラーになってしまった。
Xilinx の Petalinux イメージの KV260 に OpenCV 3.4.16 をインストールする
”Xilinx の Petalinux イメージの KV260 に OpenCV 3.4.9 をインストールする”で OpenCV の make に失敗した。それで、最新の OpenCV 3.4.16 を Xilinx の Petalinux イメージの KV260 にインストールしたら、インストールが成功した。
KV260 の Petalinux にインストールした OpenCV を使った C++ アプリケーション・ソフトウェアを cmake でコンパイルする
”Xilinx の Petalinux イメージの KV260 に OpenCV 3.4.16 をインストールする”で OpenCV 3.4.16 をインストールすることができた。今回は、インストールした OpenCV 3.4.16 の関数を使った C++ アプリケーション・ソフトウェアを cmake でコンパイルすることができた。

KV260 の Petalinux にインストールした OpenCV を使った median_filter を実装する
”KV260 の Petalinux にインストールした OpenCV を使った C++ アプリケーション・ソフトウェアを cmake でコンパイルする”で KV260 の Petalinux で OpenCV を使用したアプリケーション・ソフトウェアの median_filter を cmake でコンパイルして、実際に動作することを確認した。
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 がノイズを除去した画像ファイルになったが、色が違っていた。

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

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 することができるようになった。

Xilinx の Petalinux 2022.1 イメージの KV260 に OpenCV 3.4.16 をインストールしようとしたが失敗した
OpenCV 3.4.16 を Xilinx の Petalinux 2022.1 イメージの KV260 にインストールすることにしたが失敗した。

Xilinx の Petalinux 2022.1 イメージの KV260 で GUI アプリケーションの pcmanfm ファイルマネージャーを起動する
Xilinx の Petalinux 2022.1 イメージの KV260 で GUI アプリケーションが表示できればとっても良いということで、pcmanfm ファイルマネージャーを起動することができた。
Xilinx の Petalinux 2022.1 イメージの KV260 で GUI アプリケーションの l3afpad テキストエディタを起動する
”Xilinx の Petalinux 2022.1 イメージの KV260 で GUI アプリケーションの pcmanfm ファイルマネージャーを起動する”で、pcmanfm ファイルマネージャーを Xilinx の Petalinux 2022.1 イメージの KV260 で起動することができた。今度は、GUI で動作するテキストエディタをインストールしたいということで、l3afpad テキストエディタを起動することができた。
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 をインストールすることができた。
Xilinx の Petalinux 2022.1 イメージの KV260 で gtk-play をインストールする
Xilinx の Petalinux 2022.1 イメージの KV260 で何か画像表示ソフトをインストールしたいと思って dnf search で探していたのだが、なかなか見つからなかった。困っていたところ、gtk-play をインストールして、画像を表示することができた。
KV260 の Petalinux 2022.1 にインストールした OpenCV 4.5.2 を使った C++ アプリケーション・ソフトウェアを cmake でコンパイルする
元ネタは”KV260 の Petalinux にインストールした OpenCV を使った C++ アプリケーション・ソフトウェアを cmake でコンパイルする”を使っている。インストールした OpenCV 4.5.2 の関数を使った C++ アプリケーション・ソフトウェアを cmake でコンパイルする。

KV260 で Ubuntu 22.04 をブートする
Kria-PYNQ を KV260 で使って見るために新しい Ubuntu 22.04 を KV260 で使ってみよう。
最初に”設計開始 Kria KV260 ビジョン AI スターター キットを使用”の”手順 1. SD カード イメージを設定する (Ubuntu)”で” Kria Ubuntu デスクトップ 22.04 LTS イメージ”をダウンロードすることにした。
ブートした KV260 用 Ubuntu 22.04 の設定を行った
前回は、Ubuntu 22.04 のイメージをダウンロードした。MicroSD カードに書いて、KV260 に挿入し、Ubuntu 22.04 をブートすることができた。今回は、その Ubuntu 22.04 の設定を行った。
KV260 の Ubuntu 22.04 に Kria-PYNQ のインストールを試みたが失敗した
前回は、Ubuntu 22.04 の設定を行って、GUI のファイルマネージャーやテキスト・エディタを起動することができた。今回は、その KV260 の Ubuntu 22.04 に Kria-PYNQ をインストールしてみたところ失敗した。


inserted by FC2 system