クロック周期が同じで位相シフトのある 2 つのクロック ドメイン間で、タイミング制約を定義する必要がある場合があります。その場合、タイミング エンジンで使用されるデフォルトのセットアップ関係およびホールド関係を理解しておくことが重要です。注意深く調整しないと、2 つのクロック間の位相シフトにより、これらのクロック ドメイン間のロジックが過剰に制約される可能性があります。
次のような 2 つのクロックがあるとします。
- 2 つのクロック
CLK1
とCLK2
の波形は同じ。 -
CLK2
は +0.3 ns シフトされている。
タイミング エンジンでは、セットアップ関係を算出するため、両方の波形のすべてのエッジが検出され、最も厳しい制約となるソース クロックとデスティネーション クロックの 2 つのエッジが選択されます。
クロックの位相シフトのため、タイミング エンジンで使用されるセットアップ関係とホールド関係が予測と異なる場合があります。次の図を参照してください。
この例では、位相シフトのためセットアップ制約は 0.3 ns になります。これでは、タイミング クロージャを達成することはほぼ不可能です。一方、ホールド チェックは -3.7 ns であり、これはゆるすぎます。
意図どおりの動作を得るため、セットアップ エッジとホールド エッジを調整する必要があります。これには、セットアップの乗数を 2 に設定するマルチサイクル パス制約を追加します。
set_multicycle_path 2 -setup -from [get_clocks CLK1] -to [get_clocks CLK2]
これにより、セットアップ要件のデスティネーション エッジが 1 サイクル先に移動します。ホールドのデフォルトのエッジは、セットアップ要件から導出されたものになるので、指定する必要はありません。
次の図に示すように、2 つのクロック ドメイン間の位相シフトが負の場合、セットアップ チェックおよびホールド チェックに使用されるソース エッジとデスティネーション エッジは、1 つのクロック ドメインで位相シフトのない場合と似ています。
負の位相シフトでは、位相シフトの影響を相殺するためにマルチサイクル パス制約を設定する必要は通常ありませんが、位相シフトが大きい場合は、セットアップおよびホールド要件を現実的なものにするために、クロックのソース エッジまたはデスティネーション エッジを調整する必要があることもあります。