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