PYNQ

PYNQボード1
昨日、PYNQボードが手に入りました。
PYNQボード 2(Linux の起動)
前回はMicroSD カードに書くイメージをダウンロードした。今回はイメージをMicroSD カードに書いて、PYNQボードでLinux を起動してみよう。
PYNQボード 3(Jupyter Notebook)
前回はLinux を起動して、起動メッセージや、Webページ、Samba の様子を確認した。今回は、PYNQボードで起動しているWebアプリケーションのJupyter Notebook をやってみた。
PYNQボード 4(OpenCVをインストール)
前回は、PYNQボードのJupyter Notebook を試してみた。今回は、PYNQボードのLinux を確認して、OpenCVをインストールしてみた。
PYNQボード用PSの設定 方法
Vivado のブロックデザインでPS の設定はどうやるのか?というのが疑問だったので、調べてみた。
PYNQボードのデバイス・ ツリー(devicetree)
Vivado のIP インテグレータでのPS の設定をすることができたので、今度はデバイス・ツリーが分かればLinux でVivado のプロジェクトに追加したIP をLinux でUIO として使うことができる。
今回は、PYNQボードのデバイス・ツリーを探ってみた。

Xilinx/PYNQのプ ロジェクトを生成した1
ikwzm さんの”PYNQ-Z1 の ビットストリームを再ビルドしたときのタイミング違反を無くす”を見ながら、Xilinx/PYNQのプロジェクトを生成してみた。(この記事はbase.tcl を動作させるディレクトリを間違っていました。)
Xilinx/PYNQのプ ロジェクトを生成した2(タイミングエラーの解析1)
前回はちょっとミスったが、PYNQのプロジェクトを生成することができた。今回はそのタイミ ングエラーを解析してみよう。
Xilinx/PYNQのプ ロジェクトを生成した3(タイミングエラーの解析2)
前回はタイミング・レポートを100個まで表示した。今回は、Report CDC を確認してみた。
Xilinx/PYNQのプ ロジェクトを生成した4(タイミングエラーの解決)
前回は、Report CDC で異なるクロック・ドメイン間のデータのやり取りの状況を解析した。今回はその問題となるパスを確認して解決してみよう。

PYNQボードでカメラ画像 をリアルタイムにFASTX コーナー検出1
このところ実装しているVivado HLS のFASTX コーナー検出IP をPYNQ ボードにも実装してカメラ画像からリアルタイムにFASTX コーナー検出を行った。
PYNQボードでカメラ画像 をリアルタイムにFASTX コーナー検出2
前回、ブロックデザインが完成したので、今回は、ビットストリームまで生成して、SDKを立ち 上げてアプリケーションソフトを作り、PYNQボードでカメラ画像をリアルタイムにFASTX コーナー検出してみよう。

PYNQボードのFASTX コーナー検出にラプラシアンフィルタIPとアンシャープ・マスクキング・フィルタIPを追加1(Vivado HLS)
PYNQボードには、”PYNQボードでカメラ画像をリアルタイムにFASTX コーナー検出1”、”PYNQボードでカメラ画像をリアルタイムにFASTX コーナー検出2”で、PYNQボードに付けたカメラの画像にFASTX コーナー検出をリアルタイムで行うことができた。
でも、そろそろPYNQ祭りに向けて、もう少しPYNQボードに芸をさせたい。そこで、いつものラプラシアンフィルタIPと最近、assert() の例としてやってみたアンシャープ・マスクキング・フィルタを追加することにした。
PYNQボードのFASTX コーナー検出にラプラシアンフィルタIPとアンシャープ・マスクキング・フィルタIPを追加2(Vivado HLS2)
前回は、アンシャープ・マスクキング・フィルタIP を生成した。今回はラプラシアンフィルタIP を生成する。
PYNQボードのFASTX コーナー検出にラプラシアンフィルタIPとアンシャープ・マスクキング・フィルタIPを追加3(Vivado)
前回は、PYNQボード用の AXI4-Stream版のラプラシアンフィルタIP を作成した。今回は、AXI4-Stream版アンシャープ・マスクキング・フィルタIP と AXI4-Stream版のラプラシアンフィルタIP をPYNQボードのFASTX コーナー検出のVivado 2016.4 プロジェクトに追加する。
PYNQボードのFASTX コーナー検出にラプラシアンフィルタIPとアンシャープ・マスクキング・フィルタIPを追加4(SDK)
前回は、Vivado 2016.4 のブロックデザイン上で、FASTXコーナー検出IP にラプラシアンフィルタIP とアンシャープ・マスクキング・フィルタIP を追加した。今回はアプリケーションソフトを作成して、動作させてみよう。
PYNQボードのFASTX コーナー検出にラプラシアンフィルタIPとアンシャープ・マスクキング・フィルタIPを追加5(Jupyter Notebookで開発中)
前回は、SDK のベアメタル・アプリケーションソフトでPYNQボード用のFASTX コーナー検出とラプラシアンフィルタ、アンシャープ・マスクキング・フィルタをテストできた。今回は、Jupyter Notebook を使用してPython で開発している。
PYNQボードのFASTX コーナー検出にラプラシアンフィルタIPとアンシャープ・マスクキング・フィルタIPを追加6(Jupyter Notebookで開発中2)
いろいろとJupyter Notebook でやってはいるが、まだカメラ画像が表示されない。ちなみに今使っているPYNQボードのMicro SDカードのイメージは 2017/02/10 以前のものだ。

PYNQ祭りに参加してきま した
昨日は、「FPGAエクストリーム・コンピューティング 番外編:PYNQ祭り」に参加して発表してきました。

XilinxのBNN- PYNQをやってみる1(インストール編)
XilinxのBNN-PYNQをやって見たいということで、やってみました。BNN- PYNQはBinarized Neural Network (BNN) on PYNQ だそうです。
XilinxのBNN- PYNQをやってみる2(jupyter notebook)
前回は、BNN-PYNQをインストールした。今回は、jupyter notebook の bnn/Cifar10.ipynb をやってみた。
XilinxのBNN- PYNQをやってみる3(Hardware design rebuilt 1)
”Ubuntu16.04にVivado 2016.4をインストール”でVirtualBoxに新しいVirtualマシンを作って、Ubuntu 16.04 をインストールして、Vivado 2016.4 をインストールできたので、やっとBNN-PYNQのHardware design rebuilt がやれる環境が整った。それで、BNN-PYNQのHardware design rebuilt をやってみることにした。今回はcnv-pynq をやってみた。
XilinxのBNN- PYNQをやってみる4(Hardware design rebuilt 2)
前回は、BNN-PYNQの cnv-pynq をHardware design rebuilt したので、今回はもう1つの lfc-pynq をHardware design rebuilt してみよう。

BNN-PYNQをアップグ レード
BNN-PYNQが頻繁に変更されているので、PYNQボードのBNN-PYNQをアップグ レードした。


”FPGA+SoC+Linux+Device Tree Overlay+FPGA Manager(PYNQ-Z1対応)”を試してみる1(FPGA-SoC-Linux のクローン)
ikwzm さんの”FPGA+SoC+Linux+Device Tree Overlay+FPGA Manager(PYNQ-Z1対応)”を試してみようと思う。
”FPGA+SoC+Linux+Device Tree Overlay+FPGA Manager(PYNQ-Z1対応)”を試してみる2(Micro SDカードの準備)
前回は、FPGA-SoC-Linux をクローンした。今回は、Micro SDカードをフォーマットして、パーティションを切った。
”FPGA+SoC+Linux+Device Tree Overlay+FPGA Manager(PYNQ-Z1対応)”を試してみる3(PYNQでテスト)
前回は、Micro SDカードの準備を行った。今回は、そのMicro SDカードにファイルを書き込んで、PYNQに挿入してテストしてみよう。
”FPGA+SoC+Linux+Device Tree Overlay+FPGA Manager(PYNQ-Z1対応)”を試してみる4(環境の整備)
前回は、Micro SDカードのパーティションに必要なファイルをコピーして、PYNQに挿入してDebian をブートした。そして、Linux ヘッダ/イメージパッケージとデバイスドライバ パッケージのインストールを行った。今回は、そのPYNQのDebian 環境を整備しよう。

PYNQのLED表示プロ ジェクト1(ブロックデザインの作成)
ikwzm さんのFPGA Manager と デバイスツリー・オーバーレイを確かめてみるために、簡単な例としてPYNQボードのLED表示プロジェクトを作ることにした。
PYNQのLED表示プロ ジェクト2(完成)
前回は、ikwzm さんのFPGA Manager と デバイスツリー・オーバーレイを確かめてみるために、簡単な例としてPYNQボードのLED表示プロジェクトを作ることにして、ブロックデザインを作って、論理合成を始め るところまでだった。今回は、論理合成、インプリメント、ビットストリームの生成を行って、SDKでアプリケーションソフトを作って、PYNQで確かめた。

”FPGA+SoC+Linux+Device Tree Overlay+FPGA Manager(PYNQ-Z1対応)”を試してみる5(デバイスツリー・オーバーレイ)
前回は、ikwzm さんの配布しているDebian の環境整備を行った。今回は、 デバイスツリー・オーバーレイを確かめてみよう。
”FPGA+SoC+Linux+Device Tree Overlay+FPGA Manager(PYNQ-Z1対応)”を試してみる6(FPGA Manager)
前回は、デバイスツリー・オーバーレイを試して、成功した。今回は、FPGAをコンフィギュ レーションする FPGA Manager を試してみた。
”FPGA+SoC+Linux+Device Tree Overlay+FPGA Manager(PYNQ-Z1対応)”を試してみる7(shellスクリプト)
前回は、FPGA Manager を試して、ikwzm さんのおかげでビットファイルをダウンロードして、アプリケーションソフトを動作させることができた。今回は、デバイスツリー・オーバーレイとFPGA Manager を shell スクリプトにしてみようと思う。
”FPGA+SoC+Linux+Device Tree Overlay+FPGA Manager(PYNQ-Z1対応)”を試してみる8(入れ替え1)
前回は、デバイスツリー・オーバーレイとFPGA Manager を使いやすいようにShell スクリプトを作成した。今回は、2つのFPGA回路とデバイスツリーをLinux 起動しながら入れ替えてみようと思う。
”FPGA+SoC+Linux+Device Tree Overlay+FPGA Manager(PYNQ-Z1対応)”を試してみる9(入れ替え2)
前回は、新たなFPGA回路として、以前作ったFASTX コーナー検出、ラプラシアンフィルタ、アンシャープ・マスクキング・フィルタの回路をコンフィギュレーションし、デバイスツリー・オーバーレイを行った。今回は、その動作 をチェック(動作しなかったのだが)し、その後で、PYNQのLinux を起動しながら、GPIO でLED をテストする回路をコンフィギュレーションし、デバイスツリー・オーバーレイを行って、動作を確認する。

ikwzm さんの構築したPYNQ ボード用DebianでのPS出力クロックfclkの設定方法
昨日のFASTX コーナー検出、ラプラシアンフィルタ、アンシャープ・マスクキング・フィルタの回路が動かないと書いたが、ikwzm さんがクロックはどうなっているかと聞いてくれて、それでハッと気が付いた。Zynq のクロックはPSから供給されていて、ビットファイルは関係ない。。。
ikzwm さんから、”Linux でユーザー空間から Zynq の PLクロック信号を制御するデバイスドライバ”を教えて頂いた。いつもありがとうございます。しかし、何でも作ってありますね。。。

”FPGA+SoC+Linux+Device Tree Overlay+FPGA Manager(PYNQ-Z1対応)”を使用してカメラの画像を表示
「”FPGA+SoC+Linux+Device Tree Overlay+FPGA Manager(PYNQ-Z1対応)”を試してみる9(入れ替え2)」では、FASTX コーナー検出、ラプラシアンフィルタ、アンシャープ・マスクキング・フィルタの回路を使用して、カメラ画像を表示することができなかった。これは、PS から出力される fclk の出力周波数が設定されていないのが原因ではないか?というご指摘を ikwzm さんから頂いた。
そこで、「ikwzm さんの構築したPYNQ ボード用DebianでのPS出力クロックfclkの設定方法」で、デバイスツリー・オーバーレイを使用した。fclk の設定のやり方を学習したので、実際にFASTX コーナー検出、ラプラシアンフィルタ、アンシャープ・マスクキング・フィルタの回路に適用して試してみよう。

Pmod Shield: Adapter Board for Uno R3 Standard to Pmod
”Pmod Shield: Adapter Board for Uno R3 Standard to Pmod”が来ました。これは、PYNQやArty-Z7、Arty のArduino拡張コネクタに刺さって、Pmodコネクタを増設するボードです。


Kerasを使用したMNIST CNNで手書き文字認識1(以前のVivado プロジェクトをVivado 2017.4に変換)

”TensorFlow + Kerasを使ってみた22(Linux版とWindows版のVivado HLSでの違い)”までで作ってきたMNISTのCNNをVivado に組み込んで実機で動作させてみようと思う。とりあえずは、従来のフレームワークに入れて、HLSストリーム版のCNN が実際にうまく行くかを確認したい。
Kerasを使用した MNIST CNNで手書き文字認識2(all_layers IP の挿入)
”Kerasを使用したMNIST CNNで手書き文字認識1(以前のVivado プロジェクトをVivado 2017.4に変換)”のCNN IP を削除して、”DMA付きテンプレートを使用したMNISTのCNN4(Cコードの合成、Export RTL)”で作成したIP をAdd IP したのだが、Add IPのリストに出てこなかった。そこで、Windows版のVivado HLS 2018.2 で再度IP化して、Vivado 2018.2 のVivado プロジェクトにAdd IP した。
Kerasを使用した MNIST CNNで手書き文字認識3(ビットストリームの生成、SDK)
前回は、”Kerasを使用したMNIST CNNで手書き文字認識1(以前のVivado プロジェクトをVivado 2017.4に変換)”のCNN IP を削除して、Windows版のVivado HLS 2018.2 で mnist_conv_nn3_hlss_ko_dma プロジェクトの all_layers IP を再度作成してAdd IP した。今回は PYNQ_MNIST_CNN3_182 フォルダVivado 2018.2 プロジェクトの論理合成、インプリメンテーション、ビットストリームの生成を行い、SDK でアプリケーションソフトの mnist_conv_soft_test.c を今回のプロジェクトに合うように変更した。
Kerasを使用した MNIST CNNで手書き文字認識4(実機確認)
前回は、 PYNQ_MNIST_CNN3_182 フォルダVivado 2018.2 プロジェクトの論理合成、インプリメンテーション、ビットストリームの生成を行い、SDK でアプリケーションソフトの mnist_conv_soft_test.c を今回のプロジェクトに合うように変更した。今回は、SDK でPYNQボードをコンフィギュレーションし、アプリケーションソフトの mnist_conv_soft_test.elf を起動してPYNQボードで動作を確認する。
Kerasを使用した MNIST CNNで手書き文字認識5(実機確認2)
前回は、SDK でPYNQボードをコンフィギュレーションし、アプリケーションソフトの mnist_conv_soft_test.elf を起動してPYNQボードで動作を確認した。今回はアプリケーションソフトを動作させて、自分で書いた手書き数字を認識させてみよう。
Kerasを使用した MNIST CNNで手書き文字認識6(実機確認3)
前回は、アプリケーションソフトを動作させて、自分で書いた手書き数字を認識させたが、1, 4, 6, 7 が誤認識してしまった。以前の 10 個の特徴マップのCNN では、正常に認識しているので、量子化の精度、および飽和演算に問題があるのか?はたまた過学習になっているのかを検証することになった。今回は、考えられる 2 つの原因の内の量子化の精度、および飽和演算について検証を行った。
Kerasを使用した MNIST CNNで手書き文字認識7(特徴マップが3個のMNISTのCNNを再学習)
前回は、考えられる 2 つの原因の内の量子化の精度、および飽和演算について検証を行ったが、浮動小数点数による特徴マップが3個のMNISTのCNN の演算でも手書き数字を誤認識していたので、量子化の精度、および飽和演算の問題ではないという結論になった。今回は、過学習が手書き数字の誤認識に影響しているのか?を 確かめるために、Epoch 数を変更して再学習を行った。
Kerasを使用した MNIST CNNで手書き文字認識8(特徴マップが3個のMNISTのCNNを再学習2)
前回は、過学習が手書き数字の誤認識に影響しているのか?を確かめるために、Epoch 数を変更して再学習を行って、PYNQボードに実装して手書き数字の認識を確認した。今回は、その過程でVivado HLS で行った、精度の確認を書けなかったので、それを書いておく。
Kerasを使用した MNIST CNNで手書き文字認識9(特徴マップが10個のMNISTのCNNを再学習1)
前回は、MNIST のCNN の特徴マップが3個の時に過学習が手書き数字の誤認識に影響しているのか?を確かめるために、Epoch 数を変更して再学習を行った時の重みやバイアスをVivado HLS のC ヘッダ・ファイルとして代入した時の結果を示した。今回は、特徴マップが3個の時には、あまり精度の向上が見られなかったため、MNIST のCNN の特徴マップが10個の場合を再学習してVivado HLS で精度を確認してみようと思う。
Kerasを使用した MNIST CNNで手書き文字認識10(特徴マップが10個のMNISTのCNNを再学習2)
前回は、MNIST のCNN の特徴マップが10個の場合を再学習してVivado HLS で精度を確認した。今回は、Vivado HLSで精度を確認できたので、Vivado HLS 2018.2 で mnist_conv_nn10_hlss_ko_dma プロジェクトを作成して、IP 化を行い、PYNQ_MNIST_CNN10_182 フォルダのVivado 2018.2 プロジェクトを作成し、論理合成、インプリメンテーション、ビットストリームの生成を行った。
Kerasを使用した MNIST CNNで手書き文字認識11(特徴マップが10個のMNISTのCNNを再学習3)
前回は、Vivado HLS 2018.2 で mnist_conv_nn10_hlss_ko_dma プロジェクトを作成して、IP 化を行い、PYNQ_MNIST_CNN10_182 フォルダのVivado 2018.2 プロジェクトを作成し、論理合成、インプリメンテーション、ビットストリームの生成を行った。今回は、SDK を起動して、PYNQボードをコンフィギュレーションし、アプリケーションソフトを起動して、手書き数字の認識を行った。


inserted by FC2 system