8-01 vgg-1層目のVHDL化(続き)


●テストベンチの中に回路本体がある

 vgg-1層目のModelSim(シミュレータ)プロジェクトのアーカイブを解凍すると図8‐03のような構成になっています。

 トップモジュールはtb_VideoProcで、これはVHDLで書かれた
テストベンチです。その下にVideoProcCore, env, mt48lc4m16, gen_utils, conversionsがあり、VideoProcCoreが回路本体のトップになります。


図8‐03 ModelSimプロジェクトのツリー構造


●あらかじめSDRAMに画像を置いてからシム

 mt48lc4m16はSDRAMのシミュレーションモデルです(*1)。initmem.txtにある画像データ(この一番上の人と馬の写真)によって初期化されます(*2)。

(*1)FPGA外部にあるSDRAMの動作をビヘイビアレベルで記述したもの。このモジュールは論理合成しない。
(*2)さしあたりCMOSカメラはない状態でシミュレーションする。SDRAMに最初から画像を持たせてそれを認識させる。

 SDRAM(FPGA外部)にある画像データは図8‐04のようにSDRAM_CTRL, LineOut_CTRLを経てoutBuf0〜3(FPGA内部メモリ)に送られます。その画像データは認識回路(ssd_hw)に送られますが、さしあたり
vgg-1層目(conv_layer1)のみでシミュレーションします。


図8‐04 画像データの流れ

●1層目の出力の行き先は2つ

 1層目の出力はRAM_X1_0〜3(FPGA内部メモリ)に送られます(*3)。1フレーム全部ため込むのではなく、ここで述べたように4ラインぶんあれば十分です。

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

 また1層目の出力はenv(シミュレーション用環境ファイル)にも入力され、テキスト形式でファイル(relu.out)に記録されます(*4)。

(*4)このrelu.outとPythonの結果を比較してピタリ合えば成功。


次のページへ



目次へ戻る