8‐04 3層目の重み係数ROMアクセス(HDL)
●重み係数ROMの読み出しアドレス
W3Addr(3層目重み係数ROMのアドレス)はこのタイムチャートのcount9の行、W0...8、W9...17、W18...26、W27...35、W36...44、W45...53のように9進カウンタにオフセットを加算して生成します(図8‐35)。
3層目はこのように1個の積和演算器で入力16chが処理されます。したがってin3ChSelが0〜15で係数を16種類選択します。 |
図8‐35 アドレスにオフセットを足して切り替え(conv_layer3.vhd)
●W3Data_00〜03に係数が出てくる
3層目は重み係数ROMのファイルが2つあります。これらは入力32chにかかる係数を2つに分けたものです(*2)。アドレスW3Addrは共通になります(図8‐36)。
(*2)ROM_W3_00.vhdが入力Ch0〜15、ROM_W3_01.vhdが入力Ch16〜31にかかる係数 |
図8‐36 2つの重み係数ROMを同時に読み出す(conv_layer3.vhd)
●3層目の係数は4種類なので2ビットにエンコードされている
ROMファイルの出力データ(W3Data_00〜01)はそれぞれ128ビットあり、図8-37のようにそれぞれ2ビットづつ64個に分離されます。これらは出力64chを計算するための係数になります。 |
図8‐37 係数は2×64=128に分けられ、別々の乗算器へ行く(conv_layer3.vhd)
●係数をdotpro_xx_yyに入力
3層目はこのように2×64=128個の積和演算器で並列処理されます。図8‐37で128個に分けられた係数は図8-38のように別々の積和演算器に入力されます。 |
図8‐38 dotpro_xx_yy。 xxは00〜63、yyは00〜01 (conv_layer3.vhd)
各出力Ch用に2個の積和演算器があるので計2×64=128個です(図8-39)。 |
図8‐39 積和結果が128個出てくる(conv_layer3.vhd)
各出力ch用の積和結果mac_xx_00, 01が足し込まれ、MacShift_xxとなります(xxは00〜63)。この後、ReLU回路などを経て4層目に出力されます。 |
図8‐30 2つ足し込んで各出力1chが得られる(conv_layer3.vhd)
最初のページへ
目次へ戻る
|