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

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

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

(*1)係数ROMは8列づつ16個に分けられている。縦2048行をW5Addrで読み出し、横8列をW5DataSel(2:0)で選択する




図10‐30 W5Addr, W5DataSelはcount32768から作る(conv_layer5.vhd、gts_timing.vhd)

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

 W5Addrは図10‐31のように16個の係数ROMのアドレスとなり、
W5Data00〜15が読み出されます。

図10‐31 16個の係数ROMを同時に読み出す (conv_layer5.vhd)

重み係数ROMの8列を選択するW5DataSel

 5層目の係数は4種類なので
2ビットにエンコードされています。したがってW5Data_00(16ビット)を2ビットづつ、図10‐32のようにW5DataSelによって時分割で
8つに分けます。
 romdata_00は重み係数ROMの左端0列〜7列までの係数になります。

 W5Data_01〜15も同様に処理され、
romdata_00〜15が得られます。これらの信号で重み係数2048×128列が全部得られます。

図10‐32 romdata_00〜15それぞれに重み係数2048×8個 (conv_layer5.vhd)

●係数をdotpro_00〜15に入力

 romdata_00〜15はそれぞれ別の積和演算器に入力されます。それぞれから積和結果が8個づつ出力され(このタイムチャートのmac0〜mac127)、合計
128個はバイアス加算やReLU回路などを経て6層目に送られます。

図10‐33 積和演算器dotproは16個ある (conv_layer5.vhd)

最初のページへ

目次へ戻る