FC2カウンター FPGAの部屋 2019年03月30日
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

(目標)Vivado HLSで1クロック毎に結果を出力できるNNを作る3(Vivado HLS)

(目標)Vivado HLSで1クロック毎に結果を出力できるNNを作る2(ソースコード)”の続き。

前回は、MNIST データセットを使った2層の全結合層を持ったニューラル・ネットワークを構成し、そのソースコードを貼った。今回は、Vivado HLS でC シミュレーション、C コードの合成を行っていく。

まずは、Vivado HLS のプロジェクトを示す。
all_deploy_afnet4mnist_7_190329.png

C シミュレーションを行った。
all_deploy_afnet4mnist_8_190329.png

ソフトウェアもハードウェアも100 個のデータの内の 2 個を間違っているので、精度は 98 % ということになる。

次に C コードの合成を行った。
all_deploy_afnet4mnist_9_190329.png

Latency は 301 クロック、Interval は 282 クロックだった。クロックは 10 ns なので、推論時間は 3.01 us となった。
一方でリソースの消費は激しい。DSP48E は 803 個で 803 / 360 x 100 = 223 % でオーバーしている。LUT も 75377 個で5000 固程度オーバーしてしまっている。
BRAM 使用量は 0 で array_partition complete が有効に効いているのが分かる。

Instance の Loop_af1_dot_proc_UO をクリックして、全結合層1層目の合成結果を見てみよう。
all_deploy_afnet4mnist_10_190329.png

DSP48E が 783 個使用されている。ここでもう 217 % 使用している。

Loop_af2_dot1_proc を表示してみよう。
all_deploy_afnet4mnist_11_190329.png

全結合層2層目でのリソース使用量はそれほど多くない。やはり、1層目で相当リソースを消費してしまっている。

Analyze 画面を表示する。
all_deploy_afnet4mnist_12_190329.png

Operation\Control Step の mnist_nn_entry21(function) を見てみよう。
all_deploy_afnet4mnist_13_190329.png

次に、Operation\Control Step の Loop_af1_dot1_proc(function) を見てみる。
all_deploy_afnet4mnist_14_190329.png

all_deploy_afnet4mnist_15_190329.png

785 ステートまである。

Operation\Control Step の Loop_af2_dot1_proc(function) を見てみる。
all_deploy_afnet4mnist_16_190329.png

all_deploy_afnet4mnist_17_190329.png

Loop_af2_dot1_proc(function) の Resource Viewer を見てみよう。
all_deploy_afnet4mnist_18_190329.png

最初のステートにRead が全て並んでいて、順番に乗算累算されているのが分かる。ここには表示されていないが、最後のステートでWrite が並んでいる。
  1. 2019年03月30日 06:24 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0