●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サイクル弱になります。シミュレーションで計測するので「次のページへ」をクリックしましょう。
|
次のページへ
目次へ戻る
|