8-03 vgg-3, 4層目のVHDL化
●3層目は出力128chだが32並列
図8‐42にvgg-3層目のタイミングのイメージを示します。
3層目の入力は64chですが、出力は128chになります。1、2層目と同じように、入力は逐次処理、出力は並列処理としますが、ここでは128ではなく32並列にします。
すなわち1つの乗算器で出力を4ch計算することになり、そうすれば図8‐42の左にあるようにoutCh0,1,2,3の1ラインが3.456msで計算でき、1画面が518.4msで計算できます。このように1画面計算にかかる時間を各層そろえてパイプライン化に備えます。 |
図8-42 vgg-3層目のタイミングのイメージ
●4ch×32並列なので出力128ch
図8‐42の上段はoutCh0,1,2,3を計算するようすです。これら出力4chは1個の乗算器で「逐次的に」計算されます。したがって1画素の計算にかかる期間は90ns
x 64 x 4 = 23.04usになります。1ライン150画素なので23.04us x 150 = 3.456msで1ラインの計算、1画面150ラインなので3.456ms x 150 = 518.4msで1画面の計算が終わります。
1つの乗算器で4chぶん計算するため、outCh0の1画素、outCh1の1画素、outCh2の1画素、outCh3の1画素をそれぞれ別のタイミング(5760nsおき)にラッチして取り出し、更にもう一度ラッチしてタイミングを揃えます(図8‐42の右の方にある「outCh0,1,2,3の1画素」)。
乗算器(ビットシフト型)が32個並列で4chづつ計算するので出力は128chになります(入力は64ch)。画素数は入力と一緒で150×150です。 |
●2層目の出力が3層目の入力になる
2層目のシミュレーション結果relu.outの名前を変えてlay3.inとし、それが3層目の入力になります。図8‐43のようにRAM_X1_0〜3(入力バッファ、4ラインぶん)にlay3.inの内容が書き込まれます。
conv_layer3は入力バッファからの画像を処理してRAM_X2_0〜3(出力バッファ、4ラインぶん)に書き込みます。1ライン150画素なのでアドレスは256、出力128chなのでデータ幅は5bit
x 128 = 640bitになります。 |
図8-43 3層目のブロック図
次のページへ
目次へ戻る |