●フィルタが16個あるので演算結果も16個ある

 フィルタは
全部で16個ありますが、前ページで確認したのは最初の1個だけです。

 ModelSimメインウインドウのの
simタブを見ると(図6-67)、dotpro_relu_w1_00〜15という16個のブロックがあります。それぞれ積和演算、バイアス加算、Reluの回路を持っています。

 またそれらの結果を格納するRAMも16個あります(RAM_00〜15)。


  図6-67 フィルタは16個あることを忘れずに


 図6-68は21us付近、上からRAM_00, 01, 02, ... 14, 15に書き込まれるデータです。tb_conv_hw/conv_hw_1の信号X_WR_DATA00〜15を見てみましょう。


  図6-68 演算結果も16個ある(21us付近)


 図6-69はEXCELのReluのシートです。左からRAM_00, 01, 02, ... 14, 15に対応します。論理シミュレーションとピタリ一致していることが分かります。


  図6-69 EXCELの方も演算結果は16個


●画像16枚分の演算結果がピタリ一致するのを確認して終わり

 フィルタが16個あることから演算ブロックは16個必要になり、演算結果は画像16枚分になります。VHDL化してもそれらすべてがEXCELと一致することを確認しましょう(当然Pythonとも一致する)。

 これで畳み込み1層目のVHDL化は終了です。1層目では
乗算器を16個を並列に使用しました。MNIST画像1枚あたり約7kサイクル(約70us)で演算が終了します。


●2層目は乗算器削減のテクニックが必要になりそう

 それでは2層目はどうなるでしょうか?実は1層目と同じサイクル数(約7k)を求めると、乗算器が
16×16=256個も必要になります。例えばこのFPGAは乗算器が80個しかないので現実的ではありません。したがって2層目は違うアプローチが必要になります。


最初のページへ


目次へ戻る