AR# 61599

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

説明

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

ソリューション

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

  • デザイン ソース
  • 制約
  • Tcl スクリプトおよびコマンド シーケンス
  • ツールおよびコマンド オプション
  • Vivado ソフトウェア バージョン
  • マルチスレッドの設定
  • オペレーティング システム
  • route_design -ultrathreads 引数の使用

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

特に Linux と Windows といった異なるオペレーティング システム間では一般に再現性のある結果が生成されますが、保証されるものではありません。

決定性に関する注記

「再現性のある」 (repeatable) および「決定的な」 (deterministic) という言葉は同義として頻繁に使用されますが、これは正しくありません。Vivado は並列実行にマルチスレッドを使用しますが、定義でいうところの非決定的な相互作用が生じます。ただし、Vivado 内の複数のスレッドを同期化するようにプログラムして、マルチスレッドの実行に再現性を持たせることができます。Vivado は、OS システム コールやメモリ管理など非決定的になるマルチスレッド以外のほかの要素を管理します。

 

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

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

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


 

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

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

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

 


 

各インプリメンテーション コマンドでは、ネットリストの一貫性を確保するために実行前にネットリストを自動的に並べ替え、ネットリストの相違によって結果の相違が生じないようにします。

再現性の最大化

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

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

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

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

set_param general.maxThreads 1

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

route_design -ultrathreads 引数の使用

ultrathreads は、配線実行時間を削減するために追加された引数です。 

これにより、実行時間の削減により再現性は増え、違いが出ます。


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

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

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

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

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

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

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

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

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

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

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


AR# 61599
日付 10/30/2018
ステータス アクティブ
種類 一般
デバイス 詳細 概略
ツール