配線の前に大きなホールド違反を修正 - 2023.2 日本語

Versal アダプティブ SoC システム統合および検証設計手法ガイド (UG1388)

Document ID
UG1388
Release Date
2023-11-15
Version
2023.2 日本語

ホールド違反が大きい (> 0.4 ns) パスでは、デザインを配線する前にホールド違反を削減しておくと、配線ツールで配線迂回を使用して残りの小さなホールド違反を修正しやすくなるので、有益です。ホールド違反の修正が配線密集の原因である場合は、配線の前にホールド違反を削減すると有益であることがあります。phys_opt_design のホールド違反の修正オプションは、それぞれ異なるリソースを使用し、特定のターゲットがあります。デバイスの使用率および必要な効果によって、適切なオプションを使用することが重要です。ホールド違反の修正のために phys_opt_design を実行する前に、デザインのクロックツリーがスキューを最小限に抑えるために適切に制約され手入ることを確認してください。

順次エレメントの間に立ち下がりエッジでトリガーされるレジスタを挿入すると、タイミング パスが 2 つの 1/2 周期のパスに分割され、ホールド違反を大幅に削減できます。立ち下がりエッジでトリガーされるレジスタを挿入するには、-insert_negative_edge_ffs インプリメンテーション段階で phys_opt_design オプションを使用します。この最適化は、フリップフロップ ドライバーを含み、順次エレメント間の LUT 数が 1 つまでのパスのみに適用されます。パスの最適化後のセットアップ スラックが十分に大きな正の値になる必要があり、そうならない場合は最適化は破棄されます。

次の図に、CMAC ブロックを駆動するフリップフロップの後に挿入された立ち下がりエッジでトリガーされるレジスタを示します。最適化の前は、フリップフロップとドライバーの間のホールド スラックは -0.492 ns でした。立ち下がりエッジでトリガーされるレジスタ (青でハイライト) を挿入すると、セットアップ スラックおよびホールド スラックの両方が正になります。

図 1. 立ち下がりエッジでトリガーされるレジスタを挿入してホールド違反を修正

データパスに LUT1 遅延を挿入してホールド違反を削減することもできます。LUT1 遅延を挿入するには、phys_opt_design インプリメンテーション段階で次のオプションを使用します。

-hold_fix
LUT1 の挿入を実行し、十分な正のセットアップ スラックがある最大の WHS 違反のパスのみを考慮します。
-aggressive_hold_fix
LUT1 の挿入を -hold_fix オプションよりも積極的に実行します。-aggressive_hold_fix オプションは多くのホールド違反パスに LUT1 を挿入することを考慮し、デザインの THS は大幅に削減しますが、LUT の使用率は増加します。
注記: phys_opt_design -directive ExploreWithAggressiveHoldFix 指示子は、Explore 指示子と -aggressive_hold_fix オプションを 1 つの最適化で実行します。

次の図では、ILKN ブロックを駆動するフリップフロップの後に LUT1 遅延が挿入されています。最適化の前は、フリップフロップから ILKN のパスがデザインの WHS パスで、ホールド スラックは -0.277 ns でした。LUT1 遅延 (青色) を挿入すると、ホールド スラックが正になり、セットアップ スラックは正のままになります。

図 2. LUT1 遅延を挿入してホールド違反を修正