AR# 51418

Vivado - 合成前に HDL ソースを変更する Tcl スクリプトを実行すると合成が実際には完了しているのに更新が必要と表示される

説明

HDL ソースを変更する Tcl スクリプトがあります (VHDL ソース ファイルのコメントに現在の日付、時間、バージョンおよびビルド番号を追加するなど)。

合成設定の [Tcl.pre] オプションで、このスクリプトが Vivado 合成前に自動的に実行されるように設定しています。

スクリプトは正しく実行し、合成は完了しましたが、合成が問題なく完了したにもかかわらず、Vivado GUI の合成ステータスには「Out of Date」 (更新が必要) と表示されます。

このため、合成のステータスを手動で変更しないとインプリメンテーションを実行できません。

ステータスが「Out of Date」になるのはなぜですか。[Tcl.pre] オプションを使用してスクリプトを実行し、かつこの問題を回避する方法はありますか。

ソリューション

Vivado の tcl.pre/tcl.post コマンドは、特定の Tcl コマンドをできるだけ近くにラップするように設計されています。 

このため、ステータスのチェックは、合成全体 (tcl.pre および tcl.post スクリプト コマンドも含む) の開始時の HDL ソース ファイルの状態に基づいています。 

コマンド開始後にソース ファイルが変更されたため、コマンドのステータスは「Out of Date」に設定されます。

今の段階では、次のオプションがありますが、すべて手動設定になります。

  • 合成が完了した後に、Tcl コンソールで「set_property needs_refresh false [get_runs synth_1]」を実行します。
  • Tcl コンソールで、上記のコマンドを含む Tcl コマンドを実行します。
  • [Synthesis and Implementation Out-of-Date] という文字列の右上にある [more info] をクリックし、開いたウィンドウで [Force up-to-date] をクリックします。
  • 変更を加えたけれどソース ファイルのタイムスタンプが変更にならなくてもかまわないのであれば、元のファイルのタイムスタンプをそのまま使用すると、Vivado ではファイルが古いことが認識されません。
    1. ソース ファイルを変更する前に、元のタイムスタンプを確認します。たとえば、「set temp_time [file mtime $pkg_file]」を実行します。
    2. ファイルに変更を加えます。
    3. 元のファイルのタイムスタンプに戻します。たとえば、「file mtime $pkg_file $temp_time」を実行します。
    • 注意: この方法を使用する場合は、機能的な変更をソース ファイルに加えないでください。Vivado エディターでファイルを表示する場合は、ファイルをアップデートした後にファイルを読み込み直すように指示が出ません。

注記: 合成設定の Tcl.post は、合成ステップの一部とみなされるので、ステップはアップデートはされません。

AR# 51418
日付 05/12/2017
ステータス アクティブ
種類 一般
ツール