9-04 Affine1の論理シミュレーション

 このアーカイブはAffine1層目のModelSim(使い方はここ)プロジェクトです。

●演算結果の出所は7つある

 図9-20はtb_conv_hw/conv_hw_1のZ7_WR_DATA_00〜06です。Z7_WR_DATA_00からは出力が0, 0, 127, 0, 127, 0, 75, 0と、
順に8個出てきます。Z7_WR_DATA_01〜05までも同様に8個、最後のZ7_WR_DATA_06だけは出力が2個で、合計50個出てきます。


  図9-20 ModelSimのWaveformでZ7_WR_DATA__00〜06の波形を見る


●affine_layer12.xlsmの演算結果と比較

 EXCELで計算した結果と比較しましょう。9-21のDrop1行の最初の8個がZ7_WR_DATA_00、次の8個がZ7_WR_DATA_01と一致しています。Z7_WR_DATA_06まで計
50個が合っているか確認しましょう。


  図9-21 affine_layer12.xlsmのDrop1行

●Affine1層目の結果は7個のRAMの中に書いてある

 tb_conv_hw/conv_hw_1/RAM_Z7_00の下にあるRAMDATAを開いてみると図9-22のように8個のデータが書かれています。最後のRAM_Z7_06だけは2個、合計
50個になります。



  図9-22 RAM_Z7_0XのRAMデータ


●並列化の効果を見る

 Affine1層目の演算は図9-23のように82us程度で終わります。重み行列は1024×50あるのですが、
7並列で演算するのでサイクル数は1024×8=8kサイクル+αになります(クロック周期は10ns)。


  図9-23 Affine1層目にかかるサイクル数は82us


●後はAffine2層目を残すのみ!

 Affine1層目で計算された50個の値はAffine2層目の入力になります。Affine2層目の出力を判定回路(SoftMax関数に相当)で判定したものが「畳み込みニューラルネットワーク」の結果になります。


目次へ戻る