9‐04 4層目の重み係数ROMアクセス(HDL)

●重み係数ROMの読み出しアドレス

 
W4Addr(4層目重み係数ROMのアドレス)はこのタイムチャートのcount9の行、W0...8、W9...17、W18...26、W27...35、W36...44、W45...53のように9進カウンタにオフセットを加算して生成します(図9‐35)。

 4層目はこのように1個の積和演算器で入力16chが処理されます。したがってin3ChSelが0〜15で係数を16種類選択します。

図9-35 アドレスにオフセットを足して切り替え(conv_layer4.vhd)

●W4Data_00〜03に係数が出てくる

 4層目は重み係数ROMのファイルが2つあります。これらは入力128chにかかる係数を4つに分けたものです(*2)。アドレスW4Addrは共通になります(図9‐36)。

(*2)ROM_W4_00.vhdが入力Ch0〜15、ROM_W4_01.vhdが入力Ch16〜31、ROM_W4_02.vhdが入力Ch32〜47、ROM_W4_03.vhdが入力Ch48〜63にかかる係数

図9‐36 4つの重み係数ROMを同時に読み出す(conv_layer4.vhd)

●4層目の係数は4種類なので2ビットにエンコードされている

 ROMファイルの出力データ(W4Data_00〜03)はそれぞれ256ビットあり、図9-37のようにそれぞれ2ビットづつ128個に分離されます。これらは出力
128chを計算するための係数になります。

図9‐37 係数は4×128=512に分けられ、別々の乗算器へ行く(conv_layer4.vhd)

●係数をdotpro_xxx_yyに入力

 4層目はこのように4×128=
512個の積和演算器で並列処理されます。図9‐37で512個に分けられた係数は図9‐38のように別々の積和演算器に入力されます。

図9‐38 dotpro_xxx_yy。 xxxは000〜127、yyは00〜03 (conv_layer4.vhd)

各出力Ch用に4個の積和演算器があるので計4×128=512個です(図9-39)。

図9‐39 積和結果が512個出てくる(conv_layer4.vhd)

各出力ch用の積和結果mac_xxx_00〜03が足し込まれ、MacShift_xxxとなります(xxxは000〜127)。この後、ReLU回路などを経て5層目に出力されます。

図9‐40 4つ足し込んで各出力1chが得られる(conv_layer4.vhd)

最初のページへ

目次へ戻る