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)


最初のページへ


目次へ戻る