KEEP
属性は、信号が削除されたりロジック ブロックに吸収されるような最適化が実行されないように指定します。この属性が設定された信号は保持され、ネットリストに含まれます。
たとえば、2 ビットの AND
ゲートの出力で別の AND
ゲートを駆動する信号に KEEP
制約を設定すると、信号は両方の AND
ゲートを含むより大きい LUT
には統合されません。
注意:
KEEP をほかの属性と共に使用する場合は注意が必要です。ほかの属性が KEEP 属性と競合する場合、通常 KEEP 属性が優先されます。
KEEP
は、タイミング制約ともよく使用されます。通常は最適化される信号にタイミング制約が設定されている場合、KEEP
を設定すると最適化されなくなり、正しいタイミング規則が使用されます。
注記:
KEEP
属性は、モジュールまたはエンティティのポートではサポートされません。特定のポートを保持する必要がある場合は、 -flatten_hierarchy none
を使用するか、モジュールまたはエンティティ自体に DONT_TOUCH
を設定します。注意:
ロードレス信号で
KEEP
属性を使用する場合は注意が必要です。合成でこれらの信号が保持されることで、フローの後半で問題が発生します。次に例を示します。
- ある信号に
MAX_FANOUT
属性が設定されており、この信号で駆動される信号にKEEP
属性が設定されている場合、KEEP 属性が設定されている信号ではファンアウト複製は実行されません。 -
RAM_STYLE="block"
と設定されている場合は、その RAM の一部になるはずのレジスタにKEEP
属性が設定されていると、そのKEEP
属性によってブロック RAM は推論されなくなります。
サポートされる KEEP
値は、次のとおりです。
- TRUE
- 信号を保持します。
- FALSE
-
Vivado 合成の最適化を可能にします。
FALSE
を使用しても、信号が無条件に削除されることはありません。デフォルト値はFALSE
です。
この属性は信号、レジスタ、ワイヤに設定できます。
推奨: この属性は RTL のみで設定します。保持する必要のある信号が XDC ファイルが読み込まれる前に最適化で削除されてしまうことがよくあるので、この属性が必ず使用されるように RTL で設定します。
注記:
KEEP
属性を使用しても、配置配線では信号は保持されません。DONT_TOUCH
属性を使用してください。