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)
最初のページへ
目次へ戻る
|