KEEP
または KEEP_HIERARCHY
の代わりに DONT_TOUCH
属性を使用してください。DONT_TOUCH
属性は KEEP
または KEEP_HIERARCHY
属性と同じように機能しますが、DONT_TOUCH
は KEEP
および KEEP_HIERARCHY
とは異なり、配置配線にフォワード アノテートされるので、ロジック最適化で削除されることはありません。
注意:
KEEP
および KEEP_HIERARCHY
と同様、DONT_TOUCH
の使用には注意が必要です。ほかの属性が DONT_TOUCH
属性と競合する場合は、DONT_TOUCH
属性が優先されます。
DONT_TOUCH
の値は TRUE/FALSE
または yes/no
です。この属性は信号、モジュール、エンティティ、コンポーネントに設定できます。
注記: モジュールまたはエンティティのポートには設定できません。
DONT_TOUCH
特定のポートを保持する必要がある場合は、-flatten_hierarchy none を使用するか、モジュールまたはエンティティ自体に DONT_TOUCH
を設定します。通常は、DONT_TOUCH
属性は RTL にのみ設定する必要があります。XDC ファイルが読み込まれる前に、保持する必要のある信号が最適化で削除されてしまうことがあります。この属性を RTL で設定しておけば、必ず適用されます。ただし、DONT_TOUCH
が XDC ファイルに設定した方がいいユース ケースが 1 つあります。これは、DONT_TOUCH
が RTL で yes
で、RTL を変更せずに取り除く必要がある場合です。この場合、XDC で DONT_TOUCH
を no
に設定し、RTL で同じ信号の DONT_TOUCH
を yes
に設定すると、RTL を変更しなくてもその属性を削除できます。
注記: XDC を使用して RTL で設定された
DONT_TOUCH
を削除した場合、インプリメンテーション フローで同じ XDC が読み込まれても、該当の信号が削除されているので、合成後に警告メッセージが表示されることがあります。これらの警告は無視しても問題はありません。ただし、合成のみとマークされた XDC に DONT_TOUCH
属性を指定すると、それらをバイパスできます。