10-01 非パイプラインで全層繋ぐ(層レベルでは逐次処理)

●まずは非パイプラインで全層繋いで見る

 前章では畳み込みニューラルネットワークを各層ごとにシミュレーションしていました。本章では10-01のように、ひとまず「
非パイプライン」で全層繋いでシミュレーションしてみます。

  図10-01 非パイプライン接続のブロック図


●逐次処理なので遅くなる

 上図のように各層は前の層が終了したのを合図に開始します。したがってスループット(MNIST画像1枚の判定結果が出てくる周期)は
全層を足し合わせた時間592us(クロック周期10ns)+αになります。

●非パイプライン全層接続の論理シミュレーション

 このアーカイブは非パイプライン全層接続のModelSim(使い方はここ)プロジェクトです。600usほど走らせるとMNIST画像の最初の1枚(数字の’7’)の判定結果が出てきます。

 図10-02は各層のWxBUSY_N信号で、x層の処理が終了するとHになり、それを合図にx+1層の処理が開始されます。若干のオーバヘッド(+α)があり、全層で
601usほどかかっています。



  図10-02 600usほど走らせると全層終了する(私のマシンではシミュレーションに10時間ほどかかった)


●各層の結果を確認

 図10-03は各層の間にあるRAMDATAです。RAM_Z1_NNには畳み込み1層目の出力チャネルNN画像が入っています。RAM_Z2_NNは畳み込み2層目、RAM_Z3_NNは畳み込み3層目、・・・RAM_Z7_NNはAffine1層目の出力チャネルNN画像が入っています。

 各層の結果をEXCEL表と比較し、ピタリ一致していることを確認します。


  図10-03 各層の結果が入るRAMDATAを見る


●MNIST画像の最初の1枚は数字の’7’

 図10-04は判定回路(judge.vhd)の信号です。AINはAffine2層目の結果であり、EXCEL
ピタリ一致しています。ANSWERも’’であり、正解であることが分かります。


  図10-04 judge_instの下にある信号たち


●非パイプラインだとスループットは600us余り

 図10-01に示すように各層は同時に動くわけではなく、1層づつ順番に動きます。このように「
非パイプライン」で繋ぐと処理は遅くなり、ハードウエア化の効果はあまりなくなります。


 次節では「パイプライン」で繋いで高速化します。


目次へ戻る