Vivado 合成でデザインの階層を完全に保持するよう指定しない場合、合成中に一部、またはすべての階層をフラットにできます。詳細は、
『Vivado Design Suite ユーザー ガイド: 合成』 (UG901) の「合成設定の使用」にある -flatten_hierarchy
に関する情報を参照してください。
推奨: すべての階層レベルが暗示的な一致を示す * 文字を使用せずにスラッシュ (/) 文字を使用して明示的に記述されている場合、合成制約で完全に展開された階層名を使用してください。階層が変更された場合でも、最終的なネットリスト名と一致する可能性が高くなります。
たとえば、デザインのサブレベルに次のようなレジスタがあるとします。エラボレート済みデザインの例:
inst_A/inst_B/control_reg
合成中、このレジスタに特別な最適化は実行されないとすると、ツール オプションまたはデザイン構造によって、フラット名または階層名が得られます。
フラット ネットリストでのインスタンス名
inst_A/inst_B/control_reg (F)
階層ネットリストでのインスタンス名
inst_A/inst_B/control_reg (H)
フラット化された階層レベルを示すのにもスラッシュ (/) が使用されるので、見た目に違いはありませんが、メモリ内のオブジェクトをクエリすると違いがはっきりします。次のコマンドでは、F のネットリスト オブジェクトが返され、H のネットリスト オブジェクトは返されません。
% get_cells -hierarchical *inst_B/control_reg
% get_cells inst_A*control_reg
階層名に関連する問題を回避するため、AMD では次をお勧めします。
-
-hierarchical
オプションを指定せずにget_*
コマンドを使用します。 - エラボレートされたデザインに表示されるように、スラッシュ (/) を使用してすべての階層を区切ります。
-hierarchical
オプションなしの例:
- 次のコマンドは、フラット ネットリストと階層ネットリストのどちらでも機能します。
% get_cells inst_A/inst_B/*_reg % get_cells inst_*/inst_B/control_reg
- 次のようにすることもできます。
% get_cells -hier -filter {NAME =~ inst_A/inst_B/*_reg} % get_cells -hier -filter {NAME =~ inst_*/inst_B/control_reg}
注意:
階層セルでも同様に、合成を実行するときに階層ピンに制約を設定しないでください。また、組み合わせロジックの演算子を接続するネットに制約を設定しないでください。これらは LUT に結合され、ネットリストからなくなる可能性があります。
推奨: 制約を変更したら XDC ファイルを保存し、エラボレートされたデザインを読み込み直して、メモリ内の制約と XDC ファイルの制約が一致するようにしてください。合成後に、メモリ内の同じ合成 XDC を使用して合成済みデザインを読み込み、[Report Timing Summary] を使用してタイミング解析を実行します。
合成によりデザインが変換されているため、合成前の制約の一部は正しく適用されない可能性があります。これらの問題を解決するには、次の手順に従います。
- 合成済みネットリストに適用する新しい XDC 構文を検索します。
- その制約を、インプリメンテーションのみに使用する新しい XDC ファイルに保存します。
- 合成のみに使用する合成制約を別の XDC ファイルに移動します。