■2層目

 本企画でのニューラルネットワークは3層あります。1層目の演算結果は図2‐09のようにRAM_Z1.vhdに書き込んであり、それを読み出して2層目に入力します。アドレスは例によってカウンタで生成しますが、ここでは
50進カウンタになります。
 同図(b)のタイムチャートで分かるようにに2層目に入力されるデータはX0〜X49まで
50個です。

  図2‐09 1層目の結果が入ったRAMを読んで2層目に渡す部分


●重み行列ROMのアドレス生成

 図2‐10に行列W2のROMのアドレス生成法を示します。図2‐09(a)で生成した50進カウンタ(CO50)を
下位6ビットとします。
 さらに
100進カウンタを設けます。それは50進カウンタが最大値(49)になった時だけカウントアップし、それが上位7ビットになります。

 図2‐10(b)にそのタイムチャートを示します。MatRomAddrの下位6ビットが0〜49までカウントアップされる間、上位7ビットは0を保ちます。
 その後上位7ビットは1となり、下位6ビットは再び0〜49までカウントアップします。
 重みW2ROM(ファイル名ROM_W2.vhd)の中には要素数50個のROMが100個あり、MatRomAddrの上位7ビットはそのROMの選択に使用されます。

  図2‐10 重みのROMを読む部分


積和演算の部分

 画像ROMからの出力X_RD_DATAと、重みROMからの出力MatRomDataは図2‐11(a)に示すように乗算器に入力されます。


 その後、加算器と遅延器によって累積され、
積和演算結果が得られます。その仕組みは1層目と同じなので省略します。

 同図(b)はタイムチャートです。加算結果addoutはCO50=1のタイミングでラッチされMATMULOUTとなります。これが行列乗算の最初の要素P0になります。P0, P1, P2, ... , P99まで100個演算して終了します。



  図2‐11 50要素を積和演算する。結果は100個になる

●バイアス加算→シグモイドで2層目終了

 バイアス加算と疑似シグモイド関数の仕組みは1層目と同じなので省略します。
 2層目の演算が終了したら、それを3層目に渡すためにいったんRAMに溜め込みます。この仕組みも1層目と同じなので省略します。


次のページへ


目次へ戻る