8-02 vgg-2層目のVHDL化(続き)

●1層目の出力が2層目の入力になる

 1層目のシミュレーション結果はrelu.outというテキストファイルに書き込まれました。2層目ではそれを入力としてシミュレーションします。

 図8‐28のようにRAM_X1_0〜3に
lay2.in (relu.outの名前を変えたもの)の内容が書き込まれます。図7‐10の"W"のように4個のラインバッファを順番にぐるぐる書き込みます。

 また同図では、読み方"R"は書き方"W"を追いかけるように、書いていない3ラインを読みます。このように「リアルタイム性を利用する」ことにより、層間バッファは4ラインあれば事足ります


図8-28 envが1層目の出力を2層目の入力バッファに書き込む


●2層目はビットシフト乗算とプーリングがある

 conv_layer2の出力(2層目の出力)はプーリングで150×150画素になった後、図8‐28に示すようにRAM_X2_0〜3に書き込まれます(*1)。またそれと同じ信号がenv(環境ファイル)にも送られ、relu.outに書き込まれ、それとPythonの結果を比較して一致を見ます。


(*1)このメモリ内のデータが次層(vgg-3)の入力データになる。出力は1ライン150画素なのでアドレスは256、チャネルは64あるのでビット幅は 5bit x 64 = 320bit になる

 vgg-2層目のModelSim(シミュレータ)プロジェクトのアーカイブを解凍すると図8‐29のような構成になっています。出力が64チャネルなので64並列、乗算器は
ビットシフト型になっています。またこの層はプーリング(pooling_lay2)があり、それ用のメモリ(SRAM_512x320)が1個必要になります。


図8‐29 2層目Modelsimプロジェクトのツリー構造


●2層目単体でシミュレーションしてみる

 
ModelSimをスタートすると図8‐30のような構成になっています。シミュレーションするのは2層目だけです。


図8-30 ModelSimで見るツリー構造


次のページへ



目次へ戻る