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

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

FPGAの部屋

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

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

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

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

Vivado HLSで関数内のBRAMを関数外から制御する1

この前、Vivado HLS 勉強会で一緒だった学生さんからVivado HLSの関数内で宣言したBRAM を外から読み書きしたいのだけど、どう書いたら良いか?という質問があったので、サンプルコードを書いてみた。

bram_test1.cpp を示す。

// bram_test1.cpp
// 2018/02/06 by marsee
//

int bram_test(int &index, int &wr, int &data){
#pragma HLS INTERFACE s_axilite port=data
#pragma HLS INTERFACE s_axilite port=wr
#pragma HLS INTERFACE s_axilite port=index
#pragma HLS INTERFACE s_axilite port=return
    int array[1024];

    if(wr == 0){ // Read
        data = array[index];
    }else// Write
        array[index] = data;
    }

    return(0);
}


テストベンチの bram_test1_tb.cpp を示す。Read してWrite してRead というだけの単純なテストベンチだ。

// bram_test1_tb.cpp
// 2018/02/06 by marsee
//

#include <stdio.h>

int bram_test(int &index, int &wr, int &data);

int main(){
    int index, wr, data;

    wr = 0; index = 0;
    bram_test(index, wr, data);
    printf("data = %x\n", data);

    wr = 1; index = 0; data = 0x1;
    bram_test(index, wr, data);

    wr = 0; index = 0;
    bram_test(index, wr, data);
    printf("data = %x\n", data);

    wr = 0; index = 1;
    bram_test(index, wr, data);
    printf("data = %x\n", data);

    wr = 1; index = 1; data = 0x2;
    bram_test(index, wr, data);

    wr = 0; index = 1;
    bram_test(index, wr, data);
    printf("data = %x\n", data);

    return(0);
}


Vivado HLS 2017.4 で bram_test1 というプロジェクトを作成した。ターゲットはZYBO Z7-20 だ。
bram_test_1_180207.png

C シミュレーションを行った。配列のイニシャライズはされていないが、書き込んだ後は同じ値が読めている。
bram_test_2_180207.png

C コードの合成を行った。結果を示す。
bram_test_3_180207.png

BRAM_18K の使用量は 0 個だった。BRAM が実装されていない。
やはり、これは、C 言語では、関数内の宣言したローカル変数の配列はスタック領域にマップされて、関数から戻るときはクリアされる仕様が問題なんじゃないかな?ということで、static を配列の宣言に追加することにした。こうすれば、関数を抜けても配列は保持される。
bram_test_4_180207.png

// bram_test1.cpp
// 2018/02/06 by marsee
//

int bram_test(int &index, int &wr, int &data){
#pragma HLS INTERFACE s_axilite port=data
#pragma HLS INTERFACE s_axilite port=wr
#pragma HLS INTERFACE s_axilite port=index
#pragma HLS INTERFACE s_axilite port=return
    static int array[1024];

    if(wr == 0){ // Read
        data = array[index];
    }else// Write
        array[index] = data;
    }

    return(0);
}


これで、C シミュレーションを行った。結果を示す。
bram_test_5_180207.png

今度は配列がイニシャライズされていた。Read、Write も問題ない。

C コードの合成を行った。結果を示す。
bram_test_6_180207.png

BRAM_18K が 2 個実装されている。良さそうだ。

C/RTL 協調シミュレーションを行うと、終わらなかった。
なので、テストベンチをRead、Write 1 個のみにして、C/RTL 協調シミュレーションを行った。
bram_test_7_180207.png

でもやはり、終わらない。
bram_test_8_180207.png

途中で止めて波形を見てみよう。C/RTL 協調シミュレーションの波形を拡大してみてみよう。まずは、WVALID などのWrite の信号が表示されていない。これは、途中でC/RTL 協調シミュレーションを止めてしまったからなのか?
bram_test_14_180207.png

それじゃ、AXI4 Lite Slave インターフェースの予定だが、デフォルトでやってみよう。AXI4 Lite のインターフェースの指示子を取ってしまった。
bram_test_9_180207.png

これで、C コードの合成を行った。結果を示す。
bram_test_10_180207.png

FF、LUT は使用量が少なくなったが、BRAM_18K は 2 個使用されていて問題ないようだ。

C/RTL 協調シミュレーションを行った。結果を示す。
bram_test_11_180207.png

正常終了している。やはり、AXI4 Lite インターフェースの時だけおかしいのかな?

C/RTL 協調シミュレーションの波形を示す。
bram_test_12_180207.png

正常にアクセスできているようだ。

このまま、Export RTL を行った。結果を示す。
なお、Vivado synthesis, place and route にチェックを入れてある。
bram_test_13_180207.png

BRAM も 2 個使われていて、問題なさそうだ。
  1. 2018年02月07日 05:06 |
  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

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

FPGAの部屋のまとめサイトを更新しました。
DNNAWS-FPGA を追加して、その他のカテゴリーの記事を更新しました。
なお、以前あったDeep Learning はDNN とマージしました。
  1. 2017年07月14日 03:58 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

技術書典2に行ってきました

昨日、技術書展2 に行ってきました。

秋葉原のアキバ・スクエアでやってました。
tech_book_1_170410.jpg

開場する11時前に行ったのですが、すごい人で、雨の中並んでいました。
tech_book_2_170410.jpg

1時間くらい並んでやっと会場に入れました。いろいろな自作の技術書がたくさんありました。やはりソフトウェアの本が多かったですね。FPGAの本もありました。Lattice のFPGAの基板も売っていて、本も売っている方もいました。

私が買ったのは、ひでみさんのFPGA本、AGPF WORKS (とっても内容があって1,000円では安かったです)、買いたくても買えなかったFPGA技術SPECIAL、「TesorFlow はじめました」とこれはオライリーの本の「Caffe をはじめよう」です。
tech_book_3_170410.jpg

雨の中並ぶのは大変でしたが、とっても楽しかったです。また技術書典3があったら行きたいですね。
そうそう、傘を畳むときに水しぶきをかけてしまった並んでいた時の隣の方、すみませんでした。
あと、オライリーの売り場で「本当にオライリーなんだ」と言ってしまって、ツィートされていました。疑って申し訳ない。でも、薄くて背表紙に何も書いてなかったので、もしかして、お礼―リーなのかな?と思っちゃったんですよ。。。
  1. 2017年04月10日 05:27 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0
»