■6層目の論理シミュレーション

 このアーカイブは6層目のModelSim(使い方はここ)プロジェクトです。


●6層目の出力画像は64個のRAMの中にある

 図8-130のようにtb_conv_hw/conv_hw_1の下にはRAM_Z6_00〜63まで
64個のRAMがあり、それぞれに出力チャネルの画像データ(4×4画素)が書かれています。畳み込み層は全部で6つであり、これらが最終層の結果になります。


  図8-130 ModelSimのSimタブ


●RAM_Z6_00の中身を見てみる

 図8-131はtb_conv_hw/conv_hw_1/RAM_Z6_00の下のRAMDATAです(RAMの中身)。出力チャネル64枚のうちの最初の画像データが入っています。
7us辺りからデータが現れます。



  図8-131 RAM_Z6_00のRAMデータ


●6層目の出力画像データをEXCELと比較する

 conv_layer6.xlsmのシートPool00(図8-132)と一致することを確認しましょう。6層目では
プーリングでの間引きが入るので出力画素数は4×4になります。最終層なのでパディングはありません。


  図8-132 Pool00シート(conv_layer6.xlsm)


●最後のチャネル63はどうか

 出力チャネルは64個あります。図8-133は最後のチャネル63に相当するRAMデータです。これは
97us付近からデータが現れます。



  図8-133 RAM_Z6_63のRAMデータ


●4枚づつ16回に分けて順次計算

 出力画像64枚は
4枚づつ、16回に分けて演算されます。図8-134のように約6usのシーケンスを16回行い、合計98us程度で終了します。


  図8-134 RAM_Z6_00〜03、04〜07、08〜11、…、56〜59、60〜63それぞれ書き込まれるタイミングが違う


●5層目とほぼ同じく6層目は98usになった

 5層目と比べて
若干サイクル数が増えて9.8kサイクルになりました。おそらくプーリングにかかるぶんだと思われます。


畳み込み1層〜6層までのサイクル数のバランスを見る

 第6章で畳み込み1層目、第7章で2層目、本章では3〜6層目をVHDL化しました。各層のサイクル数と時間をと比較したものを表8-04に示します。

    表8-04 各層にかかる時間(MNIST画像1枚あたり、1サイクル = 10ns)
畳込1層目 畳込2層目 畳込3層目 畳込4層目 畳込5層目 畳込6層目
サイクル数 7.1k 7.1k 7.2k 9.3k 9.7k 9.8k
時間 71us 71us 72us 93us 97us 98us
乗算器 16個 256個(ビットシフト型) 128個(ビットシフト型) 256個(ビットシフト型) 128個(ビットシフト型) 256個(ビットシフト型)


●バランス的にはまずまず。これでパイプライン化できる

 ここにあるようにパイプライン化するには各層のサイクル数をそろえる必要があります。上表をみると全層が7.1k〜9.8kサイクルの間に収まっており、まずまず効率的なパイプライン化が出来そうです。
スループットは一番遅い9.8kサイクルになります。


最初のページへ


目次へ戻る