Vivado ツールの FPGA 合成およびインプリメンテーション結果の管理 - 2019.2 Japanese

Vitis 統合ソフトウェア プラットフォームの資料: アプリケーション アクセラレーション開発 (UG1393)

Document ID
UG1393
Release Date
2020-02-28
Version
2019.2 Japanese

概要

ヒント: このトピックでは、 『UltraFast 設計手法ガイド (Vivado Design Suite 用)』 (UG949) に説明されている Vivado Design Suite ツールおよび設計手法を理解していることが必要です。

Vitis 環境では、ほとんどの場合、CU をハードウェア プラットフォームにリンクし、FPGA バイナリ (xclbin) を生成する際、プログラマブル ロジック領域の合成およびインプリメンテーションのプロセスは完全に隠されています。アプリケーション開発者はハードウェア開発プロセスを意識する必要はなく、ロジックの配置や配線遅延などの制約を管理する必要もありません。Vitis ツールでは、FPGA インプリメンテーション プロセスのほとんどが自動化されています。

ただし、特に大型デザインをインプリメントするときなど、Vitis コンパイラで運用される合成およびインプリメンテーション プロセスを一部制御する必要がある場合もあります。そのため、v++ 設定ファイルまたはコマンド ラインでオプションを指定することにより、Vitis ツールでこれらを制御できるようになっています。次に、Vivado 合成およびインプリメンテーション結果を制御する方法の一部を示します。

  • --vivado オプションを使用して Vivado ツールを管理する。
  • -to_step および -from_step オプションを使用して、コンパイルまたはリンクを特定の段階まで実行し、デザインを手動で操作して、その段階から再開する。
  • Vivado プロジェクトをインタラクティブに編集し、その結果を FPGA バイナリの生成に使用する。

--vivado および --advanced オプションの使用

--vivado オプション (--vivado オプション を参照) および --advanced オプション (--advanced オプション を参照) を使用すると、標準の Vivado 合成またはインプリメンテーションにさまざまな制御を適用できます。

  1. カスタム デザイン制約またはスクリプト化された操作を含む Tcl スクリプトを渡す。

    XDC デザイン制約をデザインのオブジェクトに割り当てる Tcl スクリプトを作成し、その Tcl スクリプトを合成およびインプリメンテーション段階の PRE および POST Tcl スクリプト プロパティを使用して Vivado ツールに渡すことができます。Tcl スクリプトの詳細は、 『Vivado Design Suite ユーザー ガイド: Tcl スクリプト機能の使用』 (UG894) を参照してください。合成段階は 1 つですが、インプリメンテーションには、 『Vivado Design Suite ユーザー ガイド: インプリメンテーション』 (UG904) に説明されているように複数の段階があります。Tcl スクリプトを Vivado ツールである段階の前に実行するか (PRE)、後に実行するか (POST) を指定できます。Tcl スクリプトを割り当てることができる段階は、SYNTHESISINIT_DESIGNOPT_DESIGNPLACE_DESIGNROUTE_DESIGNWRITE_BITSTREAM です。

    ヒント: さらに、--vivado.prop run.impl_1.steps.phys_opt_design.is_enabled=1 オプションを使用してイネーブルにできるオプションの段階がいくつかあります。イネーブルにすると、これらの段階にも Tcl PRE および POST スクリプトを指定できるようになります。
    次に、Tcl PRE および POST スクリプトの割り当て例を示します。
    --vivado.prop run.impl_1.STEPS.PLACE_DESIGN.TCL.PRE=/…/xxx.tcl
    この例では、PLACE_DESIGN 段階の前に実行するスクリプトを指定しています。コマンド ラインの各要素は、次のとおりです。
    • --vivado: Vivado ツールの指示子を指定する v++ のコマンド ライン オプションです。
    • prop プロパティ設定を渡すことを示すキーワードです。
    • run.: run プロパティを渡すことを指定するキーワードです。
    • impl_1.: run の名前です。
    • STEPS.PLACE_DESIGN.TCL.PRE: 指定する run プロパティです。
    • /.../xx.tcl: プロパティ値を指定します。
    ヒント: --advanced および --vivado オプションはどちらも v++ コマンド ラインで指定するか、設定ファイルで指定してその設定ファイルを --config オプションで指定します。上記の例はコマンド ラインで指定する方法、下の例は設定ファイルで指定する方法を示します。詳細は、Vitis コンパイラの設定ファイル を参照してください。
  2. Run、ファイル、ファイルセット デザイン オブジェクトに指定する。
    これは上記の Tcl スクリプトを渡すのと似ていますが、この場合は複数のデザイン オブジェクトの異なるプロパティに値を渡します。たとえば、Performance_Explore などの特定のインプリメンテーション ストラテジを使用するには、次のようにプロパティを定義します。
    [vivado]
    prop=run.impl_1.STEPS.OPT_DESIGN.ARGS.DIRECTIVE=Explore
    prop=run.impl_1.STEPS.PLACE_DESIGN.ARGS.DIRECTIVE=Explore
    prop=run.impl_1.STEPS.PHYS_OPT_DESIGN.IS_ENABLED=true
    prop=run.impl_1.STEPS.PHYS_OPT_DESIGN.ARGS.DIRECTIVE=Explore
    prop=run.impl_1.STEPS.ROUTE_DESIGN.ARGS.DIRECTIVE=Explore
    上記の例では、インプリメンテーション run の STEPS.XXX.DIRECTIVE プロパティに Explore という値を割り当てています。これらのプロパティを定義する構文は、次のとおりです。
    <object>.<instance>.property=<value>
    説明:
    • <object>: デザイン run、ファイル、またはファイルセット オブジェクトを指定します。
    • <instance>: オブジェクトの特定のインスタンスを指定します。
    • <property>: 割り当てるプロパティを指定します。
    • <value>: プロパティの値を指定します。
  3. パラメーターをツールに渡して処理を制御します。
    --vivado オプションでも、Vivado ツールにパラメーターを渡すことができます。パラメーターは、ツールを起動する前にツールの機能または動作を設定します。パラメーターを指定する構文は、次のとおりです。
    --vivado.param <object><parameter>=<value>

    キーワード param は、デザイン オブジェクトのプロパティではなく、Vivado ツールのパラメーターを渡すことを示します。適用するオブジェクト (<object>)、指定するパラメーター (<parameter>)、割り当てる値 (<value>) も指定する必要があります。

    次の例では、現在の Vivado プロジェクト writeIntermedateCheckpoints を渡しており、値は 1 でこのパラメーターをイネーブルにしています。
    --vivado.param project.writeIntermediateCheckpoints=1
  4. 合成およびインプリメンテーション中に生成されるレポートを管理する。
    重要: Vivado ツールで生成されるレポートをカスタマイズする際、v++ コマンド ラインで --save-temps も指定し、合成およびインプリメンテーション中に生成される一時ファイルおよびレポートが保存されるようにします。
    また、Vitis ツールのビルド プロセスの一部として実行する際は、Vivado ツールで生成される標準レポート以外の追加レポートを生成および保存すると有益な場合があります。生成されるレポートをカスタマイズするには、--advanced.misc オプションを次のように使用します。
    [advanced]
    misc=report=type report_utilization name synth_report_utilization_summary steps {synth_design} runs {__KERNEL__} options {}
    misc=report=type report_timing_summary name impl_report_timing_summary_init_design_summary steps {init_design} runs {impl_1} options {-max_paths 10} 
    misc=report=type report_utilization name impl_report_utilization_init_design_summary steps {init_design} runs {impl_1} options {} 
    misc=report=type report_control_sets name impl_report_control_sets_place_design_summary steps {place_design} runs {impl_1} options {-verbose} 
    misc=report=type report_utilization name impl_report_utilization_place_design_summary steps {place_design} runs {impl_1} options {} 
    misc=report=type report_io name impl_report_io_place_design_summary steps {place_design} runs {impl_1} options {} 
    misc=report=type report_bus_skew name impl_report_bus_skew_route_design_summary steps {route_design} runs {impl_1} options {-warn_on_violation} 
    misc=report=type report_clock_utilization name impl_report_clock_utilization_route_design_summary steps {route_design} runs {impl_1} options {} 
    
    コマンド ラインの構文は、次の例を使用して説明します。
    misc=report=type report_bus_skew name impl_report_bus_skew_route_design_summary steps {route_design} runs {impl_1} options {-warn_on_violation} 
    
    • misc=report=: --advanced.misc オプション (--advanced オプション を参照) を指定し、Vivado ツールのレポート設定を定義します。残りのコマンド ラインは、 『Vivado Design Suite Tcl コマンド リファレンス ガイド』 (UG835) に説明されている create_report_config Tcl コマンドのオプションを、名前と値のペアで指定しします。
    • type report_bus_skew: -report_type オプションに関連しており、レポート タイプを report_bus_skew に指定します。ほとんどの report_* Tcl コマンドをレポート タイプとして指定できます。
    • name impl_report_bus_skew_route_design_summary: -report_name オプションに関連しており、レポートの名前を指定します。これはレポートのファイル名ではありません。レポート名はツールで自動生成されるので、通常このオプションはスキップできます。
    • steps {route_design}: -steps オプションに関連しており、レポートを適用する合成およびインプリメンテーション段階を指定します。レポートが各段階で再生成されるようにレポートを複数の段階で使用するよう指定できます。その場合、レポート名は自動的に付けられます。
    • runs {impl_1}: -runs オプションに関連しており、レポートを適用するデザイン run の名前を指定します。
    • options {-warn_on_violation}: レポートを生成するときに使用する report_* Tcl コマンドのオプションを指定します。この例では、-warn_on_violationreport_bus_skew コマンドの機能です。
      重要: 指定したオプションが指定したレポート タイプに正しく適用可能なものであることはチェックされません。無効なオプションを指定すると、レポートが実行されたときにエラーが返されます。

--to_step または --from_step の実行

重要: --to_step および --from_step オプションはインクリメンタルなオプションで、指定した箇所からビルドを再開するのに --from_step を使用して Vitis コンパイラを起動する場合と、ビルドを開始するのに --to_step を使用する場合に、同じプロジェクト ディレクトリを使用する必要があります。

Vitis コンパイラでは、ビルド プロセスを指定した段階で停止し、デザインまたはファイルを手動で変更して、指定した段階からビルドを再開できます。Vitis コンパイラの --to_step はビルド プロセスを指定した段階まで実行することを指定し、--from_step はビルド プロセスを開始する段階を指定します (Vitis コンパイラの一般オプション を参照)。

--list_steps オプションを使用すると、特定のビルド ターゲットのコンパイルまたはリンクで指定可能な段階がリストされます。たとえば、ハードウェア ビルドのリンク プロセスの段階をリストするには、次のコマンドを使用します。
v++ --list_steps --target hw --link

このコマンドを実行すると、Vitis コンパイラのハードウェア ビルドのリンク プロセスで実行されるデフォルトの段階とオプションの段階がリストされます。デフォルトの段階には、ssystem_link、vpl、vpl.create_project、vpl.create_bd、vpl.generate_target、vpl.synth、 vpl.impl.opt_design、vpl.impl.place_design、vpl.impl.route_design、vpl.impl.write_bitstream などがあります。

オプションの段階には、vpl.impl.power_opt_design、vpl.impl.post_place_power_opt_design、vpl.impl.phys_opt_design、vpl.impl.post_route_phys_opt_design などがあります。
ヒント: オプションの段階は、--from_step または --to_step で指定する前にイネーブルにする必要があります。たとえば、PHYS_OPT_DESIGN 段階をイネーブルにするには、設定ファイルに次を含めます。
[vivado]
prop=run.impl_1.steps.phys_opt_design.is_enabled=1

インタラクティブ設計での Vivado IDE の起動

--to_step コマンドを使用すると、たとえばビルド プロセスを Vivado 合成まで実行し、Vivado IDE でプロジェクトを開いてデザインの配置配線を手動で実行できます。これには、次のコマンドを使用します。
v++ --target hw --link --to_step vpl.synth --save-temps --platform <PLATFORM_NAME> <XO_FILES>
ヒント: 上記の例に示すように、--to_step を使用する場合は、--save-temps も指定して、必要な一時ファイルを保存する必要があります。

このコマンドは、ハードウェア ビルドのリンク プロセスを指定し、ビルドを合成段階まで実行して、ビルド プロセスで生成される一時ファイルを保存します。

Vitis コンパイラでビルドされたプロジェクト (ビルド ディレクトリの _x/link/vivado/vpl/prj) で直接 Vivado ツールを起動できます。Vivado IDE をこのモードで起動すると、合成 run またはインプリメンテーション run を開いてプロジェクトを制御できます。タイミング クロージャを達成するため、必要に応じて run の詳細を変更し、異なるインプリメンテーション方法を試してみます。結果はデザイン チェックポイント (DCP) として保存して、Vitis 環境で FPGA バイナリを生成するのに使用できます。

Vivado IDE 内で DCP を保存したら、ツールを閉じて、Vitis 環境に戻ります。v++ コマンド ラインで以前にインプリメントされた DCP ファイルを使用して xclbin を生成するには、--reuse_impl オプションを使用します。

重要: --reuse_impl オプションはインクリメンタルなビルド オプションで、指定した --reuse_implVitis コンパイラを使用した場合と、--to_step でビルドを開始した場合で同じプロジェクト ディレクトリを使用する必要があります。
次のコマンドは、Vivado ツールからの指定した DCP ファイルを使用してリンク プロセスを実行し、入力ファイルから project.xclbin を作成します。
v++ --link --platform <PLATFORM_NAME> -o'project.xclbin' project.xo --reuse_impl ./_x/link/vivado/routed.dcp

その他の Vivado オプション

次に、v++ コマンド ラインまたは設定ファイルで使用可能な追加のオプションの一部を示します。

  • --export_script/--custom_script: HLS Tcl スクリプトを編集および使用してコンパイル プロセスを変更します。
  • --interactive: v++ 環境内から Vivado IDE をプロジェクトを読み込んで起動します。
  • --remote_ip_cache: Vivado 合成用のリモート IP キャッシュ ディレクトリを指定します。
  • --no_ip_cache: Vivado 合成の IP キャッシュをオフにします。これにより、キャッシュ データが消去され、ビルド プロセス中にすべての IP が再合成されます。