制約の適用範囲の限定には、ポートを除き、SDC (Synopsys Design Constraint) 標準の一部である current_instance
が使用されます。current_instance
コマンドでデザインの下位階層を指定すると、オブジェクト クエリ コマンドではその階層レベルとその下位階層に含まれるオブジェクトのみが返されます。
ただし、タイミング クロック オブジェクトおよびネットリスト ポートは例外です。
- タイミング クロックは、
create_clock
またはcreate_generated_clock
で定義されます。これらのクロックは、current_instance の設定にかかわらず、デザイン全体でアクセスできます。get_clocks
コマンドを使用すると、現在のインスタンスに含まれないクロックまたは現在のインスタンスを越えて伝搬されるクロックをクエリできます。ザイリンクスでは、適用範囲が限定された制約を作成する際、クロックが現在のインスタンスに完全に含まれていない場合は、クロックにタイミング例外を定義することはお勧めしていません。クロックを XDC で参照できるようにするには、クロックが既に定義されている必要があるので、プロジェクトの XDC ファイルの順序を変更する必要がある場合があります。 -
get_ports
コマンドを使用すると、current_instance
コマンドで下位インスタンスを設定していても最上位ポートを取得できますが、read_xdc -ref
/-cells
コマンドで下位インスタンスに設定された XDC ファイルを読み込む場合や、SCOPED_TO_REF/SCOPED_TO_CELLS ファイル プロパティを設定した後にデザインを読み込んだ場合、get_ports
コマンドの動作は異なります。-
get_ports
で使用されるポート名は、最上位ポート名ではなく、指定されているインスタンス インターフェイスのポート名です。 - 指定されているインスタンス ポートがデザインの階層を介して最上位ポートに直接接続されている場合、
get_ports
コマンドで最上位ポートが返され、制約は最上位ポートに適用されます。 - 指定されているインスタンス ポートと最上位ポートの間に I/O やクロック バッファーなどの最下位セルがある場合は、
get_ports
コマンドはget_pins
コマンドになり、指定されている階層インスタンス ピンが返されます。
-
Vivado Design Suite IP の制約ファイルを読み込む際には、常に XDC の制約適用範囲メカニズムが使用されます。図 1 および図 2 に、IP レベルの XDC がこの方法で読み込まれる場合に get_ports コマンドがどのように処理されるかの例を示します。
図 1 では、I/O バッファーが IP 内にインスタンシエートされ、IP インターフェイス ピンがその階層に関係なく最上位ポートに直接接続されています。IP の XDC が適用されると、get_ports
コマンドの引数は自動的に最上位ポートに置き換えられます。
これにより、IP レベルに LOC または IOSTANDARD のような物理制約を設定でき、それが必要な最上位ポートに配置されるようになります。IP レベルで、デザインの最上位ポート名を指定する必要はありません。このコマンドは自動的に最上位ポートに置き換えられます。
次の図では、IP に I/O バッファーが含まれないので、合成エンジンは IP インターフェイス ピンと最上位ポート間に 1 つの I/O バッファーを推論します。その結果、XDC が適用されると、get_ports は IP インターフェイス ピン (階層ピンなど) の get_pins に変換されます。
この機能は、IP のインターフェイスに制約を作成する際や、最上位デザインの名前を知らずにサブレベル モジュールを作成する際に有益です。
制約適用範囲が指定されている XDC ファイルに、最上位ポートにのみ適用可能な制約が含まれているのに、IP インスタンスが最上位ポートには直接接続されていない場合、Vivado Design Suite で XDC を読み込むときにエラーが発生します。たとえば、次の制約は最上位ポートのみに適用可能で、階層ピンには適用できません。
-
set_input_delay
/set_output_delay
-
set_property IOSTANDARD