FC2カウンター FPGAの部屋 2017年06月10日
FC2ブログ

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

FPGAの部屋

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

「ゼロから作るDeep Learning」の2層ニューラルネットワークのハードウェア化7(指示子を入れる2)

”「ゼロから作るDeep Learning」の2層ニューラルネットワークのハードウェア化6(指示子を入れる)”の続き。

前回は、指示子を入れて、入力ポートと出力ポートを1個ずつバラバラにしてみた。今回は、実際に使えるように指示子を入れてみよう。
インターフェースを決定しよう。入力は、AXI4 Master かAXI4-Stream だろう?AXI4 Master をやってみたが、入力ポートのビット幅が8ビットなので、32ビット幅のAXI4 バスに4個の入力データが入力されてきた。やはり、32ビット幅で1ピクセルデータとしたいということもあり、AXI4-Stream で行くことにした。
出力ポートは、最大値をハードウェアで判定して、答えの数字をバイナリで出力しても良いのだが、10個の値をAXI4-Lite でARM プロセッサがRead して、最大値を判定することにしようと思う。そうすれば、ソフトウェアでSoftmax を取ることもできる。

それでは、buf[] へのコピーを復活する。そして、指示子を入れた状態のソースコードを示す。
nn_fpga_ch5_42_170610.png

C コードの合成を行った。
nn_fpga_ch5_43_170610.png

前回よりも、BRAM_18K 、FF、LUT は増えている。これは、AXI バスを実装しているので、増えてしまうのは仕方がない。レイテンシは変化が無かった。

mnist_nn.v のポート宣言部分を示す。in_V_TDATA は 8 ビット幅になっている。その下には、AXI4-Lite のSlave のポートが宣言されている。
nn_fpga_ch5_44_170610.png

AXI4-Lite のレジスタ設定を示す。out_V のレジスタマップが見たかった。
これによると、0x20 からbit 12 ~ bit 0 にout_V[2n] 、bit 28 ~ bit[16] に out_V[2n + 1] がマップされている。
つまりレジスタ数は 10 出力 / 2 = 5 個になった。つまり、0x20, 0x24, 0x28, 0x2c, 0x30 が使われているようだ。
nn_fpga_ch5_45_170610.png

C/RTL協調シミュレーションを行った。
nn_fpga_ch5_46_170610.png

C/RTL協調シミュレーションの波形を示す。
まずは全体波形から。
nn_fpga_ch5_47_170610.png

入力部分を拡大してみた。
nn_fpga_ch5_48_170610.png

最初のデータの結果の出力部分を示す。
nn_fpga_ch5_49_170610.png

0x24 番地の上の 16 ビットが 0xe15 で一番大きい。 n = 1 なので、out_V[2+1] が最大だ。つまり 3 ということで答えと合っている。
  1. 2017年06月10日 07:14 |
  2. DNN
  3. | トラックバック:0
  4. | コメント:0