FC2カウンター FPGAの部屋 今まで作ってきた層のテンプレートをMNIST のCNN に適用する3(Export RTL まで)

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

FPGAの部屋

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

今まで作ってきた層のテンプレートをMNIST のCNN に適用する3(Export RTL まで)

今まで作ってきた層のテンプレートをMNIST のCNN に適用する2(C コードの合成2)”の続き。

前回は、PYNQボードのZynq に入るようにパラメータを設定しC コードの合成を行った。今回は、C シミュレーション、C/RTL 協調シミュレーション、Export RTL を行う。

まずは、C シミュレーションを行った。結果を示す。
mnist_conv_nn10_hlss_15_180519.png

ハードウェアの間違いが 1 個、ソフトウェアでの間違いが 1 個だった。

C/RTL 協調シミュレーションを実行するに当たって、NUM_ITERATIONS を 100 から 2 に変更した。多すぎると時間がかかるからだ。
mnist_conv_nn10_hlss_16_180519.png

C/RTL 協調シミュレーションを実行した。
mnist_conv_nn10_hlss_17_180520.png

Latency は、min 118630 クロックで、avg が 118643 クロック、max が 118657 クロックだった。

C/RTL 協調シミュレーションの波形を示す。
mnist_conv_nn10_hlss_18_180520.png

2 回目のCNN の実行時間を測ってみると、1,186.28 us だった。ただし、クロックは 100 MHz となっている。
mnist_conv_nn10_hlss_19_180520.png

Export RTL を行った。実行中にエラーが発生した。このエラー内容を示す。
mnist_conv_nn10_hlss_20_180520.png

Phase 1.2 IO Placement/ Clock Placement/ Build Placer Device
ERROR: [Place 30-640] Place Check : This design requires more RAMB36/FIFO cells than are available in the target device. This design requires 144 of such cell types but only 140 compatible sites are available in the target device. Please analyze your synthesis results and constraints to ensure the design is mapped to Xilinx primitives as expected. If so, please consider targeting a larger device.
ERROR: [Place 30-640] Place Check : This design requires more RAMB18 and RAMB36/FIFO cells than are available in the target device. This design requires 290 of such cell types but only 280 compatible sites are available in the target device. Please analyze your synthesis results and constraints to ensure the design is mapped to Xilinx primitives as expected. If so, please consider targeting a larger device.
ERROR: [Place 30-640] Place Check : This design requires more RAMB36E1 cells than are available in the target device. This design requires 144 of such cell types but only 140 compatible sites are available in the target device. Please analyze your synthesis results and constraints to ensure the design is mapped to Xilinx primitives as expected. If so, please consider targeting a larger device.
INFO: [Timing 38-35] Done setting XDC timing constraints.
Phase 1.2 IO Placement/ Clock Placement/ Build Placer Device | Checksum: a2718320


Time (s): cpu = 00:00:04 ; elapsed = 00:00:04 . Memory (MB): peak = 2408.320 ; gain = 0.000 ; free physical = 1463 ; free virtual = 9892
Phase 1 Placer Initialization | Checksum: a2718320


Time (s): cpu = 00:00:04 ; elapsed = 00:00:04 . Memory (MB): peak = 2408.320 ; gain = 0.000 ; free physical = 1463 ; free virtual = 9892
ERROR: [Place 30-99] Placer failed with error: 'Implementation Feasibility check failed, Please see the previously displayed individual error or warning messages for more details.'
Please review all ERROR, CRITICAL WARNING, and WARNING messages during placement to understand the cause for failure.
Ending Placer Task | Checksum: a2718320


Time (s): cpu = 00:00:04 ; elapsed = 00:00:04 . Memory (MB): peak = 2408.320 ; gain = 0.000 ; free physical = 1464 ; free virtual = 9893
INFO: [Common 17-83] Releasing license: Implementation
46 Infos, 0 Warnings, 0 Critical Warnings and 5 Errors encountered.
place_design failed
ERROR: [Common 17-69] Command failed: Placer could not place all instances
INFO: [Common 17-206] Exiting Vivado at Sun May 20 05:23:04 2018...
[Sun May 20 05:23:04 2018] impl_1 finished
wait_on_run: Time (s): cpu = 00:01:18 ; elapsed = 00:02:03 . Memory (MB): peak = 2078.047 ; gain = 8.000 ; free physical = 2423 ; free virtual = 10851
ERROR: [Common 17-69] Command failed: Run 'impl_1' failed. Unable to open
INFO: [Common 17-206] Exiting Vivado at Sun May 20 05:23:04 2018...
Finished export RTL.


つまり、BRAM_18K が 290 個必要で、280 個しか無いから実装できないよということのようだ。前回のC コードの合成では、BRAM_18K は 146 個、 52 % で合成できると結果が出ていたが、その倍程度ということらしい。これは、Vivado HLS ツールのバグじゃないだろうか?

PYNQ ボード(ZYBO Z7-20 でも動作する)で動作するために、affine_layer1 の OUTPUT_PIPELINE_II を 16 に変更した。
mnist_conv_nn10_hlss_21_180520.png

これで、C コードの合成を行った。
mnist_conv_nn10_hlss_22_180520.png
mnist_conv_nn10_hlss_23_180520.png

Estimated は 9.40 ns で、Latency は、min が 202936 クロック、max が 204376 クロックだった。
リソース使用量は、BRAM_18K が 146 個、DSP48E が 180 個、FF が 8890 個、LUT が 16424 個だった。

Export RTL を行った。今回はエラー無く実行することができた。
なお、Vivado synthesis, place and route にチェックを入れている。
mnist_conv_nn10_hlss_24_180520.png

LUT は 5737 個、これは C コードの合成の 1/3 の量だ。FF は 5575 個、DSP が 180 個、BRAM が 146 個だった。
CP achieved post-implementation は 9.622 ns で、ちょっと危ない気もするが、とりあえずは良いだろう。

さて、以前の実装の”「ゼロから作るDeep Learning」の畳み込みニューラルネットワークのハードウェア化6(再度Vivado HLS )”との性能を比較してみよう。
以前の実装のLatency の max は 2745569 クロックなので、 性能は 2745569 / 204376 ≒ 13.4 倍になった。
  1. 2018年05月21日 04:34 |
  2. DNN
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog19.fc2.com/tb.php/4174-5cc490c6
この記事にトラックバックする(FC2ブログユーザー)