FC2カウンター FPGAの部屋 その他のFPGAの話題

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

FPGAの部屋

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

reVISION-Zybo-Z7-20をやってみた9(再びDense Non-Pyramidal Optical Flow)

reVISION-Zybo-Z7-20をやってみた8(Harrisコーナー検出)”の続きではあるのだが、”@ikwzmさんの”FPGA+SoC+Linux+Device Tree Overlay+FPGA Region(SDSoC対応編)”をやってみる4”でエラーになった Dense Non-Pyramidal Optical Flow の対処方法を @ikwzm さんに教えて頂いたので、もう一度やってみようと思う。@ikwzm さん、お世話になり、ありがとうございました。

まずは、Linux 上では、CMA (Contiguous Memory Allocator) 領域という領域を SDSoC は使用している。CMA 領域は連続なメモリ領域を取ることができる。通常のメモリ領域を malloc() などで確保した場合はソフトウェア側から連続に見えても MMU (Memory Management Unit) がページごとに物理メモリを割り振っていて、ページを超えると物理アドレスが連続していないということが良くあり得る。その場合には、FPGAがメモリにDMA する場合は、ページごとにDMA の再起動が必要となる(ちなみにAXI4 インターフェースは 4Kバイト境界でバーストをやめる必要があります)。ページごとにアドレスを入れ替えるために Scatter Gather DMA がある。だが、連続領域にDMA するほうが絶対に効率が良い。そこで、物理メモリ的に連続領域を確保できる CMA 領域の出番がある。

Dense Non-Pyramidal Optical Flow のエラーは、その CMA 領域を確保しようとしたがメモリが足りないよというエラーだった。
よってCMA 領域を増やせば良いということになる。現在は 16 MB を確保している。それを 64 MB に増やすことにした。
増やし方は、ZYBO-Z7-20 の Micro SD カードの第1パーティションの uEnv.txt を書き換えることだ。なお、この書き方は、@ikwzm さんに教えて頂いた。

ZYBO-Z7-20 の Debian 上では /boot にマウントされている ディレクトリの uEnv.txt を書き換える。

linux_boot_cmd=setenv bootargs console=ttyPS0,115200 root=/dev/mmcblk0p2 rw rootwait uio_pdrv_genirq.of_id=generic-uio && bootz 0x03000000 - 0x02A00000



linux_boot_cmd=setenv bootargs console=ttyPS0,115200 root=/dev/mmcblk0p2 rw rootwait uio_pdrv_genirq.of_id=generic-uio cma=64M && bootz 0x03000000 - 0x02A00000


にした。つまり bootargs に cma=64M を追加した。
reVISION-Zybo-Z7-20_124_120409.png

リブートして、dmesg を見ると、CMA 領域が 64MB になった。
reVISION-Zybo-Z7-20_125_120409.png

それでは、もう一度、Dense Non-Pyramidal Optical Flow を@ikwzm さんの”FPGA+SoC+Linux+Device Tree Overlay+FPGA Region(SDSoC対応編)”の環境で動作させてみよう。

cd ~/sdsoc_test/dnp_of
sudo cp sd_card/_sds/_p0_.bin /lib/firmware/
sudo dtbocfg.rb --install _p0_ --dts _p0_.dts
sudo dtbocfg.rb --install xlnk --dts xlnk.dts
cd sd_card/
sudo ./dnp_of.elf im0.jpg im1.jpg

今度はエラー無しに実行できた。
reVISION-Zybo-Z7-20_113_120408.png

~/sdsoc_test/dng_of/ ディレクトリを示す。
reVISION-Zybo-Z7-20_114_120408.png

~/sdsoc_test/dng_of/sd_card/ ディレクトリを示す。
reVISION-Zybo-Z7-20_115_120408.png

out_0.jpg ができている。開いてみると、
reVISION-Zybo-Z7-20_116_120408.jpg

うまく行っている。成功だ。
  1. 2018年04月09日 04:13 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

@ikwzmさんの”FPGA+SoC+Linux+Device Tree Overlay+FPGA Region(SDSoC対応編)”をやってみる4

@ikwzmさんの”FPGA+SoC+Linux+Device Tree Overlay+FPGA Region(SDSoC対応編)”をやってみる3”の続き。

前回は、実行ファイルを実行した後で、一旦ドライバを取り外して異なるマスタの回路をロードして、マスタ用の実行ファイルを実行することができた。今回は、”ZYBO-Z7-20のDebianにOpenCV 3.1.0をインストール”で ZYBO-Z7-20 の Debian に OpenCV 3.1.0 をインストールすることができたので、”reVISION-Zybo-Z7-20をやってみた6(Zybo-Z7-20 で確認)”でやったバイラテラル・フィルタや、”reVISION-Zybo-Z7-20をやってみた8(Dense Non-Pyramidal Optical Flow)”でやった Dense Non-Pyramidal Optical Flow を @ikwzm さんの”FPGA+SoC+Linux+Device Tree Overlay+FPGA Region(SDSoC対応編)”でやってみることにする。

まずはバイラテラル・フィルタからやってみよう。
まずは、ZYBO-Z7-20 の Debian の ~/sdsoc_test ディレクトリに bilateral_ex と dnp_of の 2 つのディレクトリを作成した。
~/sdsoc_test/bilateral_ex ディレクトリには、_p0_.dts と xlink.dts と reVISION-Zybo-Z7-20 で生成したバイラテラル・フィルタの Debug/sd_card ディレクトリをSFTP してコピーした sd_card ディレクトリがある。なお、_p0_.dts と xlink.dts については、”@ikwzmさんの”FPGA+SoC+Linux+Device Tree Overlay+FPGA Region(SDSoC対応編)”をやってみる2”を参照のこと。

sd_card/_sds/_p0_.bin を /lib/firmware/ にコピーして、 _p0_.dts をロードした。更に xlink.dts をロードした。
./sd_card/bilateral_ex.elf を実行したところ libv4l2subdev.so.0 共有ライブラリが無いというエラーになってしまった。
sudo cp sd_card/_sds/_p0_.bin /lib/firmware/
sudo dtbocfg.rb --install _p0_ --dts _p0_.dts
sudo dtbocfg.rb --install xlnk --dts xlnk.dts
sudo ./sd_card/bilateral_ex.elf

SDSoC_ikwzm_34_180406.png

エラー内容を示す。

./sd_card/bilateral_ex.elf: error while loading shared libraries: libv4l2subdev.so.0: cannot open shared object file: No such file or directory


reVISION-Zybo-Z7-20 の Micro SD カードのROOTFS パーテションを libv4l2subdev.so.0 で検索すると /usr/lib/ ディレクトリで発見した。
SDSoC_ikwzm_35_180406.png

”FPGA+SoC+Linux+Device Tree Overlay+FPGA Region(SDSoC対応編)”の Micro SD カードの元から /usr/lib/に入ってたファイルを作成した old_lib にコピーした。
SDSoC_ikwzm_36_180406.png

reVISION-Zybo-Z7-20 の Micro SD カードのROOTFS パーテションの libv4l2subdev.so.0 を”FPGA+SoC+Linux+Device Tree Overlay+FPGA Region(SDSoC対応編)”の Micro SD カードの /usr/lib/ にコピーした。(異なるターミナルでコピーを行った)
その後もう一度、バイラテラル・フィルタの実行ファイルを実行した。
sudo ./sd_card/bilateral_ex.elf
すると、libmediactl.so.0 が足りないと言われた。エラー内容を示す。

./sd_card/bilateral_ex.elf: error while loading shared libraries: libmediactl.so.0: cannot open shared object file: No such file or directory


同様に、reVISION-Zybo-Z7-20 の Micro SD カードのROOTFS パーテションの libmediactl.so.0 を”FPGA+SoC+Linux+Device Tree Overlay+FPGA Region(SDSoC対応編)”の Micro SD カードの /usr/lib/ にコピーした。(異なるターミナルでコピーを行った)
そして、
sudo ./sd_card/bilateral_ex.elf
今度は動作したが、im0.jpg を指定するのを忘れていた。
sudo ./sd_card/bilateral_ex.elf ./sd_card/im0.jpg
今度は成功した。実行時のレポートを示す。

sigma_color: 7.72211 sigma_space: 0.901059
elapsed time 14358244
Minimum error in intensity = 0
Maximum error in intensity = 1
Percentage of pixels above error threshold = 0.00236304 Count: 4


SDSoC_ikwzm_37_180406.png

SDSoC_ikwzm_38_180406.png

ZYBO-Z7-20 の Debian の ~/sdsoc_test/bilateral/ex/ ディレクトリを nautilus で見たところだ、error.png, hls_out.jpg, output_ocv.png が生成されている。
SDSoC_ikwzm_40_180406.png

error.png を示す。
SDSoC_ikwzm_41_180406.jpg

hls_out.jpg を示す。
SDSoC_ikwzm_42_180406.jpg

output_ocv.png を示す。
SDSoC_ikwzm_43_180406.jpg

次に、ドライバを削除して Dense Non-Pyramidal Optical Flow をやってみよう。
cd ~/sdsoc_test/dnp_of
sudo dtbocfg.rb --remove _p0_
sudo dtbocfg.rb --remove xlnk
sudo cp sd_card/_sds/_p0_.bin /lib/firmware/
sudo dtbocfg.rb --install _p0_ --dts _p0_.dts
sudo dtbocfg.rb --install xlnk --dts xlnk.dts

SDSoC_ikwzm_44_180406.png

cd sd_card/
sudo ./dnp_of.elf im0.jpg im1.jpg

dnp_of.elf を実行するとエラーになってしまった。
SDSoC_ikwzm_45_180406.png

エラー内容を示す。

Failed to allocate memory

Failed to allocate memory

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.414190] Internal error: Oops: 17 [#1] PREEMPT SMP ARM

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.505378] Process dnp_of.elf (pid: 4117, stack limit = 0xe25b4218)

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.511714] Stack: (0xe25b5e00 to 0xe25b6000)

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.516061] 5e00: 00000000 c0113bc4 00000000 ee477600 000007e8 00000000 00000002 00000000

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.524220] 5e20: 001fa400 00000001 00000005 e32b007c 600f0013 00000000 00000014 ee7ed840

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.532378] 5e40: 83c00743 00000000 bebdf230 00000000 c0045808 bebdf230 e25b4000 00000000

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.540538] 5e60: 00000000 bf0376d0 00000000 e25b5ed0 00000000 00000001 e25b5ea4 00000000

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.548697] 5e80: e297adb8 83c00703 00000000 00000000 00000000 ffefe70c ef29a734 00000000

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.556856] 5ea0: efaac420 ee477300 d5480010 00000000 00000000 00000000 007e9000 00000000

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.565015] 5ec0: 00000000 00000000 00000002 00000000 00000000 b659a000 00032030 0000002c

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.573175] 5ee0: bebdf2b4 00000000 00000001 001fa400 00000000 0002f258 00032030 0000002c

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.581334] 5f00: 0016b790 bebdf230 ee6cc508 ee4f7780 c0045808 bebdf230 e25b4000 00000000

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.589492] 5f20: 00000000 c01f89fc bebdf230 c01f9288 00000000 00000000 ef29a700 00000000

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.597653] 5f40: ef085de0 ae43e000 e3324300 ef085de8 ef29a704 c01d0804 00000009 c02033ac

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.605811] 5f60: 00000009 0002f258 007e9000 c0045808 00000009 ee4f7781 ee4f7780 c0045808

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.613971] 5f80: bebdf230 e25b4000 00000000 c01f93cc 00000001 0002f258 007e9000 00000036

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.622130] 5fa0: c0107ac4 c01078e0 00000001 0002f258 00000009 c0045808 bebdf230 0002ff48

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.630288] 5fc0: 00000001 0002f258 007e9000 00000036 00000002 00000000 00000000 00000000

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.638448] 5fe0: 0002f2e4 bebdf22c 0001b66c b653f716 000f0030 00000009 04050607 00020103

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.686451] Code: eb44a1dc e15b0006 0a000011 e7990106 (e5903014)

^CApplication Terminated by User


”Failed to allocate memory”が 2 回出ているが malloc() はソース上で 3 回実行されている。1 回めは通っても 2 回め、3 回めは通らなかったのだろうか?

reVISION-Zybo-Z7-20 のバイラテラル・フィルタは実行できたが、Dense Non-Pyramidal Optical Flow は”Failed to allocate memory”で実行できなかった。
  1. 2018年04月07日 04:19 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

FPGAの部屋のまとめサイトの更新(2018年3月6日)

FPGAの部屋のまとめサイトを更新しました。
2018年3月5日までの記事のエントリを追加しました。今回、新しいカテゴリの追加はありません。
  1. 2018年03月06日 04:57 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

第19回分子科学研究所技術研究会に行ってきました

第19回分子科学研究所技術研究会で発表と討論をやってきました。
その際の発表資料を公開します。
FPGAでの非同期信号の扱い方とVivadoによるサポート(公開用)」です。
ご意見待っています。意味わかんない。。。とか言って叩かないでください。。。w

2018/02/10:修正 リファレンスを修正して再度公開しました。
  1. 2018年02月09日 19:29 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

2017年のFPGAの部屋のブログのまとめ(7月 ~ 12月)

”2017年のFPGAの部屋のブログのまとめ(1月 ~ 6月)”の続き。

7月
手書き数字認識用畳み込みニューラルネットワーク回路の製作3(畳み込みNN) 四角枠の中の手書き数字を認識する畳み込みニューラルネットワークを作成しよう。
手書き数字認識用畳み込みニューラルネットワーク回路の製作6(PYNQボードで動作確認)
・SDKのベアメタル・アプリケーションで時間を計測する方法(Zynq)
手書き数字認識用畳み込みニューラルネットワーク回路の製作7(ハードとソフトの比較) ハードウェアのMNISTの手書き数字を認識する時間とソフトウェアでMNISTの手書き数字を認識する時間を比較してみようと思う。
aws/aws-fpgaをやってみた1
手書き数字認識用畳み込みニューラルネットワーク回路の製作8(Linuxでの動作1) ハードウェアでのMNIST手書き数字認識とソフトウェアでのMNIST手書き数字認識の実行時間を比較した。今回は、それをLinuxのアプリケーションソフトを作成してやってみようと思う。まずは、カメラ画像の表示を目指す。
Bash on Windows 10にVivado WebPACK 2017.2をインストールした
ルンバ622を買いました
白線追従走行用畳み込みニューラルネットワークの製作1(概要) MNIST手書き数字認識用ニューラルネットワークが完成したので、今度は本命のミニ・ロボットカーを白線間を走らせるための白線追従走行用畳み込みニューラルネットワーク(白線追従走行用CNN)を製作しよう。
HLS ビデオライブラリの hls::LineBuffer のVivado HLS 2015.4 以前とその後での変更点1(メモリ・ライン・バッファー) Vivado HLS 2016.1 から hls::LineBuffer と hls::Window のクラス・メソッドが大きく変更になった。Vivado HLS 2015.4 までは、 hls::LineBuffer と hls::Window の配列の並びは、列はインデックス 0 からなのだが、行はインデックス「行の配列の最大数」になっていた。
Ubuntu 16.04 にOpenCV 3.3.0 rc をインストールした Ubuntu 16.04 にOpenCV 3.1.0 をインストールしようとしたのだが、make でエラーになってしまった。どうやらCUDA 8.0 が悪さしているようだというのがわかった。dandelion さんからOpenCV 3.2 だったら大丈夫と教えていただいたので、OpenCV 3.2 以降をインストールすることにした。
Ubuntu 16.04 上のVivado HLS 2017.2 でOpenCV を使用したプロジェクトでエラー発生 Ubuntu 16.04 上のVivado HLS 2017.2 でOpenCV を使用したプロジェクトで libjpeg.so.62 と libtiff.so.3 が無いと言われてコンパイルできなかったので、解決方法を書いておく。
Pmod Shield: Adapter Board for Uno R3 Standard to Pmod

8月
白線追従走行用畳み込みニューラルネットワークの製作2(画像縮小、切り出し) 
MNIST手書き数字のデータフォーマット
白線追従走行用畳み込みニューラルネットワークの製作3(トレーニング、ラベル・ファイルの作成) 本格的に56 x 10 ピクセルの白線の画像を切り出すとともに、MNISTデータセットと同じフォーマットでトレーニング・ファイルとラベル・ファイルを生成しよう。
白線追従走行用畳み込みニューラルネットワークの製作5(テストデータの作成)
MFT2017 に行って来ました
白線追従走行用畳み込みニューラルネットワークの製作7(学習2) テストデータの正解率が 71 % になってしまう。もう一度、やり直した方が良いかもしれない。
Vivado シミュレータのDPI-C その1 Vivado シミュレータでDPI (Direct Programming Interface)をやってみることにした。
Vivado シミュレータでDPI-C を使用してZynq VIPを使う1
ソニーのNeural Network Console をやってみた1 「Neural Network Console」という学習・評価だけでなく、ニューラルネットワークの設計までも可能なディープラーニング・ツールをソニーが無償提供したので、やってみることにした。
白線追従走行用畳み込みニューラルネットワークの製作8(再度トレーニング、ラベル・ファイルの作成) ”白線追従走行用畳み込みニューラルネットワークの製作7(学習2)”で、精度が 71 % だったので、もう一度、白線追従直進走行用の画像データをもう一度取得して、再度トレーニング・ファイルとラベル・ファイルを作成することにした。しかし、やはり、精度は 70 % 程度だった。
白線追従走行用畳み込みニューラルネットワークの製作10(画像を増やす) 精度が上がらなかったので、画像を増やしてトレーニングしてみようということになった。今回はimagemagic を使って画像を増やしてみよう。9,075 枚に増やすことができた。
白線追従走行用畳み込みニューラルネットワークの製作13(9075枚のトレーニング用画像データで学習) 9075 個のトレーニング用画像データを使用して、学習したところ、フィルタ数が 2 でも、93 % 程度の精度が確保できた。
白線追従走行用畳み込みニューラルネットワークの製作14(固定小数点用に量子化) 9075 個のトレーニング用画像データと4125 個のテスト用画像データを使用して学習を行った。その結果、CONV数が 2 の畳み込みニューラルネットワークで、93.1 % の精度を得ることができた。今回は、その畳み込みニューラルネットワークを固定小数点用に量子化し、Vivado HLS に使用する重みやバイアスのヘッダファイルを生成しよう。
白線追従走行用畳み込みニューラルネットワークの製作16(白線追従走行用の画像データをCの配列に出力)
白線追従走行用畳み込みニューラルネットワークの製作19(Cコードの合成、IP化) Cコードの合成を行って、レイテンシやリソース使用量を確認する。
・白線追従走行用畳み込みニューラルネットワークの製作20(CNN IPの戦略を考える) 直進のみだけど白線追従走行用畳み込みニューラルネットワークの推論用Vivado HLSのプロジェクトは完成した。ただしまだ畳み込みニューラルネットワークを固定小数点数で作って性能を確認しただけで、どのようにFPGA上の回路にするかの検討はまだしていない。今回は、どのようにFPGA上の回路にするかの検討を行っていこう。

9月
Vivado HLS で画像のサイズを縮小して白黒変換(resize_gray)
画像をリサイズするためにDMA Read IPをVivado HLSで製作した1(dmar4resize_gray)
AXI4 Stream版白線追従走行用畳み込みニューラルネットワークIPその1(C シミュレーション) ”白線追従走行用畳み込みニューラルネットワークの製作19(Cコードの合成、IP化)”
で作成した白線追従走行用畳み込みニューラルネットワークをAXI4 Streamで入力するように変更した。これは、”Vivado HLS で画像のサイズを縮小して白黒変換2(resize_gray)”のAXI4 Stream 入力を受けて、白線追従走行用畳み込みニューラルネットワークにそのAXI4 Stream データを入力して処理する。
CNNのVivado HLS実装のstraight_conv_nn2 の演算精度を変更する straight_conv_nn2 の精度が良かったのは画像が良かったからという結論が出たので、精度の悪そうな画像でもう一度、straight_conv_nn2 のC シミュレーションを行った。そうすると、ハードウェアの精度は56.7 % だった。これでは精度が悪すぎるので、演算の精度、つまりビット幅を見直すことにした。演算のビット幅を変えながら誤差を見ていこう。
dmar4resize_gray, resize_gray, straight_conv_nn2_axis2 をVivado HLS 2017.2 で IP化
白線追従走行用畳み込みニューラルネットワーク・システムの製作1 白線追従走行用畳み込みニューラルネットワークを搭載して、カメラ画像から進む方向(左旋回、直進、右旋回)を決定し、モーターを駆動して、ミニ・ロボットカーに白線間を走行させるシステムである。
白線追従走行用畳み込みニューラルネットワーク・システムの製作7(白線間を走行) ZYBO のUbuntu 14.04 上でアプリケーションソフトを作り、白線間を走行させた。白線間を走行できた。動画あり。
Xilinx reVISION、xfOpenCV のExampleをやってみた1(of2) Xilinx 社から機械学習やコンピュータ・ビジョン・ツールの reVision と、OpenCVをハードウェア化する xfOpenCV が出た。これらのExample をやってみることにした。
・「RTLを語る会(14) ~FPGAの現実~」で発表してきました 「RTLを語る会(14) ~FPGAの現実~」で「「ゼロから作るDeep Learning」の畳み込みニューラルネットワークのハードウェア化」という題で1時間発表してきました。
ZYBO Z7-20 が届きました
ZYBO Z7-20 のボードファイルをVivado 2017.2 にインストールする
ZYBO Z7-20 の u-boot.elf と devicetree.dtb を作る

10月
Zybo Z7-20でLinux を起動しようとしたが失敗 ”ZYBO Z7-20 の u-boot.elf と devicetree.dtb を作る”で作ったdevicetree.dtb と”ZYBO_Z7_0 のVivado 2017.2 プロジェクトでBOOT.bin を作成”で作ったBOOT.bin をZYBO Linux 用のMicro SD カードに入れてZybo Z7-20 で起動してみた。なお、LinuxカーネルはZYBO で使用してたものとした。結果は、TTYPS0 までは行くのだが、その後の文字が化け化けになってしまった。
Ultra-Zed-EGのデモをやってみた
Zybo Z7-20 上でUbuntu 14.04 が動作したがネットワークがつながらない
Zybo Z7-20 上でUbuntu 14.04 が動作し、ネットワークもつながった
ビットマップ・ディスプレイ・コントローラIPとカメラ・インタフェースIPのAXI4 Lite Slaveのバグをフィックス ”Zybo Z7-20上の白線間走行CNNシステムのプロジェクトが動作しないバグ”で、ビットマップ・ディスプレイ・コントローラIPとカメラ・インタフェースIPのAXI4 Lite Slave インターフェース回路にバグがあることが分かった。
Vivado 2017.3 をインストールした
ZYBO Z7-20上のUbuntu 14.04でカメラ画像を表示
Github で現在使用しているZYBO Z7-20用のBOOT.bin, devicetree.dtb, u-boot, uImage などを公開しました
ZYBO Z7-20上のUbuntu 14.04でカメラ画像にガボール・フィルタを動作させる
2017年度Zynq+Vivado HLS勉強会概要 全 8 回になってしまったので、まだ、1回分残っています。
ZYBO Z7-20上のUbuntu 14.04で白線間走行用畳み込みニューラルネットワークを動作させる
Vivado HLS 2015.4と2017.2の合成時の違い
Windows 10 fall creators update のWindows Subsystem for Linuxを試してみた

11月
ZYBOでのxfOpenCVライブラリの使用1
Vivado HLS 2017.3.1 における識別子の違いによる任意精度固定小数点データ型の動作の違い1
Vivado HLSで#define と プラグマ指示子の使用
intel HLS コンパイラを試してみる
intel HLS コンパイラを試してみる2(counterサンプルが動いた)
UltraZed-EG Starter Kit のチュートリアル1
intel HLS コンパイラのレポート
Windows 10 Fall Creators Update をかけるとVivado 2017.3 が起動しない
intel HLS コンパイラを試してみる11(mm_slave その1)
カーブ、直線用白線間走行用畳み込みニューラルネットワーク1(データ) ”白線追従走行用畳み込みニューラルネットワーク・システムの製作7(白線間を走行)”で、ミニ・ロボットカーが直線の白線を走行することができた。次はカーブを曲がれるようにしたい。そこで、曲がってい角度が 23 度のカーブと 48 度のカーブを用意して、曲がれるかどうかを試してみた。(注:カーブを曲がる学習はまだしていません。直線を走る学習のみです)
FPGA+SoC+Linux実践勉強会用のZYBO Z7用MicroSDカードの準備
PetaLinux 2017.3 をインストールする
UltraZed-EG Starter Kit でPetaLinux 2017.3 をブートする

12月
FPGA+SoC+Linux実践勉強会での課題をやってみた1(Vivado HLS編)
intel HLS の pointer_mm_master を試してみた1
Vivado HLS の合成でEstimated がTarget の制約を満たせなかったときの処置 Vivado HLS の合成でEstimated の値がTarget を満たせなかったときの処置を@hiyuh さんに教わったので書いておこう。
FPGA+SoC+Linux実践勉強会での課題をやってみた6(udmabuf、実機テスト)
カーブ、直線用白線間走行用畳み込みニューラルネットワーク5(トレーニング用データの生成)
カーブ、直線用白線間走行用畳み込みニューラルネットワーク11(Vivado HLS でCNN を実装)
ZYBOでUbuntu を起動したらネットワークがつながらない
カーブ、直線用白線間走行用畳み込みニューラルネットワーク13(AXI4 Stream版CNN IP 1) AXI4 Stream版白線追従走行用畳み込みニューラルネットワークIP と入れ替えるためにカーブと直線走行用のAXI4 Stream 版畳み込みニューラルネットワーク IP を作成しよう。
UltraZed-EG Starter Kit でDebian が起動した
カーブ、直線用白線間走行用畳み込みニューラルネットワーク18(ミニ・ロボットカーでの走行テスト) ミニ・ロボットカーがカーブを自動走行することができた。動画あり。
Pcam 5Cカメラが届きました

今年もいろいろな記事を書いたが、やはり「ゼロから作るDeep Learning」を読んで、Python コードを使わせてもらって、自分で、畳み込みニューラルネットワークを学習させて、ミニ・ロボットカーに実装して、白線間を自動走行したが嬉しかった。5月に「ゼロから作るDeep Learning」を読んで、6月からMNIST手書き数字認識をFPGA実装してから弾みついた気がする。

今年もたくさんの方に見て頂いたし、また、いろいろな方に助けられてブログ記事を書くことができた。本当にありがたい。また来年もよろしくお願いいたします。

それではよいお年をお迎えください。。。
  1. 2017年12月31日 04:56 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

2017年のFPGAの部屋のブログのまとめ(1月 ~ 6月)

2017年のFPGAの部屋のブログ記事をまとめてみよう。

1月
SDSoC のプラットフォームのお勉強6(ハードウェア・プラットフォームの完成) 2017年の最初のFPGA関連記事は、SDSoC の記事だった。SDSoC を勉強しようとして、いろいろとやってみていた。また再開したいな。reVISION とかもあるし。
SDx 2016.3 のプラグマによるハードウェアと性能の違い1 おなじみのSDx 用ラプラシアンフィルタのプロジェクトを使用して、SDx 2016.3 のデータに関するプラグマを入れて、ハードウェアがどう変更されたのか?性能がどうなったのかを検証してみよう。
Zybot をステレオカメラにする2(カメラ・マウントの作製) Zybot に取り付ける、カメラ拡張ボード用のマウントをFreeCAD で設計して、3D プリンタで作成した。
Vivado HLS のソースコードをSDx で試す1(memcpy() を使った第2段階のコード)
AXI4-Stream向きのコードで書いたラプラシアンフィルタをVivado HLSでテスト1 ”Vivado HLS のソースコードをSDx で試す4(AXI4-Stream向きのコード)”でAXI4-Stream向きのコードをAXI4 Master として実装して性能を評価したところ、とても高い性能だった。それは、DMAのWrite とRead が重なり合って実行しているとしか考えらない性能だった。となると、そのコードはVivado HLS で合成したときにDMAのWrite とRead が重なり合って実行されるのだろう。そのような状況には出会ったことがないので、さっそくVivado HLS でやってみた。
SDSoCのチュートリアルをやってみた1(システムのデバック) SDSoCのデバック方法やパフォーマンス測定のただし方法などを知らなかったので、SDSoCのチュートリアルをやってみることにした。
Zybot をステレオカメラにする3(Zybot 改造中)
Xilinx/PYNQのプロジェクトを生成した1 ikwzm さんの”PYNQ-Z1 の ビットストリームを再ビルドしたときのタイミング違反を無くす”を見ながら、Xilinx/PYNQのプロジェクトを生成してみた。
SDSoC 勉強会 SDSoC 勉強会に行ったけ。。。
FPGAマガジン No.16にVivado HLSのAXI4 Masterアクセス編を書きました

1月の記事はどれも長かったな。。。良く書けたもんだ。。。

2月
FASTXコーナー検出による物体の形状検出1(Vivado 2016.4 プロジェクト) 以前、”FASTX コーナー検出の改良3(threshold をソフトウェアで変更可能にする)”で、Vivado HLS のOpenCV 機能の一部であるFASTX コーナー検出を使用して、CMOS カメラで撮影した画像のコーナー検出を行った。今回は、FASTX コーナー検出のプロジェクトを Vivado 2016.4 に変換して動作を確かめた。
守谷ハーフマラソンの5kmの部に出場しました 結果は26分31秒でした。
Zybotの障害物検知と回避1(超音波距離センサの性能) Zybotの障害物検知と回避で使用するために、超音波距離センサの指向性を計ってみた。Zybot の改造を行っている。
PYNQボードでカメラ画像をリアルタイムにFASTX コーナー検出1 このところ実装しているVivado HLS のFASTX コーナー検出IP をPYNQ ボードにも実装してカメラ画像からリアルタイムにFASTX コーナー検出を行った。
バイキュービック法のFPGAへの適用 バイキュービック(BiCubic)法をFPGA に適用できるように固定小数点に直して演算する方法。
Vivado HLS 2016.4 における assert() 文の効果 Vivado HLS 2016.4 で変域を指定することができる assert() 文の効果を確かめてみた。
Zybot による障害物回避 Zybot による障害物回避が曲がりなりにもできた。

3月
PYNQ祭りに参加してきました 「PYNQでカメラ画像をリアルタイムFASTX コーナー検出」という題で発表してきました。スライドはSlideShareにアップしました。
XilinxのBNN-PYNQをやってみる1(インストール編) XilinxのBNN-PYNQをやって見たいということで、やってみました。BNN-PYNQはBinarized Neural Network (BNN) on PYNQ だそうです。
・Ubuntu16.04にVivado 2016.4をインストール Ubuntu16.04にVivado 2016.4をインストールする覚書を書いておこうと思う。
「Vivado HLS で DMA Read IP を作る2(絶対アドレス指定版)」を使って合成後の機能シミュレーション 前回は絶対アドレス指定のDMA Read IPをVivado HLS 2016.4 で作成した。今回は、そのDMA Read IPをVivado で論理シミュレーションと合成後の機能シミュレーションを行った。
Vivado 2016.4 のSDKでデバイスツリーのソース(DTS)を生成する Windows 10 上で、Vivado 2016.4 のSDKでデバイスツリーのソース(DTS)を生成してみよう。
・”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対応)”を試してみようと思う。

4月
PYNQのLED表示プロジェクト1(ブロックデザインの作成) ikwzm さんのFPGA Manager と デバイスツリー・オーバーレイを確かめてみるために、簡単な例としてPYNQボードのLED表示プロジェクトを作ることにした。
”FPGA+SoC+Linux+Device Tree Overlay+FPGA Manager(PYNQ-Z1対応)”を試してみる8(入れ替え1) 前回は、デバイスツリー・オーバーレイとFPGA Manager を使いやすいようにShell スクリプトを作成した。今回は、2つのFPGA回路とデバイスツリーをLinux 起動しながら入れ替えてみようと思う。
Raspberry Pi Zero にLinux をインストール ”Raspberry Pi Zero インストール(2016/07/02)”のほぼその通りにRaspberry Pi Zero のSDカードにLinux をインストールした。
技術書典2に行ってきました
ikwzm さんの構築したPYNQ ボード用DebianでのPS出力クロックfclkの設定方法
かすみがうらマラソン2017に出場しました
Thinkpad 13が届きました ”「PYNQ祭り」延長戦 : FPGAディープラーニング実践懇親会”でがっつり実装するために購入しました。
”FPGA+SoC+Linux+Device Tree Overlay+FPGA Manager(PYNQ-Z1対応)”を使用してカメラの画像を表示 
Vivado 2017.1 の新機能1(概要) Vivado 2017.1 がリリースされて、新機能が多かったので、その解説をした。
Vivado 2017.1 の新機能2(AXI Verification IPの概要)
FPGAマガジンNo.17にVivado HLS の記事を書きました(ソースコードをGitHubで公開)
AXI4マスタ版ラプラシアン・フィルタ最速の条件 この記事はFPGAマガジンNo.17 に載るはずだったけど、ページが足りなくて載せることができなかったコラムです。

5月
Vivado 2017.1 の新機能8(Zynq-7000 VIP)
Vivado HLSで stdint.h を使用する taksei さんに教えて頂いたように、stdint.h を使用して、uintX_t や intX_t を使用することにした。
「ゼロから作る Deep Learning」をやってみる1(Numpyと matplotlib の使い方) オライリーの「ゼロから作る Deep Learning」をやってみたのは5月からだったんだ、これ以降はこのCNN の話題がブログの中心となった。7か月位で、ミニ・ロボットカーを走らせるまでになったのはとっても良かった。
・DnnWeaverをやってみる1 結局、うまく行かなかった。
BNN-PYNQ のトレーニングを試してみる1
Vivado HLS の符号付 C++の任意精度固定小数点型について
ニューラルネットワークの推論のハードウェア化1(概要編) 「ゼロから作る Deep Learning」を使用して、ニューラルネットワークをFPGA で実装しようという試みが始まった。まずはMNISTの手書き数字認識をFPGA に実装してみることにした。

6月
Vivado HLS の任意精度固定小数点型を使用した内積の計算 配列の内積をVivado HLS の任意精度固定小数点型を使用して計算してみよう。ニューラルネットワークを実装するためのテストだった。
「ゼロから作るDeep Learning」の2層ニューラルネットワークのハードウェア化1 「ゼロから作るDeep Learning」の5章 誤差逆伝播法の2層のニューラルネットワークをハードウェア化してFPGA に実装してみようと思う。浮動小数点数を量子化して固定小数点化する方法を書いた。
マウスコンピューターのパソコンにHDDとGPUを追加してUbuntuをインストールした
「ゼロから作るDeep Learning」の2層ニューラルネットワークのハードウェア化3 Vivado HLSに持っていくための重みとバイアスのC の配列を生成するPython コードを紹介した。
BNN-PYNQ のトレーニングを試してみる3 GPUを使用してCIFAR-10をトレーニングしてみた。
「ゼロから作るDeep Learning」の2層ニューラルネットワークのハードウェア化4(Vivado HLS) 前回作成した重みやバイアス、MNISTデータセットの一部のヘッダファイルを使用して、Vivado HLS でMNISTの手書き数字を判定するハードウェアを作る。ただし、Softmax は実装が難しいし、最大値を取れば数字は推定できるので、実装していない。
「ゼロから作るDeep Learning」の2層ニューラルネットワークのハードウェア化6(指示子を入れる) IP として使用できるようにVivado HLS に指示子を入れた。
「ゼロから作るDeep Learning」の畳み込みニューラルネットワークのハードウェア化1 「ゼロから作るDeep Learning」の7章 畳み込みニューラルネットワークをハードウェア化してFPGA に実装してみることにした。
「ゼロから作るDeep Learning」の畳み込みニューラルネットワークのハードウェア化4(Vivado HLS1) 畳み込みニューラルネットワークのC ソースコードを作成してVivado HLSでハードウェア化した。
MNISTの畳み込みニューラルネットワークで自分の手書き数字を認識する1 自分で手描きの数字を書いてVivado HLS のC シミュレーションによって、認識させてみた。
MNISTの畳み込みニューラルネットワークで自分の手書き数字を認識する3(カメラ画像) 手書き数字をカメラで撮影した画像を切り出して認識させたところ、精度はいまいちだが、一応、カメラで撮影した手書き数字を認識できているようだ。本格的にPYNQボードに組み込んで、カメラで撮影した画像から手書き数字を認識させてみよう。
手書き数字認識用畳み込みニューラルネットワーク回路の製作1(概要) 手書き数字認識用畳み込みニューラルネットワークができたので、カメラで撮影した画像の中の手書き数字を認識してみようと思う。使用するボードはPYNQボードとする。以前に、PYNQボードでFASTX コーナー検出IP を使用したプロジェクトがあるので、それをベースとする。
手書き数字認識用畳み込みニューラルネットワーク回路の製作2(手書き数字認識用四角枠表示回路) 手書き数字認識用畳み込みニューラルネットワーク回路のパーツとなる手書き数字認識用四角枠表示回路をVivado HLS を使用して作ってみよう。

6月は怒涛の進行だった。今読むと凄かったと思う。
  1. 2017年12月30日 04:37 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

FPGAの部屋のまとめサイトの更新(2017年11月20日)

FPGAの部屋のまとめサイトを更新しました。
reVISION,xfOpenCVintel HLSUltraZed EGZYBO Z7 を追加して、その他のカテゴリーの記事を更新しました。
  1. 2017年11月20日 05:23 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0
»