AR# 61599

|

Vivado インプリメンテーション - ツールの再現性について

説明

ツールの同一入力に対して、再現性のある Vivado 結果を得られますか。

ソリューション

ほとんどの場合は、再現性のある結果を得られます。次が同一の run 間では、Vivado によって同じ結果が生成されます。

  • デザイン ソース
  • 制約
  • Tcl スクリプトおよびコマンド シーケンス
  • ツールおよびコマンド オプション
  • Vivado ソフトウェア バージョン
  • オペレーティング システム

これは、HDL 合成からビットストリーム生成までを含むデザイン フローのすべてに適用されます。たとえば、同じシステムで繰り返し実行したり、同様の構成のマシンで実行すると、ビルド スクリプトから同じ結果が生成されるはずです。

通常オペレーティング システム (OS) 間で再現性のある結果が生成されますが、Linux と Windows といった異なる OS 間では確実ではありません。

 

既知の例外

一部のフローおよびツール オプションでは、再現性が得られない可能性があります。次が含まれます。

  • route_design -ultrathreads オプション: このオプションでは、再現性の代わりに高速なコンパイルが実行されます。
  • place_design -ultrathreads オプション: このオプションでは、配置で SLR マルチスレッドをイネーブルにできますが、オプションを使用しない配置と比べたときと異なる結果に可能性があります。
    set_param general.maxThreads を使用して割り当てた最大スレッド数も、place_design -ultrathreads を使用するときに再現性に影響する可能性があります。
    スレッドの最大数がデバイスの SLR 数より少ない場合、SLR ごとのマルチスレッドがディスエーブルされるので、スレッドの最大数がデバイスの SLR 数以上のときの配置とは異なる結果になります。
    2020.2 リリースでは、配置のデフォルト設定または指示子オプションの RuntimeOptimized および Quick を使用するときにデフォルトで place_design -ultrathreads がイネーブルになっていることに注意してください。今後のリリースでは、ウルトラスレッドをイネーブルにする指示子が追加される可能性があります。
  • 配線済みのチェックポイント (DCP) を読み込んで配線後の phys_opt_design を実行する場合と、Vivado のメモリに既に格納されているデザインで route_design を実行した直後に配線後の phys_opt_design を実行した場合では、結果が異なる場合があります。

 

再現性の問題が発生しているかどうかを判断する方法

それぞれの run で配線後のタイミング結果が異なるという状況が見られるのが、最も一般的です。再現性が疑わしいためにツールの入力をチェックし、すべて同一であることを確認したら、チェックサムを使用して相違をさらに検証できます。Vivado では、デザイン ネットリストと物理データに基づくシグナチャであるチェックサムが、各インプリメンテーション コマンドの中間ステージごとにログにレポートされます。異なる run 間でチェックサムを比較し、チェックサムの不一致を見つけることにより、結果の相違が生じている箇所を特定できます。

例: 下のチェックサムから相違が生じ始めたため、収束できなくなっています。入力がすべて同じである場合、再現性の問題が発生している可能性が高いです。

 


 

 

チェックポイントとメモリ内 run との比較

同等のメモリ内デザイン フローと比較すると、チェックポイントでは再現性のある結果が通常は生成されます。1 つはメモリ内でデザイン フロー全体を実行し、もう 1 つは配置されたチェックポイントをメモリ内フローから使用して phys_opt_design にフローを再入力する、次のようなコマンド シーケンスがあるとします。

これら 2 つの run では、同じ結果が得られるべきです。open_checkpoint コマンドの後に相違を並べ替えるネットリストが原因で、チェックサムが異なる場合がありますが、最初のインプリメンテーション コマンドの phys_opt_design 以降はチェックサムが収束するはずです。

 


 

 

各インプリメンテーション コマンドでは、ネットリストの一貫性を確保するために実行前にネットリストを自動的に並べ替え、ネットリストの相違によって結果の相違が生じないようにします。メモリ内フローとチェックポイント フロー間で結果が異なることがまれにありますが、この 2 つのフローでも結果で再現性が得られます。

 

再現性が得られない場合のレポート

ソリューション セクションに記載されているとおりに同じ入力で再現性が得られなかった場合は、サービス リクエストを作成し、問題が発生したテストケースを提供してください。

テストケースなしでは問題を特定して修正することが困難になることがありますが、問題の解決に役立つよう可能な限り情報を提供してください。

Linux と Windows 間で再現性が得られない問題が発生することが考えられますが、これに対応する推奨ソリューションとして Vivado の run を Linux のみまたは Windows のみに制限します。

再現性のない場合の回避策

再現性が得られない場合で、デザイン環境において再現性が極めて重要な場合は、次を実行すると再現性を最大化できます。

シングル スレッド モードで実行する

run 間で異なる数の CPU を使用している場合、同じマシンおよび OS を使用して実行しても、同時スレッドでは異なる順序でオペレーションが実行され、結果の相違が生じる可能性があります。

シングル スレッド モードで実行するには、次を使用します。

 

set_param general.maxThreads 1

 

これにより、マルチスレッドが無効になり、関連する再現性の問題が解消されます。

既知の再現性のないソースを排除する

再現性での既知の例外のセクションを参照し、そのような状況が存在しないことを確認します。

同じマシンで実行するか、同じ OS を使用するマシンで実行する

コアが機能してシステム コールがインプリメントされる方法はオペレーティング システムごとに異なるため、特に Windows と Linux 間では再現性が得られない問題が生じる可能性があります。

次を実行すると、この問題が生じる可能性をさらに低くできます。

1) 次のシナリオをすべて削除するように環境を微調整する

  • 同じオペレーティング システムの異なるバージョンを使用する
  • 異なるサービス パック レベルを使用する (Windows)
  • 異なるディストリビューションまたはパッチ レベルを使用する (Linux)

2) コンピューティング ハードウェアの相違をなくす

  • 同一で一般的な物理および仮想メモリ容量を使用します。
  • 同じプロセッサ アーキテクチャおよびコア数を使用します。
  • 仮想マシンを使用する場合は、同一の構成を使用していることを確認します。

 

AR# 61599
日付 02/05/2021
ステータス アクティブ
種類 一般
デバイス
ツール
People Also Viewed