LoginSignup
37
42

More than 5 years have passed since last update.

ニューラルネットワークをFPGA実機で動かした

Last updated at Posted at 2016-09-13

概要

以前,「FPGA上で動くニューラルネットワーク・ジェネレータを作った」で公開したニューラルネットワーク・ジェネレータで出力したソースコードをFPGA実機Atlas-SoC(DE0-Nano-SoC)で動かしてみました.

リポジトリはここ
https://github.com/kotauchisunsun/DE0_NN

ライセンス

Affero GPL v3

機能

image

DE0-Nano-Socのスイッチを入力,LEDを出力としてニューラルネットワークの挙動をします.
スイッチをonにすると1が代入され,offにすると0が代入されるようになっています.

SW[0]を入力1
SW[1]を入力2
SW[2]を左上のニューラルネットワークの出力と右上のニューラルネットワークの重み係数
SW[3]を左下のニューラルネットワークの出力と右上のニューラルネットワークの重み係数

に割り当てています.また,

右上のニューラルネットワークが発火すると,LED[0]が点灯
右下のニューラルネットワークが発火すると,LED[1]が点灯

という風な機能になっています.

準備

ソースコードの生成

この作業は上記リポジトリからコピーする方は不要です.

「FPGA上で動くニューラルネットワーク・ジェネレータを作った」で用いたニューラルネットワーク・ジェネレータを使います.

をcloneしてきます.

$ cd NN_FPGA
$ python script/main.py 16 2 2 2
> NN_NL_016_0002_0002_NL_016_0002_0002
> saved to generate.v
> None

これでgenerate.vというファイルが生成され,メインのニューラルネットのモジュールのNN_NL_016_0002_0002_NL_016_0002_0002というモジュールが生成されました.

ひな形のダウンロード

Atlas-SoCとDE0-Nano-SoCはハード的には同じで,ファームウェアが違うだけのものです.
そのため,SDカードでファームウェアを書き換えることで,DE0-Nano-SoCとAtlas-Socを変更することができます.
今回は,以下のリンクのDE0-Nano-SoCのSystemCDというデータを用います.

デモプロジェクトのコピー

先ほどダウンロードしたファイルを解凍し,

DE0-Nano_SoC_v.1.0.9_SystemCD\Demonstrations\SoC_FPGA\my_first_hps-fpga_base

my_first_hps-fpga_baseをコピーして用います.

ソースコードの編集

先ほどのリポジトリ https://github.com/kotauchisunsun/DE0_NN or 生成したgenerate.v をプロジェクトに追加します.

追加の仕方は詳しくは解説しませんが,メニューバーの[Project] -> [Add Current File to Project]から追加できます.

そののち,プロジェクト内にあるghrd.vを編集します.
これは少し特殊で,ghrd.vの271行目,endmoduleの前にリポジトリのdiff_ghrd.vの内容をコピペしてください.

(回りくどい書き方をしているのはghrd.v自体のライセンスがよくわからないので,リポジトリにあげると問題が発生する可能性があるためです.)

実機動作

あとはコンパイルして,ProgrammerでDE0-Nano-SoCに焼いてください.

IMAG0815.jpg
実際にDE0-Nano-SoCで動作している様子

テストケース

実際に動かしてみないとわからないと思うので,テストケースを用意しました.
これらを試してみると,実際にニューラルネットが稼働している様子が確認できます.

SW[0] SW[1] SW[2] SW[3] LED[0] LED[1]
off off off off off off
on off off off off on
off on off off off on
on on off off off on
on off off on on on
off off off on off off
off off on on off off

(備考) SW[2]=on SW[3]=onのとき,LED[0],LED[1]はSW[0]とSW[1]のOR出力になっていることが分かります.

まとめ

「FPGA上で動くニューラルネットワーク・ジェネレータを作った」で作ったニューラルネットワーク・ジェネレータ(もしくはそれから生成されたコード)を用いて,DE0-Nano-SoC(Atlas-SoC)で動くニューラルネットワークを作成し,実際動作することが確認できました.

37
42
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
42