コンポーネント プリミティブを使用したクロッキングに関する注意事項

UltraScale アーキテクチャ SelectIO リソース ユーザー ガイド (UG571)

Document ID
UG571
Release Date
2023-08-31
Revision
1.15 日本語

コンポーネント モードでは、ISERDES/OSERDES コンポーネントのクロックをグローバル クロックから駆動する必要があります。このクロックは、次のグローバル クロック リソースのうちのいずれかから供給できます。

BUFGCE または BUFGCE_DIV を駆動するクロック兼用 I/O

BUFGCE または BUFGCE_DIV を駆動する MMCM

BUFGCE または BUFGCE_DIV を駆動する PLL

この図 に、SerDes を使用した通常のコンポーネント モードの受信および送信のクロッキング トポロジを示します。

図 2-27: コンポーネント モードのクロッキング回路

X-Ref Target - Figure 2-27

X16048-component-mode-clocking-circuit.jpg

受信回路では、ISERDESE3 は FIFO を有効にして設定されます (属性 FIFO_ENABLE = TRUE)。シリアライズされた入力データは、ISERDESE3 の CLK/CLK_B ピンに接続された高速クロックを使用して、ISERDESE3 にキャプチャされます。この高速クロックは、BUFGCE を駆動するクロック兼用 I/O から供給されます。デシリアライズされたデータは、高速クロックを分周したクロックで読み出されます。この分周は、デシリアライズされる幅 (SerDes の属性 DATA_WIDTH) に対応する分周係数を使用して実行されます。たとえば、DATA_WIDTH = 8 に設定し、DDR 伝送を想定すると、クロックは 4 で分周されます。 この図 の回路では、BUFGCE_DIV を使用して分周を実行しています。分周されたクロックは、ISERDESE3 の CLKDIV および FIFO_RD_CLK の両方に接続されます。代替手段では、ISERDESE3 の FIFO を無効 (属性 FIFO_ENABLE = FALSE) にしたキャプチャ回路を使用します。その配置 (示していない) では、FIFO_RD_CLK 信号を接続しないようにする必要がありますが、CLKDIV 信号はそのまま所定の位置に接続する必要があります。デシリアライズされたデータは、内部で自動的に生成された分周クロックを使用して ISERDESE3 から出力されます。このモードでは、Vivado デザイン ツールを使用してスタティック タイミング解析を実行すると、この内部で生成された分周クロックに対する ISERDESE3 の読み出しタイミングを表示できます。

また、コンポーネント モードの送信回路を この図 に示しています。パラレル (デシリアライズされた) 送信データは、分周クロックを使用して OSERDESE3 のデータ入力でサンプリングされます。この分周クロックは、OSERDESE3 の CLKDIV 入力に供給する必要があります。ISERDESE3 と同様に、この分周クロックは、BUFGCE_DIV を使用して生成するか (図参照)、別の方法として MMCM または PLL を使用して生成できます。シリアライズされたデータは、OSERDESE3 の CLK 入力に接続して供給される高速クロックを使用して、OSERDESE3 から出力されます。ISERDESE3 と OSERDESE3 の代わりに IDDRE1 と ODDRE1 を使用する場合 (デシリアライズされる幅が 2 の場合) は、CLK 入力を高速グローバル クロックに接続します。分周クロックは不要です。 この図 には示していませんが、IOB と SerDes 間で、IDELAYE3 を受信回路に追加し、ODELAYE3 を送信回路に追加することもできます。

この図 では、クロック スキューを最小限に抑えるために MMCM が出力する 1 つのクロック ソースで BUFG と BUFGCE_DIV を駆動しています。この場合、クロック スキューは Vivado で解析されます。

注記: BUFGCE_DIV を使用する場合、分周クロックのアライメントは確約されません。ファブリック ロジックを BUFGCE_DIV で駆動するのはこのためです。

この図 のような状況では、MMCM から複数のクロック出力が必要です。複数の MMCM 出力を使用することでスキューが生じるため、クロック スキューの要件を満たすのが困難になります。クロック スキューを正しく計算するために、クロック バッファーごとに CLOCK_DELAY_GROUP を定義します。

set_property CLOCK_DELAY_GROUP <Clock Delay Group Name> [get_nets-of_objects [get_pins <BUFG CLKOUT1 Instance>/O] ]

set_property CLOCK_DELAY_GROUP <Clock Delay Group Name> [get_nets-of_objects [get_pins <BUFG CLKOUT2 Instance>/O] ]

図 2-28: MMCM からの複数のクロック出力

X-Ref Target - Figure 2-28

X19017-mmcm-w-separate-clock-output.jpg
図 2-29: ISERDES と IDELAY を使用する場合のクロッキング接続 (TIME モード)

X-Ref Target - Figure 2-29

X19513-clocking-delays-time-mode.jpg

TIME モードで IDELAY を使用する場合、CLK 入力 (IDELAY) には ISERDES の低速分周クロック (CLKDIV) を接続します ( この図 )。ODELAY の場合も同様に、CLK (ODELAY) には CLKDIV (OSERDES) を接続します。

IDELAYCTRL の基準クロックは TIME モードで使用しているすべての IDELAY および ODELAY の基準クロックで、通常は異なるクロック ソースです。各ニブルは 1 つの IDELAYCTRL によって制御されるため、正しい遅延を維持するには同じニブル内のすべての IDELAY および ODELAY で REFCLK_FREQUENCY を REFCLK に接続されたクロックの周波数に設定する必要があります。