6‐06 1層目の重み係数ROMアクセス(HDL)
●係数ROMアドレスにオフセットを与える
また
この
タイムチャートの下の方、
W1Addr
(係数ROMの読出しアドレス)のHDLを図6‐45に示します。
CO9はcount9と同じ信号、CO9_p0はそれに+0、CO9_p9は+9、CO9_p18は+18と
オフセット
を与えます。
入力はR/G/Bの3chですが、係数ROMの並びが
B/G/R
になっている関係で、in1ChSelが"00"のときにCO9_p18を読み出すようになっています。in1ChSelが"01"のときにCO9_p9、"10"のときにCO9_p0を読み出します。
なお、in1ChSelが"11"のときは読み出した係数(または画素データ)を
0でマスク
します(ダミーのChなので、積和に影響を及ぼさないようにする)。
図6-45 重み係数読出しアドレスのHDL(conv_layer1.vhd)
●出力ch毎に係数を分ける
W1Addrには上記のようにオフセットが与えられ、in1ChSelの値によって切り替えられます。それはROM_W1のアドレスとなり(図6‐46)、
W1Data
が読みだされます。
1層目の重み係数は符号付9ビット、出力chは16あるのでW1Dataのビット数は9x16 = 144になります。それを図6‐46のように9ビットづつ16個に分割して、各出力ch用の係数
coeff_0〜15
とします。
図6‐46 ROMのデータは144ビット、アドレスは5ビット(conv_layer1.vhd)
●入力4chは逐次処理だが出力16chは並列処理
1層目は
このように
入力4ch(RGB+Dummy)を一つの積和演算器が受け持ちますが、出力16chは並列に計算されます。すなわち積和演算器は
16個
になり、それぞれにcoeff_0〜15が入力されます。
図6‐47 dotproで入力データと重み係数が積和される(conv_layer1.vhd)
最初のページへ
目次へ戻る