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 からその通りに修正。(しゅうせいしなくてもいけるのか?誰か人柱)
とりあえず、合成もできたし、自分のデザインに入れ込むこともできた。
ただし、これ、使い方がよくわからない。