”
テンプレートで書いた畳み込みニューラルネットワーク2(C シミュレーションとC コードの合成)”の続き。
前回は、テンプレートで書いた各層をつないで、畳み込みニューラルネットワーク(CNN)を構築した。そして、Vivado HLSのプロジェクト all_layers_template を作成して、C シミュレーションと C コードの合成を行った。今回は、C/RTL協調シミュレーションとExport RTL を行う。
まず、C コードの合成によって生成されたVHDL コードのトップファイル all_layers.vhd のentity を貼っておく。

レジスタ設定、結果取得用のAXI4 Lite Slave インターフェースと画像データを入力するためのAXI4-Stream インターフェースがあるのが分かる。
最初に、C/RTL 協調シミュレーションを行った。
#include "curve_data_0_100.h"
を有効にして、
#define NUM_ITERATIONS 300 // C Simulation
をコメントアウトし、
#define NUM_ITERATIONS 2 // C/RTL CoSimulation
のコメントアウトを外した。

これで、C/RTL 協調シミュレーションを行った。結果を示す。

Latency の min は 9259 クロック、avg は 9278 クロック、max は 9297 クロックで、Interval はすべて 9222 クロックだった。C コードの合成と差があるのは何故だろうか?

C/RTL 協調シミュレーション波形を示す。
全体の波形を示す。CNN の実行2つ分だ。

2 つ目の CNN の実行時間を計測してみよう。
ap_start から ap_done が出て、終了するまでの時間を計測する。

92.57 us だった。
この前の実装の2番目の処理の実行時間は89.54 us だったので、約 3.03 us ほど遅くなっている。しかし、計測条件が異なるかも?前の計測では、ap_start から ap_done 終了時間ではなかった気がする。
今同条件で測定しなおしたら、以前の
all_layers プロジェクトのC/RTL 協調シミュレーションの 2 番目の波形の ap_start から ap_done 終了時間は、90.14 us だった。よってその差は 2.43 us だった。
最後にExport RTL を行った。
なお、Vivado synthesis, place and route にチェックを入れている。

LUT は 1944 個、FF が 2545 個、DSP が 29 個、BRAM が 15 個使用している。
CP achieved post-implementation は 9.364 ns で、ちょっと危ない気もするが、とりあえずは良いだろう。
- 2018年05月17日 04:28 |
- DNN
-
| トラックバック:0
-
| コメント:0