●1層目の結果をRAMに溜め込む部分

 1層目の重み行列は784×50なので乗算結果は50個です。それらは並列に同時に計算されますが、バイアスを加算するプロセスにより、1サイクル毎ずれながら出力されます(図3-04のシグモイド結果Z0, Z1, ... Z49)。それらはマルチプレクサで多重化されます(Z_WR_DATA、下から3段目)。

 第2章と同様に、1層目の結果(Z0, Z1, ... Z49)をいったんRAMに溜め込みます。図3-04のようにRAMの書き込みアドレスZ_WR_ADDRと、書き込みイネーブルZ_WR_Nを生成します。


  図3-04 1層目の結果をRAMに書いて2層目が読む

 図3-04のタイムチャートを基にVHDL化するとリスト3-03のようになります。addr4ramはCO784から4を引いたもので、その下位6ビットがZ_WR_ADDRになります。
 add4ramが0〜49の期間をBUSY信号でマスクしてZ_WR_Nになります。

  リスト3-03 RAM_Z1に入力する信号

● 各種BUSY信号の説明

 1層目layer1.vhd内にはいくつかBUSY信号があるので図3-05で説明します。リセット信号RST_Nは最初の5usの期間L(アクティブ)になります。それがHになると演算がスタートします。

 重み行列は784×50、これを50並列で処理するので、積和演算は784サイクルで終了します。これはMAC1BUSYがHの期間です。

 その後、バイアス加算、シグモイドで1層目の結果を得ながらRAMに書き込みます。これはRAM1BUSYがHの期間です。

 MAC1BUSYとRAM1BUSYの論理和がW1BUSYになります。その反転がBUSY_NでこれがL(アクティブ)の期間は2層目は待機状態で、Hになると2層目の演算がスタートします。

  図3-05 BUSY信号とサイクル数

 同図のように1層目の演算ににかかる時間は840サイクル弱になります。シミュレーションで計測するので「次のページへ」をクリックしましょう。


次のページへ


目次へ戻る