7‐05 2層目の重み係数ROMのアクセス(HDL)

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

 W2Addr(重み係数ROMのアドレス)は、図7‐41のように生成します。このタイムチャートの下の方にあるように、9進カウンタにオフセットを加算します。


図7‐41 アドレスにオフセットを足して切り替え(conv_layer2.vhd)

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

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

(*2)ROM_W2_00.vhdが入力Ch0〜3、ROM_W2_01.vhdが入力Ch4〜7、ROM_W2_02.vhdが入力Ch8〜11、ROM_W2_03.vhdが入力Ch12〜15にかかる係数

図7‐42 4つの重み係数ROMを同時に読み出す(conv_layer2.vhd)

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

 ROMファイルの出力データ(W2Data_00〜03)はそれぞれ
96ビットあり、図7‐43のようにそれぞれ3ビットづつ32個に分離されます。これらは出力32chを計算するための係数になります。

図7‐43 係数は4×32=128に分けられ、別々の乗算器へ行く(conv_layer2.vhd)


●係数をdotpro_xx_yyに入力

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

図7‐44
dotpro_xx_yy。 xxは00〜31、yyは00〜03 (conv_layer2.vhd)

 各出力Ch用に4個の積和演算器があるので計4×32=128個です(図7‐45)。

図7‐45
積和結果が128個出てくる(conv_layer2.vhd)

 各出力ch用の積和結果mac_xx_00, 01, 02, 03が足し込まれ、MacShift_xxとなります(xxは00〜31)。この後、ReLU回路やプーリング回路(次ページ)などを経て3層目に出力されます。

図7‐46 4つ足し込んで各出力1chが得られる(conv_layer2.vhd)

次のページへ

目次へ戻る