11‐04 6層目の重み係数ROMアクセス(HDL)

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

 W6AddrとW6DataSelは図11‐30のように生成されます。前者はcount32768の下位7ビット、後者はその上の6ビットと同じです。そうすれば係数ROMの128行×43列が読み出せます(*1)

(*1)係数ROMの縦128行をW6Addrで読み出し、横43列をW6DataSelで選択する


図11‐30 count32768(12 downto 0)を使う(conv_layer6.vhd、gts_timing.vhd)

重み係数ROMの縦一列を読むW6Addr

 W6Addrは図11‐31のように1個の係数ROMのアドレスとなり、
W6Dataが読み出されます。アドレス幅は7ビット、データ幅は387ビットになります(*2)

(*2)6層目の係数は符号付9ビットなので普通の乗算器を使う。9ビット×43=387ビット

図11‐31 係数ROMは1個だけ (conv_layer6.vhd)

重み係数ROMの43列を選択するW6DataSel

 6層目の係数は
符号付き9ビットなので、W6Data(387ビット)を9ビットづつ、W6DataSelによって時分割で
43個に分けます(図11‐32)。このcoeff_00によって重み係数ROMの128×43列が全部得られます。

図11‐32 ROMの読出し遅延に合わせてW6DataSel_dlyで選択 (conv_layer6.vhd)

●係数をdotpro_00に入力

 coeff_00は1個の積和演算器に入力され、積和結果が
43個出力されます(このタイムチャートのmac0〜mac42)この後、バイアス加算などを経て判定回路(次のページ)に送られます。

図11‐33 積和演算器dotproは1個だけ (conv_layer6.vhd)


次のページへ


目次へ戻る