8-03 vgg-3, 4層目のVHDL化(続き)

4層目は入力が128chになるので64並列

 図8‐54にvgg-4層目のタイミングのイメージを示します。

 3層目は入力が64chでしたが、4層目は入力が
128chになります。したがって図8‐54の左上のように、「outCh0の1画素」を計算するのに90ns x 128 = 11520nsと、3層目の倍かかります。

 3層目は1つの乗算器で出力を4ch計算していましたが、上記の理由で4層目は
1つの乗算器で出力を2ch計算します。そうすれば図8‐54の左にあるようにoutCh0,1の1ラインが3.456msで計算でき、1画面が518.4msで計算できます(1画面計算にかかる時間を各層そろえる)。


図8-54 vgg-4層目のタイミングのイメージ


●2ch×64並列なので出力128ch

 outCh0とoutCh1は1つの乗算器で計算されるので、両方の1画素を計算するのに90ns x 128 x 2 = 23.04usかかります。
1ライン150画素なので23.04us x 150 = 3.456msで1ラインの計算、1画面150ラインなので3.456ms x 150 = 518.4msで1画面の計算が終わります。

 「outCh2とoutCh3」、「outCh4とoutCh5」、...「outCh126とoutCh127」もそれぞれ1つの乗算器で計算されます。乗算器(ビットシフト型)が64個並列で2chづつ計算するので出力は128chになります(入力も128ch)。

●横方向、縦方向に間引くプーリングがある

 4層目はプーリングがあり(ここの2番目の"P")、150×150画素が75×75画素になります。それゆえ1画素を出力する周期は23.04us x 2 = 46.08us、1ライン出力する周期は3.456ms x 2 = 6.912msになります(*1)。そして1画面出力する周期は6.912ms x 75 = 518.4msになります。

(*1)図8‐54の右下参照。有効・無効ラインを繰り返すので×2。

●3層目の出力が4層目の入力になる

 3層目のシミュレーション結果relu.outの名前を変えてlay4.inとし、それが4層目の入力になります。図8‐55のようにRAM_X1_0〜3(入力バッファ、4ラインぶん)にlay4.inの内容が書き込まれます。

 conv_layer4は入力バッファからの画像を処理してRAM_X2_0〜3(出力バッファ、4ラインぶん)に書き込みます。1ライン75画素なのでアドレスは128、出力128chなのでデータ幅は5bit x 128 = 640bitになります。


図8-55 4層目のブロック図


次のページへ



目次へ戻る