AR# 67885

|

UltraScale / UltraScale+ - OSERDES の CLK - CLKDIV 間のスキューおよび IDDR の CLK - CLK_B 間のスキューを削減する方法

説明

(Xilinx Answer 68169) は、Kintex UltraScale FPGA および Virtex UltraScale FPGA のデザイン アドバイザリで、すべてのデザインで必要な新しい最小プロダクション スピード仕様 (スピード ファイル) の詳細について説明します。

この新しいスピード ファイルを使用してタイミングを実行し、OSERDES CLK と CLKDIV または IDDR CLK と CLK_B の間でスキュー違反が発生した場合は、このアンサーの説明に従ってスキュー違反を修正してください。

ソリューション

複数のソリューションがあります。

  • 推奨されるソリューション: プロジェクトを Vivado 2016.4 に移行し、クロッキング トポロジをこのアンサーで説明されている推奨トポロジにアップデートし、通常の合成およびインプリメンテーション フローを実行します。
    • Vivado 2016.4 では、タイミング解析で OSERDES と IDDR のスキュー チェックが自動的にレポートされます。
  • ソリューション 2: クロッキング トポロジをアップデートした後、プロジェクトに以前の Vivado リリースを引き続き使用し、合成およびインプリメンテーションを含めたフローを実行します。
    このアンサーに添付されている Tcl スクリプト (reportIOSERDES.tcl) を使用し、OSERDES と IDDR のスキュー チェックをレポートします。
    Vivado 2016.4 を使用して配線済み DCP に対してタイミング サインオフ (report_timing_summary) を実行し、スキュー違反を修正します ((Xilinx Answer 68266) を参照)。
  • ソリューション 3: クロッキング トポロジをアップデートした後、以前の Vivado リリースと対応するスピード ファイル パッチ (一部の Vivado リリースに限定、請求により入手可能) を使用し、合成およびインプリメンテーションを含めたフローを実行します。
    このアンサーに添付されている Tcl スクリプト (reportIOSERDES.tcl) を使用し、OSERDES と IDDR のスキュー チェックをレポートします。


OSERDES CLK から CLKDIV へのスキュー

OSERDESE3 に最適なクロッキング トポロジを次に示します。 

MMCME3 の CLKOUT は 2 つの BUFGCE_DIV を並列に駆動し、1 つの BUFGCE_DIV の分周機能を使用して低速の CLKDIV を作成します。

高速クロック (CLK) を駆動するグローバル バッファーが BUFGCE_DIV セルである必要はありません。BUFGCE_DIV が足りない場合は、BUFGCE を使用できます。

CLK および CLKDIV を作成するのに MMCME3 からの複数の出力を使用している場合は、スキュー要件が満たされていることを確認します。



図: 推奨クロッキング トポロジ

BUFGCE_DIV は、分周されている高い周波数クロックを使用しているので、それを実現してください。

その場合、ファブリック ロジックは「図: BUFGCE_DIV を使用したファブリック クロッキング」に示すように BUFGCE_DIV を使用して駆動される必要があります。


 

図: BUFGCE_DIV を使用したファブリック クロッキング

「図: BUFGCE_DIV アライメント」に示すように、BUFGCE_DIVIDE = 2 または 4 の場合、カウンターは異なる時間で開始する可能性があります。

CLK_DIV2 A および CLK_DIV2 B は、2 で割ったときの 2 つのアライメントを示しています。同様に、CLK_DIV4 A/B/C/D は、4 で割ったときに考えられる 4 つのアライメントを示しています。 

CLR および CE 入力を使用して、カウンターをクロック エッジに揃えることができます。



図: BUFGCE_DIV アライメント



または、MMCM 出力を位相アラインする必要があり (すなわち CLKOUTx_PHASE)、正しい制御を適用できず、「図: BUFGCE_DIV アライメント」のタイミングを制御できない場合、ファブリック接続には別の BUFG クロック バッファーを使用できます。

「図: MMCM クロック出力を使用したファブリック クロッキング」では 3 つの MMCM 出力が使用されています。CLKOUT0 はファブリック ロジックを、CLKOUT1 は OSERDES CLKDIV を、CLKOUT2 は OSERDES CLK を駆動します。

OSERDES の CLK および CLKDIV ポートは BUFG によって駆動されますが、この BUFG は OSERDES のみに接続されていて、同じようなロード/配線があります。CLKOUT1 および CLKOUT2 も、配線先が似ていれば、ほかのコンポーネント プリミティブ (ISERDES、IDELAY、ODELAY、IDELAYCTRL) 用に使用できます。


 

図: MMCM クロック出力を使用したファブリック クロッキング


「図: MMCM クロック出力を使用したファブリック クロッキング」では、クロック出力の分周設定が次のように DATA_WIDTH の比になります。

    CLKOUT0_DIVIDE_F = CLKOUT2_DIVIDE * DATA_WIDTH / 2

    CLKOUT1_DIVIDE = CLKOUT2_DIVIDE * DATA_WIDTH / 2

出力は MMCM から来るので、ある位相シフトが達成したときにのみ (このケースでは、CLKOUT_<2,1,0>_PHASE で定義されている) MMCM はロックします。


CLOCK_DELAY_GROUP

上記を実行してもデザインが要件を満たさない場合は、ネットに CLOCK_DELAY_GROUP を設定して CLK と CLKDIV ピン間のスキューを削減することを試みます。

これにより、Vivado インプリメンテーションで 2 つのクロック ネットワーク間のバランスが取られます。次に、CLOCK_DELAY_GROUP の例を示します。

set_property CLOCK_DELAY_GROUP SERDES_X2Y2 [get_nets of [get_pins BUFGCE_DIV_clk_inst/O]]
set_property CLOCK_DELAY_GROUP SERDES_X2Y2 [get_nets of [get_pins BUFGCE_DIV_clkdiv_inst/O]]


USER_CLOCK_ROOT

CLOCK_DELAY_GROUP プロパティに加え、クロック バッファーで駆動されるクロックのクロック ルート ロケーションを強制するには、USER_CLOCK_ROOT プロパティを使用できます。次は USER_CLOCK_ROOT の例です。

set_property USER_CLOCK_ROOT X2Y3 [get_nets of [get_pins BUFGCE_DIV_clk_inst/O]]
set_property USER_CLOCK_ROOT X2Y3 [get_nets of [get_pins BUFGCE_DIV_clkdiv_inst/O]]


ISERDES CLK から CLKDIV へのスキュー:

ISERDES CLK と CLKDIV にはスキュー要件はありませんが、推奨されるクロッキング トポロジは OSERDES と同じです。

1 つの MMCM CLKOUT で 2 つの BUFGCE_DIV を並列に駆動し、1 つのBUFGCE_DIV の分周機能を使用して低速の CLKDIV を作成します。


IDDRE1 C から CB および ISERDES CLK から CLK_B へのスキュー

IDDR (および ISERDES) CLK と CLK_B の最適なクロッキング トポロジは、同じネットを使用して両方のピンを駆動し、ローカル反転を使用して反転クロックを作成することです。次の例を参照してください。

排他的なクロック グループ制約のスキュー チェックの問題の原因となる Vivado タイミングのスキュー チェックの詳細は、(Xilinx Answer 68331) を参照してください。



添付ファイル

関連添付ファイル

タイトル サイズ ファイルタイプ
reportIOSERDES.tcl 17 KB TCL

アンサー レコード リファレンス

マスター アンサー レコード

AR# 67885
日付 07/07/2017
ステータス アクティブ
種類 一般
デバイス 詳細 概略
People Also Viewed