カスケード クロック バッファー - 2023.2 日本語

Versal アダプティブ SoC ハードウェア、IP、およびプラットフォーム開発設計手法ガイド (UG1387)

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

AMD では、カスケード バッファーを使用して遅延を人工的に増加し、関連しないクロック ツリー分岐間のスキューを削減することは通常お勧めしません。BUFGCTRL 間の接続とは異なり、ほかのクロック バッファーの接続にはアーキテクチャ内に専用パスがありません。このため、クロック バッファーの相対配置は予測できず、すべての配置規則が制約されていないカスケード バッファーの配置よりも優先されます。

ただし、次を達成するためにはカスケード クロック バッファーを使用できます。

  • XPIO コーナー バンクを異なるクロック領域にあるクロック リソースに配線する。

    Versal デバイスでは、XPIO コーナー バンクは、汎用ファブリック インターコネクトに接続することはできず、グローバル クロッキング機能が限られています。たとえば、XPIO コーナー バンクから汎用 BUFGCE にアクセスすることはできますが、BUFGCTRL および BUFGCE_DIV リソースにアクセスすることはできません。次の図に、挿入遅延一致のため、IOB-MMCM-BUFG パスの出力が別の XPIO クロック領域の BUFGCE および BUFGCE_DIV に入力されるところを示します。

    図 1. XPIO コーナー バンク カスケード クロック バッファー
    次に、コーナー バンクのクロッキング トポロジをインプリメントする制約を示します。
    #PORT clkIn is in Corner Bank GCIO
    set_property PACKAGE_PIN AF35 [get_ports clkIn]
    
    #prevent opt_design removal of the BUFG_inst to BUFG_casc_inst cascade
    set_property DONT_TOUCH TRUE [get_cells {BUFG_inst BUFG_casc_inst}]
    
    #design of the clock structures
    set_property CLOCK_DEDICATED_ROUTE SAME_CMT_ROW [get_nets -of [get_pins BUFG_inst/O]]
    set_property CLOCK_REGION X6Y0 [get_cells BUFGCE_DIV_casc_inst]
    set_property CLOCK_REGION X6Y0 [get_cells BUFG_casc_inst]
    set_property CLOCK_DELAY_GROUP myDelayGrp [get_nets -of [get_pins {BUFGCE_DIV_casc_inst/O BUFG_casc_inst/O}]]
  • クロックを異なるクロック領域にある別のクロック バッファーに配線する。

    この方法は、異なるクロック領域にある MMCM で生成されたクロックに対してクロック マルチプレクサーを使用する場合に通常使用します。MMCM の 1 つは BUFGCTRL (BUFGMUX) を直接駆動できますが、もう一方の MMCM はクロック信号をそれ以外の領域に配線するために中間クロックを必要とします。次の図に例を示します。

    図 2. クロックを別のクロック領域に配線

    次に、クロック マルチプレクサーのクロッキング トポロジをインプリメントする制約を示します。

    #PORT clkIn_1 is in XPIO ClockRegion X3Y0 GCIO
    set_property PACKAGE_PIN AU27 [get_ports clkIn_1]
    
    #PORT clkIn_2 is in XPIO ClockRegion X8Y0 GCIO
    set_property PACKAGE_PIN AJ5 [get_ports clkIn_2]
    
    #Guide placement of BUFGMUX
    set_property CLOCK_DEDICATED_ROUTE SAME_CMT_ROW [get_nets -of [get_pins BUFG_inst_2/O]]
  • 分岐間に同期パスがある場合は、クロック ツリー分岐間でクロック バッファーのレベル数のバランスを調整します。

    たとえば、MMCME5_inst_2 の出力クロックが、グループ A (異なるクロック領域にある BUFGCTRL を介して駆動されるシーケンシャル セル) とグループ B (シーケンシャル セル) の両方を駆動するとします。分岐間の遅延をより一致させるには、グループ B に BUFGCE を挿入し、BUFGCTRL と同じクロック領域に配置します。これにより、グループ A とグループ B 間の同期パスのスキューの量が制御されます。次の図に例を示します。

    注記: Vivado ツールのロジック最適化コマンド opt_design では、タイミング クロックとクロック ネットワーク分岐のタイミング関係は認識されません。そのため、opt_design でできるだけ多くのカスケード接続されたクロック バッファーまたは余分なクロック バッファーが削除されます。この例では、DONT_TOUCH="TRUE" プロパティが設定されていなければ、opt_design により BUFG_inst_casc_2 が削除されます。クロック ツリー分岐間に非同期パスしかない場合、受信クロック ドメインに適切な同期回路があれば、これらの分岐間でバランスを調整する必要はありません。
    図 3. クロック領域間の同期パスのクロック ツリーのバランス調整
    次に、クロック ツリーのバランスを取る回路をインプリメントする制約を示します。
    #PORT clkIn_1 is in XPIO ClockRegion X3Y0 GCIO
    set_property PACKAGE_PIN AU27 [get_ports clkIn_1]
    
    #PORT clkIn_2 is in XPIO ClockRegion X8Y0 GCIO
    set_property PACKAGE_PIN AJ5 [get_ports clkIn_2]
    
    #allow for routing from BUFG_inst_2 (X8Y0) to BUFG_inst_casc_2 (X3Y0) and prevent optimization
    set_property CLOCK_DEDICATED_ROUTE SAME_CMT_ROW [get_nets -of [get_pins BUFG_inst_2/O]]
    set_property CLOCK_REGION X3Y0 [get_cells BUFG_inst_casc_2]
    set_property DONT_TOUCH TRUE [get_cells BUFG_inst_casc_2]
    
    #balance output of BUFGMUX and BUFG_inst_casc_2, both placed in X3Y0
    set_property CLOCK_DELAY_GROUP myDelayGrp [get_nets -of [get_pins {BUFG_inst_casc_2/O BUFGMUX_inst/O}]]
    
  • クロック マルチプレクサーを構築する。

    カスケード クロック バッファーを使用する場合は、AMD では挿入遅延とスキューの変動を削減するため次を実行することをお勧めします。

    • カスケード バッファーを同じクロック領域または隣接するクロック領域に配置する。
    • クロック ツリー分岐のバランスが調整されている場合は、同じレベルのクロック バッファーすべてを同じクロック領域に割り当てる。
      注記: 絶対に必要な場合は、AMD ではカスケード BUFGCE の代わりに 2 つのカスケード BUFGCTRL を使用することをお勧めします。専用配線を使用すると、両方の BUFGCTRL が同じクロック領域内に配置される場合に、最小限の遅延で 2 つの隣接する BUFGCTRL をカスケードできます。