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)

最初のページへ

目次へ戻る