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

次のページへ

目次へ戻る