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
をインストールしてみたところ失敗した。