●出力チャネルは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マクロを読んでください。 |
最初のページへ
目次へ戻る |