-
create_project
コマンドでプロジェクトを作成します。プロジェクト ディレクトリおよびターゲット デバイスが指定されています。指定したプロジェクト ディレクトリが存在しない場合は、自動的に作成されます。この例では、さまざまなレポートを保存する出力ディレクトリは、プロジェクト ディレクトリと同じです。
- プロジェクトで使用されるすべてのファイルを宣言し、プロジェクトに追加します。これには、
add_files
コマンドを使用します。ファイルをプロジェクトに追加すると、特定のファイルセットに追加されます。ファイルセットは、目的別にファイルをグループ化するコンテナーです。このスクリプト例では、ほとんどのファイルはデフォルトのファイルセット (sources_1
) に追加されますが、Verilog テストテストベンチ cpu_tb.v のみはデフォルトのシミュレーション ファイルセットsim_1
に追加されます。ファイルは、
import_files
コマンドを使用してプロジェクト ディレクトリにもコピーします。これにより、プロジェクトでソース ファイルのローカル コピーが使用され、元のソース ファイルは参照されません。 - バックグランドで合成 run を起動し、デザインを合成します (
launch_run synth_1
)。Vivado IDE により必要なスクリプトがすべて自動的に生成され、別の Vivado セッションで合成が実行されます。合成 run は別のプロセスで実行されるので、現在のスクリプトを続行する前に合成 run が完了するのを待つ必要があります。これには、wait_on_run
コマンドを使用します。合成 run が完了したら、
open_run synth_1
コマンドを使用して結果をメモリに読み込むことができます。制約のないチェックポイントが、合成を実行したプロジェクト ディレクトリに保存されます。この例では、チェックポイントは次のディレクトリに保存されます。./Tutorial_Created_Data/cpu_project/project_cpu.runs/synth_1/top.dcp
注記: 合成 run のデフォルト名はsynth_1
、インプリメンテーション run のデフォルト名はimpl_1
です。create_run
コマンドを使用して、追加の run を作成できます。 -
launch_run
コマンドを使用してインプリメンテーションを実行します。配置前の最適化からビットストリーム生成までの完全な配置配線フローを、1 つのコマンドで実行できます。このスクリプト例では、ビットストリーム生成までのインプリメンテーションが実行されます (launch_run impl_1 -to_step write_bitstream
)。
phys_opt_design
プロパティにより、オプションの STEPS.PHYS_OPT_DESIGN.IS_ENABLED
がイネーブルになっています。ユーザー定義の条件によりインプリメンテーション コマンドをダイナミックに呼び出すことができる非プロジェクト フローとは異なり、プロジェクト フローの run は実行する前に設定する必要があります。そのため、非プロジェクト フローの例とは異なり、この例では配置後のタイミング スラック値をチェックせずに物理ロジック最適化がイネーブルに設定されています。
run の Tcl フック プロパティ STEPS.<STEPNAME>.TCL.PRE
および STEPS.<STEPNAME>.TCL.POST
を使用すると、各インプリメンテーション段階の前後にさまざまなレポートが生成できます。これらのプロパティを使用すると、run 構造を使用したときにフローで Tcl スクリプトをいつ実行するかを指定できます。詳細は、Tcl フック スクリプトの定義を参照してください。
インプリメンテーション run は別の Vivado セッションで実行されるので、Tcl 変数およびプロシージャをスクリプトで使用するには、それらをそのセッションで初期化する必要があります。これには、いくつかの方法があります。
- 方法 1
- Tcl 変数およびプロシージャを Vivado_init.tcl で定義します (Tcl スクリプトの初期化 を参照)。この方法で変数およびプロシージャを定義すると、すべての Vivado プロジェクトおよびセッションに適用されます。
- 方法 2
- 変数およびプロシージャを含む Tcl スクリプトを、run で使用する制約セットに追加します。デザインをメモリに読み込んだときに、制約の一部として読み込まれます。
- 方法 3
-
STEPS.OPT_DESIGN.TCL.PRE
で変数およびプロシージャを含む Tcl スクリプトを設定します。このスクリプトは、OPT_DESIGN
をイネーブルにした場合にのみ読み込まれます。デフォルトでは、true に設定されています。
先ほど示したスクリプト例では、方法 3 を使用しています。変数およびプロシージャを含む Tcl スクリプトは、インプリメンテーション段階で次のように指定されています。
set_property STEPS.OPT_DESIGN.TCL.PRE [pwd]/pre_opt_design.tcl [get_runs impl_1]
set_property STEPS.OPT_DESIGN.TCL.POST [pwd]/post_opt_design.tcl [get_runs impl_1]
set_property STEPS.PLACE_DESIGN.TCL.POST [pwd]/post_place_design.tcl [get_runs impl_1]
set_property STEPS.PHYS_OPT_DESIGN.TCL.POST [pwd]/post_phys_opt_design.tcl [get_runs impl_1]
set_property STEPS.ROUTE_DESIGN.TCL.POST [pwd]/post_route_design.tcl [get_runs impl_1]
インプリメンテーション run は、コンパイル Tcl スクリプトが実行されるディレクトリとは異なるプロジェクトのサブディレクトリで実行されるので、Tcl スクリプトは絶対パスで指定する必要があります。
-
pre_opt_design.tcl
############## pre_opt_design.tcl ################## set outputDir [file dirname [info script]]/Tutorial_Created_Data/cpu_project source [file dirname [info script]]/reportCriticalPaths.tcl # report_timing_summary -file $outputDir/post_synth_timing_summary.rpt report_utilization -file $outputDir/post_synth_util.rpt reportCriticalPaths $outputDir/post_synth_critpath_report.csv
最初の 2 行では、インプリメンテーション run の後の方のいくつかのスクリプトで使用される変数およびプロシージャを初期化します。次の 3 行では、タイミング レポートと使用率レポートを生成します。インプリメンテーションのはじめにタイミング解析を実行し、配置配線で使用されるタイミング制約をチェックし、大きな違反がないことを確認することが推奨されます。
reportCriticalPaths
レポートは、デザインのワースト パスに関する詳細を示します。この Tcl プロシージャについては、Tcl プロシージャの定義で詳細に説明します。 -
post_opt_design.tcl
############## post_opt_design.tcl ################## # Run custom script to report critical timing paths reportCriticalPaths $outputDir/post_opt_critpath_report.csv
outputDir
変数およびreportCriticalPaths
プロシージャは、同じ Vivado セッションの run で既に読み込まれているpre_opt_design.tcl
で定義されているので、このスクリプトでは定義する必要はありません。opt_design
の後にもタイミング レポートと使用率レポートを生成することが推奨されます。 -
post_place_design.tcl
############## post_place_design.tcl ################## report_clock_utilization -file $outputDir/clock_util.rpt
配置後、クロック リソースの使用率およびデバイスでの位置を確認できます。フローの後の方では解決できない大きなタイミング違反を検出するため、タイミング解析を実行することが推奨されます。
-
post_phys_opt_design.tcl
############## post_phys_opt_design.tcl ################## report_utilization -file $outputDir/post_phys_opt_util.rpt report_timing_summary -file $outputDir/post_phys_opt_timing_summary.rpt
配置後と同様、フローのこの段階でもタイミング レポートを確認することが重要です。
-
post_route_design.tcl
############## post_route_design.tcl ################## report_route_status -file $outputDir/post_route_status.rpt report_timing_summary -file $outputDir/post_route_timing_summary.rpt report_power -file $outputDir/post_route_power.rpt report_drc -file $outputDir/post_imp_drc.rpt write_verilog -force $outputDir/cpu_impl_netlist.v -mode timesim -sdf_anno true
配線後のタイミング解析では、配線済みの実際のネット遅延が使用されるので、タイミングのサインオフのため確認する必要があります。配線ステータス レポートには、配線問題の数が示されます。配線問題がある場合、DRC レポートを生成するとそれらの問題を特定するのに役立ちます。
注記: フック スクリプトでインプリメンテーション段階を実行している場合、Tcl 変数ACTIVE_STEP
を使用するとレポートのファイル名を固有にするなどを実行できます。変数ACTIVE_STEP
は、run 構造の使用中 Vivado により自動的にアップデートされます。詳細は、段階間でのフック スクリプトの共有 を参照してください。注記: 上記のスクリプトで配線後に生成される Tcl レポートのほとんどは、run でも自動的に生成されます。また、プロジェクト フローを使用している場合は、フローの各段階の後にデザイン チェックポイントも自動的に生成されるので、スクリプトでwrite_checkpoint
コマンドを呼び出す必要はありません。すべてのチェックポイントとデフォルトのレポートは、インプリメンテーション run ディレクトリにあります。./Tutorial_Created_Data/cpu_project/project_cpu.runs/impl_1/ top_opt.dcp top_placed.dcp top_physopt.dcp top_routed.dcp top_clock_utilization_placed.rpt top_control_sets_placed.rpt top_utilization_placed.rpt top_io_placed.rpt top_drc_routed.rpt top_power_routed.rpt top_route_status.rpt top_timing_summary_routed.rpt
インプリメンテーション run が完了したら、
open_run impl_1
コマンドを使用してインプリメント済みデザインをメモリに読み込むことができます。