新千葉 ガーベージ・コレクション

FPGA マガジンやインターフェースで書けなかったこと等をちょぼちょぼ書いてます。@ryos36

BNN-PYNQ をリビルドする

Linux では簡単

tkat0.hateblo.jp
方法はこちらが詳しい。

Windows ではコンパイル時にエラー

これはどうも clang の 4.5.2(?) のバグらしい。(clang のバージョンなのか g++ のバージョンなのか不明)

c++ - Clang on Cygwin with C++11 - Stack Overflow

これによると、4.7.2 をつかえとなっている。どうやら clang はヘッダーなどを g++ から拝借してきているようだ。g++ の構文では通るが clang では通らないという記述があるらしい。でも、ちゃんと type_info という定義はある。
で、4.7.2 を見てみると、、、どちらでも通る記述に変更されている。

diff exception_ptr.h*
132c132
<       const class type_info*
---
>       const type_info*

これ単純に class ってつけ足せばいいのでは、、、、ビンゴ!!コンパイルが通るようになる。そしてまたエラー。

throw_with_nested という関数が2度定義されていて、どちらにも = 0 で初期値をいれている。これ、2回目の定義の時は初期値を入れてはだめなのでは?

> diff nested_exception.h*
122c122
<     __throw_with_nested(_Ex&& __ex, const nested_exception*)
---
>     __throw_with_nested(_Ex&& __ex, const nested_exception* = 0)

ビンゴ!!エラーがなくなる。これでとりあえずこの問題解決。Vivado HLS の最近のバージョンでも同じ問題が残っているので、いちいちぜんぶに変更しないといけない(もちろん自己責任で)

c:/Xilinx/Vivado_HLS/2016.2/win64/tools/clang/include/c++/4.5.2

とにかくこうすると、うまくいく。

シェルプロで作られているよ

なんだかしらんが、シェルプロで作るようになっている。なので、非常にめんどくさい。なんで tcl で共通化しないんだよ。Linux 文化オンリー?
しかたがないのでシェルプロを見ながらつくりなおし。っていうか Vivado HLS はさっきの修正でうまくいく。問題は Vivado の方。
Vivado HLS でつくった BlackBox Jam なる IP を Vivado にいれこむ。これ、単純にいれて自動配線に任せてよさそう。で、どういうわけか、合成と実装のオプションを変えている。タイミングがメットしなかったんだねきっと。

set_property strategy Flow_PerfOptimized_high [get_runs synth_1]

set_property STEPS.SYNTH_DESIGN.ARGS.DIRECTIVE AlternateRoutability [get_runs synth_1]
set_property STEPS.SYNTH_DESIGN.ARGS.RETIMING true [get_runs synth_1]

set_property strategy Performance_ExtraTimingOpt [get_runs impl_1]
set_property STEPS.OPT_DESIGN.ARGS.DIRECTIVE Explore [get_runs impl_1]
set_property STEPS.POST_ROUTE_PHYS_OPT_DESIGN.ARGS.DIRECTIVE AggressiveExplore [get_runs impl_1]
set_property STEPS.PHYS_OPT_DESIGN.ARGS.DIRECTIVE AggressiveExplore [get_runs impl_1]
set_property STEPS.POST_ROUTE_PHYS_OPT_DESIGN.IS_ENABLED true [get_runs impl_1]

よくこんな設定見つけたな、、、、とおもいつつ、、、GUI からその通りに修正。(しゅうせいしなくてもいけるのか?誰か人柱)

とりあえず、合成もできたし、自分のデザインに入れ込むこともできた。

f:id:ryos36:20170909232858p:plain

ただし、これ、使い方がよくわからない。