« ZYNQでQSPI ROMを使う方法 | トップページ | VivadoとISEの違い »

2016.09.05

VivadoでのSynthesizeを速くしたい

Vivadoでの論理合成時間を速くすることはできないかどうか、試してみました。

検証に使用したのは、特電Artix-7ボードのサンプルデザイン。

Vivado_bench

EZ-USB FX3のコアと、DDR3のコアと、パターンジェネレータ等がAXIインタコネクトで相互につながっているというものです。

これを普通にSynthesizeすると、

Vivado_bench_1

となって、様々なOut of contextのモジュールが合成されてから本体が合成されます。

Synthesizeの時間を見てみると、xlconstantやLEDチカチカなどのシンプルなものは18~30秒くらいですが、MIGやBRAM、FX3のコアは分単位の時間がかかっているのがわかります。

この時間をどのようにしたら短縮できるでしょうか?

思いつく方法は、Vivadoのスレッド数を変える方法と、Job数を変える方法。Job数は標準では2ですが、私のPCでは8まで上げることができました。

Vivado_bench_2

ためしにJobを8にして実行してみると・・

Vivado_bench_3

おおっ! 緑のクルクルが8個同時に回るではないですか!!

これは期待できそう。

ちなみに、タスクマネージャで見てみると、このときXEONのCPU 8個がフル稼働しています。PCのファンがグオーンと音を立てて、頑張っているんだな~と感じさせます。余っているコアに、たまには仕事をさせなければなりませんね。

Vivado_bench_4

無事に合成できたのですが、

MIGの合成にかかった時間を見てみると、ジョブ2個のときは2分38秒だったのが、ジョブ8個では3分14秒かかっています。

同時にたくさんのジョブを実行させると、個々のジョブの実行時間は増えますが、並行して動作しているので、トータルでの時間は短くなりなります。

sun

スレッド数とJob数を様々に変化させて、実験してみたくなりますね。

パソコンの前に貼りついてストップウォッチで測るのも大変なので、Tclのスクリプトを書いて実行しました。

open_project C:/share/fx3-axi-ddr/fx3-axi-ddr.xpr;
reset_project;
reset_target all [get_files  C:/share/fx3-axi-ddr/fx3-axi-ddr.srcs/sources_1/bd/main/main.bd]
export_ip_user_files -of_objects  [get_files  C:/share/fx3-axi-ddr/fx3-axi-ddr.srcs/sources_1/bd/main/main.bd] -sync -no_script -force -quiet
delete_ip_run [get_files -of_objects [get_fileset sources_1] C:/share/fx3-axi-ddr/fx3-axi-ddr.srcs/sources_1/bd/main/main.bd]
set_param general.maxThreads 8;
puts "Num of threads has been changed to [get_param general.maxThreads]";
set start_sec [clock seconds];
launch_runs -jobs 2 synth_1;
wait_on_run synth_1;
set end_sec [clock seconds];
set sec [expr $end_sec-$start_sec];
puts "thr2_Synth_time = $sec";

と、いう感じです。

実行すると、このようにTclのコンソールに経過時間が表示されます。

Vivado_bench_5

※このTclは昔いたアルバイトの学生さんが書いてくれたものをベースにしています。彼はいい仕事を残していってくれました。

こうして測ってみた結果は、こうなりました。

Vivado_bench_6

同時に実行するジョブ数を増やしたほうが良いようです。スレッド数はあまり関係がないようです。

結論は、「Vivadoを速くしたければジョブを増やせばよい」、ということのようです。

|

« ZYNQでQSPI ROMを使う方法 | トップページ | VivadoとISEの違い »

コメント

コメントを書く



(ウェブ上には掲載しません)




« ZYNQでQSPI ROMを使う方法 | トップページ | VivadoとISEの違い »