6‐07 1層目シミュレーションとEXCELの答え合わせ
●16並列の積和演算をのようすをシミュレーションで
このサイトに倣ってModelSim/Questaプロジェクトを作成し、論理シミュレーションを走らせます。図6‐50は1.985msほど走らせた辺り、tb_VideoProc/VideoProcCore/gts_hw/conv_layer1/mac_00〜15といった信号を見ています。これらは16個の積和演算器の出力になります。
|
図6-50 論理シミュレーションで見る積和演算器。16個同時に動くようす
●積和演算が合っているかはEXCELと比較
図6‐51は1層目のEXCELファイル(TS_layer1.xlsm)のim2colAll_W1シートです。これは行列乗算の3つのシートim2col00_W1, im2col01_W1, im2col02_W1を足し込んだものです。
同図のA列を見ると図6‐50のmac_00の値とピタリ一致していることが分かります。この一列は積和演算器00の出力になります。
隣のB列はmac_01、その隣C列はmac_02... 右端のP列がmac_15と等しいことを確認しましょう。これらによりEXCELと論理シミュレーションが一致していること、すなわちPythonが正しくHDLに変換されていることが分かります。
|
図6-51 im2colAll_W1シートと比較
●一つの積和演算器の一つの演算結果に注目
図6‐51の左上の-28216に注目し、その値を求める過程を見てみます。図6‐52はconv_layer1/dotpro_00(積和演算器00)の信号です。同図の右端、MATMULOUT(mac_00と同じ信号)に-28216が出ています。
同図の左端、PixRomData(画像データ)が184、MatRomData(重み係数)が-87、mulout(乗算結果)が-16008になっています。
muloutが累積されたものがaddoutに出てきます(この回路図参照)。累積されるようすを確認し、最終的な積和演算結果がEXCEL(-28126)と一致していることを確認します。 |
図6‐52 カーネルは3×3、入力3chぶんなので27回の積和になる
●入力画素はEXCELと合っているか
値が一致しないときは丁寧にEXCELと比較していきます。図6‐53は入力画素データのシート3つ(im2col02,
im2col01, im2col00、BGR→RGBなのでこの順番)ですが、これら3シートの最初の1行9画素を横に27個並べます。
184, 192, 208, 192, 192, 208, 120, 120, 136,,, 184, 188, 200, 188, 200, 200, 112, 116, 124,,, 184, 192, 200, 192, 208, 208, 112, 120, 128 となりますが、それが図6‐52のPixRomDataの信号値と同じことを確認します。 |
図6‐53 30×30画素を9×784に並び替えたim2colxx_W1
次のページへ
目次へ戻る
|