●シミュレーションを走らせる
下の枠内、コマンドラインでdo run.doとタイプしてリターン(図2-25)するとシミュレーションがスタートします。コマンドラインが見あたらないときは、メニューのViewからTranscriptを選択してみましょう。
図2-25 コマンドラインからdo run.doでシミュレーションが始まる
●シミュレーション結果を見る
シミュレーションは数分でストップします。その後、do wave.doとタイプしましょう(図2-26)。
Waveウインドウに図2-27のような波形が現れます。
500us
の期間シミュレーションされています(右クリックでZoom Full選択)。
図2-26 do wave.doで波形を見る
図2-27 500usまでシミュレーションされた
マウスの中ボタンで波形を横に引き伸ばして最初の100usを見てみましょう(図2-28)。Z1_WR_DATAがニューラルネットワーク1層目の結果です。
EXCEL表
のz1の行と比較して
ピタリ一致
していることを確認しましょう。
図2-28 1層目の結果Z1_WR_DATAがEXCELと一致!
2層目の結果は400usあたりからZ2_WR_DATAに出てきます。図2-29のように拡大して
EXCEL表
のz2の行と比較して
ピタリ一致
していることを確認しましょう。
図2-29 2層目の結果Z2_WR_DATAがEXCELのz2と一致!
3層目の結果は450usあたりからAINに出てきます。図2-30のように拡大して
EXCEL表
のa3の行と比較して
ピタリ一致
していることを確認しましょう。
図2-30 3層目の結果AINがEXCELのa3と一致!
●推論の結果も途中経過もピタリ一致した!
AINの最大値をjudge.vhdで探して推論結果を得ます。図2-31のようにANSWERという信号に
「7」
が現れています。テスト画像の1枚目は「7」なので、正解だということが分かります。また推論にかかる時間は
461us
だということも分かります。(*2)
(*2)最初の5usはリセット期間。その後から計測している。メニューのAdd→Cursorでカーソルをもう1本追加して時間差を測る
波形を引き伸ばしてCLKの周期を測ると10nsになっています。すなわち推論にかかるサイクル数は461us / 10ns =
46.1kサイクル
です。
図2-31 推論結果は7。かかる時間は461us
図2-32
1層目で圧倒的に時間がかかる
図2-32のようにフルスケールにしてメニューのAdd→Cursorでカーソルを追加し、各層でかかる時間を計測します。1層目が400us (
40kサイクル
)、2層目が50.5us (5.05kサイクル)、3層が11us (1.1kサイクル)かかっています。
●1層目にかかる時間が圧倒的に長い
各層でかかるサイクル数(MNIST画像1枚あたり)とその割合を表2-01に示します。
表2-01
1層目
の割合が大きい(1サイクル = 10ns)
1層目
2層目
3層目
全体
時間
400us
50.5us
11us
461us
サイクル数
40k
5.05k
1.1k
46.1k
割合
87%
11%
2.4%
100%
●ひとまずVHDL化は成功。あとは並列化とパイプライン化でスピードアップ!
表2-01のように、推論にかかる時間はほとんど
1層目に支配
されていることが分かります(全体の
87%
)。なんとか1層目を高速化したいところですね。
次章では1層目で行われる演算を「
並列化
」して約50倍高速化します。お楽しみに!
最初のページへ
目次へ戻る