サンプル スクリプトの詳細 - 2022.1 日本語

Vivado Design Suite ユーザー ガイド: Tcl スクリプト機能の使用 (UG894)

Document ID
UG894
Release Date
2022-06-08
Version
2022.1 日本語
  1. create_project コマンドでプロジェクトを作成します。プロジェクト ディレクトリおよびターゲット デバイスが指定されています。指定したプロジェクト ディレクトリが存在しない場合は、自動的に作成されます。

    この例では、さまざまなレポートを保存する出力ディレクトリは、プロジェクト ディレクトリと同じです。

  2. プロジェクトで使用されるすべてのファイルを宣言し、プロジェクトに追加します。これには、add_files コマンドを使用します。ファイルをプロジェクトに追加すると、特定のファイルセットに追加されます。ファイルセットは、目的別にファイルをグループ化するコンテナーです。このスクリプト例では、ほとんどのファイルはデフォルトのファイルセット (sources_1) に追加されますが、Verilog テストテストベンチ cpu_tb.v のみはデフォルトのシミュレーション ファイルセット sim_1 に追加されます。

    ファイルは、import_files コマンドを使用してプロジェクト ディレクトリにもコピーします。これにより、プロジェクトでソース ファイルのローカル コピーが使用され、元のソース ファイルは参照されません。

  3. バックグランドで合成 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 を作成できます。
  4. 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 コマンドを使用してインプリメント済みデザインをメモリに読み込むことができます。