●出力チャネルは16個あるのでRAMも16個ある

 畳み込み2層目の出力チャネルは
全部で16個(16画像ぶん)ありますが、前ページで確認したのは最初の1個だけです。

 ModelSimメインウインドウのの
simタブを見ると(図7-33)、2層目の結果を格納するRAMが16個あります(RAM_Z2_00〜15)。


  図7-33 RAM_Z2_00〜15がある


 図7-34は89us付近、上からRAM_Z2_00, 01, 02, ... 14, 15に書き込まれるデータです。tb_conv_hw/conv_hw_1/conv_layer2_instの信号X_WR_DATA_00〜15を見てみましょう。

  図7-34 RAM_Z2_00〜15に書き込むようす


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

  図7-35 シートReluと一致している


●2層目も1層目と同じサイクル数で終わりたい

 1層目は乗算器16個を並列に使用して約7kサイクル(70us)で終了しました。2層目も同じサイクル数で終えるには乗算器が
256個も必要になります。

  図7-36 W1BusyもW2Busyも約70us

●シフト乗算器なら256個あってもFPGAに入りそう

 そこで本章では係数の数を4種類(+64, +16, -16, -64)に制限し、ビットシフトで乗算器を構成しました。それにより1層目と同じ時間(MNIST画像1枚あたり
約70us, 図7-36参照)で演算を終えることが出来ました。


●VHDL化しても正解率は98%あるはず

 係数が4種類でも正解率が
98%あることをPythonで確認しました。VHDLとEXCELがピタリ一致しているので正解率は同じになるはずです。


●係数のファイルは256個もあるので自動生成させる

 VHDLファイルのうち、ROM_W2_XX_YY.vhd(係数ROM)など数の多いものはEXCEL+VBAで生成しました。説明は省略しますのでこのファイルのVBAマクロを読んでください。

最初のページへ


目次へ戻る