KEEP および DONT_TOUCH は、デザインをデバッグする際に有益な属性です。これらの属性が配置されたオブジェクトは、最適化で削除されません。
- KEEP 属性は合成ツールで使用され、ネットリストでプロパティとしては渡されません。KEEP 属性は特定の信号を保持するためのもので、たとえば、合成中に特定の信号に対する特定の最適化をオフにします。
- DONT_TOUCH 属性は、合成ツールで使用された後、配置配線ツールにも渡されるので、オブジェクトは最適化されません。
これらの属性の設定には注意が必要です。
- RAM の出力を受信するレジスタに KEEP 属性を設定すると、レジスタが RAM に統合されなくなり、ブロック RAM が推論されなくなります。
- 上の階層のトライステート出力または双方向信号を駆動する階層に、これらの属性を設定しないでください。駆動信号とトライステート状態がこの階層レベルにある場合、IOBUF を作成するには階層を変更する必要があるため、IOBUF が推論されません。
- 最適化をディスエーブルにする属性を使用すると、多くの場合、大型の消費電力の大きい回路になります。AMDでは、これらの制御はできるだけ使用しないようにし、不要になったら削除することをお勧めします。
また、DONT_TOUCH 属性を信号に設定するか階層レベルに設定するかで違いがあります。
- この属性が信号に設定されている場合、その信号が保持されます。
- この属性が階層レベルに設定されている場合、階層の境界は最適化されず、階層を介する定数の伝搬は実行されませんが、その階層レベル内での最適化は実行されます。