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