●フィルタが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層目は違うアプローチが必要になります。 |
最初のページへ
目次へ戻る |