UPGRADE YOUR BROWSER
We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!
このクロッキング デバッグ ガイドでは、クロッキングのデバッグ手順を説明し、DCM および PLL の使用にあたっての最良事例やヒントを紹介します。本書には次のセクションが含まれています。
ザイリンクス FPGA のクロッキング リソースを使用する際に直面する一般的な問題をデバッグしやすくするのが本書の目的です。ハイパーリンクをクリックすると、デバッグ手順を確認することができます。また、DCM および PLL の使用にあたっての最良事例やヒントも紹介していきます。これは、デバイスのユーザー ガイドを置き換えるものではありません (その他の情報を参照)。 各問題の説明には、次のセクションがあります。
このガイドに含まれている問題の詳細は次のとおりです。
DCM を使用するにあたっての最良事例やヒントは、このガイドの次のセクションで紹介されています。
LOCKED 出力は、DCM/DLL クロックが正しい初期周波数および位相アライメントを得たときを示します。Spartan-II および Virtex/-E デバイスには DLL (遅延ロック ループ)、Virtex-4 および Virtex-5 には DCM が含まれています。DCM は、追加周波数合成と位相シフト機能と DLL をあわせたものです。このセクションは、DCM と DLL の両方を対象にしています。リセットの後、ロック状態にするため、DCM は数千サイクル間クロックをサンプルします。DCM/DLL がロック状態になると、LOCKED 信号が High にアサートされます。LOCKED 信号が High にアサートされるまでは、DCM/DLL 出力クロックは有効ではなく、グリッチ、スパイクなどの間違った動作をすることがあります。特に、CLK2X 出力はデューティ サイクルが 25/75 の 1x クロックとして現れます。
LOCKED が High にアサートされるまでは DCM/DLL 出力は有効ではないので、出力を監視する必要があります。
DCM の LOCKED 信号が Low (High になっていない)、またはアサートされたが今はディアサートされている状態であれば、ここで説明している問題が発生している可能性があります。
LOCKED または監視可能な出力を使用して LED を駆動してください。LOCKED を監視するための出力がない場合は、デバッグしている間は ChipScope を使用して監視してください。
デザインで複数の DCM/DLL を使用していて、監視前に LOCKED 信号を AND でつなげている場合は、どの DCM/DLL が問題を引き起こしているか判別するため、それらを隔離してデバッグするようにしてください。
ステータス信号も監視するとよいかもしれません。ステータス信号は DCM の特定コンディションを示すためのものです。
たとえば、Virtex-5 ではステータス バスは DO および DO[0] = 位相シフト オーバーフロー、DO[1] = CLKIN 停止、DO[2] CLKFX 停止、DO[3] = CLKFB 停止となっています。
ステータス バスの詳細はデバイスのユーザー ガイドを参照してください。
CLKIN の最低 3 サイクル間、RST 信号を High にアサートします。自動キャリブレーション マクロを設定して Virtex-4 を使用している場合は、RST を最低 200ms 間アサートする必要があります。
RST 信号はアクティブ High の非同期リセットです。RST 信号を非同期にアサートすると、伝搬遅延の後すべての DCM が Low になります。
すべてのデザインで、CLKIN が安定するまで DCM をリセットに保持しておく必要があります。
内部または外部フィードバックで DCM がコンフィギュレーションされている場合は、コンフィギュレーション後にリセットを適用して、一定してロック状態になるようにすることを強く推奨します。
最適なロック プロセスのため、フィードバック コンフィギュレーションの DCM には、DCM がロックし始めるときに 安定した CLKIN と CLKFB の両方が必要です。外部フィードバックを使用したコンフィギュレーション中は、ロック プロセスの開始時に CLKFB を供給することはできません。コンフィギュレーションの最後に、デバイスがスタートアップ シーケンスを開始すると、DCM はロックを開始します。GTS (グローバル トライステート) はこの時はまだアサートされているので、出力 I/O ピンはまだトライステート状態です。このため、GTS がリリースされるまで外部フィードバックは FPGA から出力されません。
GTS のディアサート後 CLKFB が現れるときに、DCM がロックされます。ただし、DCM が最適なポイントでロックされず、ジッタおよびクロック サイクルのレイテンシが増加する可能性があります。
また CLKFB がトライステートになるときに別の信号とカップリングされる場合は (PCB シグナル インテグリティの問題)、DCM でこの無効なクロックが CLKFB として識別されて、ロックに使用される場合があります。この場合、GTS がディアサートされ、本来の CLKFB 信号が現れたときに、DCM が正しくロックされない可能性もあります。コンフィギュレーション後にリセットを行うと、このロック プロセスが有効な CLKIN および CLKFB 信号で開始し、一定したロック状態になります。
入力クロック オシレーターをコンフィギュレーション中に確実に安定させることができず、フィードバックが内部フィードバックの場合は、コンフィギュレーション後にリセットを適用し、ロックが発生するようにする必要があります。
DCM をリセットしておらず、DCM ロックに問題がある場合は、必要な時間 DCM をリセットしてみてください。
リセット後に DCM がロックする場合は、DCM への入力クロックと電源供給を初期ロック中にチェックして、ロックにエラーを生じさせるようなノイズがないかを確認します。
これでも問題が解決できない場合は、次のセクションに進んでください。
Spartan-3 FPGA の DCM では FREQUENCY_MODE 設定が使用されるので、入力クロックの周波数に基づいて設定する必要があります。範囲および設定については、デバイスのデータシートを使用してください。Spartan-3E および Spartan-3A ファミリの DCM の場合、ソフトウェアで FREQUENCY_MODE 設定は使用されません。代わりに、ハードウェアで入力周波数が検出され、正しい設定が自動調整されます。
使用しているデバイスが Virtex-4 または Virtex-5 の場合は、DCM_PERFORMANCE_MODE にも依存しています。DCM_PERFORMANCE_MODE は MAX_RANGE または MAX_SPEED に設定できます。これはデバイスのユーザー ガイドに記載されており、範囲値はデバイスのデータシートを参照してください。
たとえば、Virtex-4 (-12 スピード グレード) では、入力周波数が 100 MHz で、CLK0 および CLKFX が 220 MHz の場合、次のようになります。
最大スピード モード (デフォルト) で DLL 出力を使用している場合、低周波数モードの入力周波数の許容範囲は、32 MHz から 150 MHz まで、すなわち CLKIN_FREQ_DLL_LF_MS_MIN から CLKIN_FREQ_DLL_LF_MS_MAX までです。
最大スピード モード (デフォルト) で DFS 出力を使用している場合、高周波数モードの周波数の許容範囲は、210 MHz から 350 MHz まで、すなわち CLKOUT_FREQ_FX_HF_MS_MIN から CLKOUT_FREQ_FX_HF_MS_MAX までです。
つまり、DCM_PERFORMANCE_MODE = MAX_SPEED および DLL_FREQUENCY_MODE=LOW および DFS_FREQUENCY=HIGH です。
周波数の範囲については、Virtex-4 データシート を参照してください。
間違ったモードを選択していると、DCM が動作しません。
間違ったモードを使用している場合は、ソース コードで修正して、再度インプリメントする必要があります。
フィードバック パスを修正してもまだ問題を解決できない場合は、次のセクションに進んでください。
スキューは、クロック エッジの到達時間の差で、ポイント間のクロック パス遅延の差により発生します。スキューはセットアップおよびホールド タイムに悪影響を及ぼし、システム パフォーマンスを低下させます。
DCM/DLL は CLKIN と CLKFB を比較し、同期タップを調節してこれらをアラインします。DCM/DLL で FPGA のクロック分配遅延を補正するには、フィードバック パスを使用する必要があり、また、グローバル クロック ラインにそのフィードバックを配線する必要があります (BUFG を使用するなど)。デバイス ファミリによっては、DCM と同じデバイス ハーフに BUFG を配置させる必要があります (詳細はデバイスのユーザー ガイドを参照)。フィードバック パスがローカル配線に配線されている場合、DCM/DLL はロックしますが、クロックがデスキューされません。DCM の DLL 出力が使用される場合、デスキューをする必要があるなしにかかわらず、LOCK 信号が High になるにはフィードバックが必要です。
DCM を使用していて、クロックをデスキューする場合は、DCM の DLL 部分が使用されます。DFS 専用モードの DCM は範囲が広いのですが、クロックをデスキューする場合は、範囲の狭い DLL 仕様に沿う必要があります。
クロックをデスキューするには、DLL/DCM の CLKFB ピンにフィードバック クロックを入力する必要があります。ザイリンクス FPGA には、内部パスまたは外部パスに相対してデスキューする機能があります。
内部フィードバックが選択されている場合は、外部 FPGA 入力ピンにクロックが到達するのと同時に、デバイスの同期エレメントにクロックが到達するよう、DLL/DCM はクロックをデスキューします。
外部フィードバックが選択されている場合は、外部 FPGA 入力ピンにクロックが到達するのと同時に、ダウンストリーム デバイスにクロックが到達するよう、DLL/DCM はクロックをデスキューします。
外部フィードバックを使用しているときは、一定したロックを得るため、コンフィギュレーション直後に DCM にリセットを適用するようにしてください。
また、フィードバック パス遅延の変動は必ず CLKFB_DELAY_VAR_EXT の制限内になるようにしてください。グローバス クロック ラインに接続されているときはオンチップ変動は最小限なので、この制限は外部フィードバック パスのみに適用されます。
DCM が遅延を補正できるよう、内部フィードバック パスが正しく設定されていることが重要です。パスが間違っている場合は、DCM が一定してロックしません。
Spartan-3 ジェネレーション デバイスでは、フィードバック パスに CLK0 だけでなく CLK2X も使用できます。どちらもテストされ、指定の動作範囲内で機能することが確認されています。CLK2X フィードバックではロック状態にならず、CLK0 フィードバックであればロック状態になるというケースがいくつかあります。入力ジッターが指定最大値かそれ以上の場合に、このケースが見られました。CLK2X に比べ CLK0 はストレートなので、CLK2X よりもジッターがやや少なく、デスキュー回路でロックしやすくなっています。しかし、先に述べたように、指定範囲内では CLK0 と CLK2X はどちらも機能します。
外部フィードバック パスが間違っている場合は、ソース コードで修正する必要があります。ISE のインスタンシエーション テンプレートにあるコードを使用して BUFG をインスタンシエートできます (ISE で電球の形をしたアイコンをクリック)。LOC 制約を使用して BUFG を正しいほうのデバイス ハーフにロックすることができます。
フィードバック パスを修正してもまだ問題を解決できない場合は、次のセクションに進んでください。
外部フィードバック CLK0 を使用するとき、OBUF または ODDR を介して FPGA から出力していますか。入力されたフィードバック クロックは IBUFG などの専用配線に配線されていますか。外部フィードバック パスは CLKFB_DELAY_VAR_EXT 仕様に沿っていますか。
DCM が遅延を補正できるよう、外部フィードバック パスが正しく設定されていることが重要です。パスが間違っている場合は、DCM が一定してロックしません。
CLKFB_DELAY_VAR_EXT はデバイスのデータシートで指定されています。この仕様が満たされていない場合、DCM でロックを取得できなくなったり、ロックを失う可能性があります。ユーザーが使用しているボードでこの値を計測または見積もる必要があります。
外部フィードバック パスが間違っている場合は、ソース コードで修正する必要があります。ISE のインスタンシエーション テンプレートにあるコードを使用して BUFG をインスタンシエートできます (ISE で電球の形をしたアイコンをクリック)。LOC 制約を使用して BUFG を正しいほうのデバイス ハーフにロックすることができます。
フィードバック パスを修正してもまだ問題を解決できない場合は、次のセクションに進んでください。
DCM/PLL が正しく設定されているのにロックしない場合は、入力ジッターに問題がある可能性があります。デバイスのデータシートに、DCM/PLL で許容可能なジッター量が指定されています。
FPGA へのクロック ソースにジッターが多過ぎる場合、DCM/PLL が正しく動作しません。FPGA に入力されるクロックに問題がないことを確認してください。
ホワイト ペーパー『Jitter: Variations in the Significant Instants of a Clock or Data Signal』 (WP319) にはデジタル システムでのジッターの計測および管理についての説明があります。
入力ジッターを計測している場合は、入力ピンに出来る限り近いところで計測することが重要です。また、ODDR2 を介して DCM に入力クロックを供給することも可能です。この場合はデバイスからジッターが追加されます。
ジッターを計測するための参考資料:
参考記事:
その他の PCB デザイン リソース
電力レールが DCM/DLL にジッターを誘発させる可能性があります。システムにジッター/ノイズが多過ぎると、DCM/DLL がロックできなくなることがあります。遅延ラインは VCCAUX、制御ロジックは VCCINT から電源供給されています。
電力プレーンに電圧ノイズがあるかどうかを監視するため、VCCINT、VCCAUX、GND プレーンをテストします (テクニカル サポートでケースを開く場合はこのスコープ ショットを保存しておきます)。
デカップリングに関しては、『Virtex-4 PCB Designers Guide』 (UG072) および『Virtex-5 PCB Designers Guide』 (UG203) を参照してください。FPGA が適切にデカップルされていることを確認してください(その他の FPGA の場合は XAPP623 を参照)。
DCM/PLL のみが使用されているテスト ケースを作成し、問題が起きるかどうかチェックしてみてください。デザインの一部を使用し、VCCINT、VCCAUX、GND プレーンを監視し、電圧ノイズに変化が見られるか確認します。この方法で DCM/PLL 操作に問題が見られない場合は、デザインのほかの部分の電力プレーンまたはグランド プレーンに追加ノイズがあります。次の点をチェックしてみてください。
XAPP689 には「Differentiating Ground Bounce From Other Signal Integrity Issues」というセクションがあります。FPGA にグランド バウンスがあるかどうかを判別するためのテスト方法が説明されています。
FPGA の電源にノイズが多い場合は、ボード レベルで解決する必要があります。FPGA が適切にデカップルされていることを確認してください。
その他の PCB デザイン リソース
DCM の出力が間違っているのに、LOCKED 信号が High のままという状態が発生する場合があります。LOCKED 信号のアサートは、DCM の出力が有効であることを示します。しかし、問題が発生すると LOCKED 信号がディアサートしなくなることがあります。このため、エラーをフラグする DCM のステータス バスを監視するようにしてください。
たとえば、Virtex-5 の場合、ステータス バスは、DO および DO[0] = 位相シフト オーバーフロー、DO[1] = CLKIN 停止、DO[2] CLKFX 停止、および DO[3] = CLKFB 停止、となります。
これらのステータス信号のいずれかがアサートされた場合は、DCM をリセットしてください。ステータス信号を監視する以外に解決策はありません。ユーザー デザイン用のモニター回路を設計するかどうかは、ユーザーが判断してください。
CLKIN が停止してしまったとき (CLKIN 耐性の許容範囲外に移動してしまった場合) を示すステータス ビット 1 を監視することを推奨します。STATUS(1) は、CLKIN が戻ってくると Low になります。DCM の出力クロックのステータスを確認するのに一番よい方法は、LOCKED および STATUS(1) ビットの両方を監視することです。
DCM の入力クロックに相対した出力クロック信号に関する追加情報は次のとおりです。
入力クロックが停止し始めると (CLKIN が 2 サイクル以上 High または Low のままになる)、遅延ラインがフラッシュされるため、さらに 1 クロックから 8 クロック サイクル生成され続けます。出力クロックが停止すると、CLKIN は停止、STATUS(1) 信号がアサートされます。クロックが再開すると、出力クロック サイクルは遅延ラインがいっぱいになるまで 1 から 8 サイクル間生成されません。同様に STATUS(1) 信号は出力クロックがいったん生成されるとディアサートされます。
モニター回路を作成するとき、DCM の CLKFX 出力が未使用の場合は、デザインで STATUS[2] ビットを使用しないでください。CLKFX が使用されていないときデフォルト値の 1 がシリコンで確認されています。しかし、CLKFX が使用されていないときの STATUS[2] ビット値はザイリンクスではテストされていないので、この値は保証できません。
また、モニター回路を作成している場合、監視している DCM の出力を使用しないでください。DCM の出力が機能していない場合は、このモニター回路に問題が発生している可能性があります。
この状態が見られ、またステータス バスを監視していない場合は、ステータス ビットを ChipScope コアに接続するとよいでしょう。この場合 ILA へのクロックが有効である必要があります (CLKIN を使用し、スコープを使用して CLKIN を監視し、正しく機能していることを確認します)。
ユーザーは、DCM の機能性を失わずに CLKIN を 100ms 間停止できます。この間、CLKIN が停止したこと、CLKIN が再開したらディアサートすることを示すため、ステータス バスの CLKIN 停止ビットがアサートされます。この場合、CLKIN が 100ms より長く停止しない限り、モニター回路で DCM をリセットする必要はありません。
DCM のステータス バスを監視した後もなお、出力が間違っているのに DCM の LOCKED が High のままになっている原因がつかめない場合は、このガイドの「DCM 設定」のセクションをよくお読みください。
テクニカル サポートでケースを開き、次の情報を提出してください。
テクニカル アシスタンスが必要な場合は、サービス ポータルでサービス リクエストを開きます。
https://japan.xilinx.com/support.html#serviceportal
ソリューションのディスカッションは、ザイリンクス ユーザー コミュニティをご覧ください。
DCM の位相シフト制限に達したかどうかを確認するため、DCM の DO(0) 位相シフト オーバーフロー ステータス ピンをチェックします。たとえば、Virtex-4/-5 の場合、VARIABLE_CENTER で +- 255、VARIABLE_POSITIVE で +255、DIRECT で 0 または 1023 が制限値です。制限値に達した後、数クロック サイクル間アサートされたままになります。
DCM が FINE_SHIFT_RANGE の制限値付近で動作している場合、位相シフトの方向を逆にするためのフラグに、位相シフト オーバーフローを使用しないでください。位相シフト オーバーフローが短いシフト範囲でアサートされ、ディアサートされ、またアサートされると、間違って位相シフトの方向が逆になることがあります。代わりに、位相シフト値を追跡し、位相シフト方向 (PSINCDEC) を逆にするには、単純カウンターを使用します。カウンターが以前決められた位相シフトの最大/最小値に達したときにのみ位相シフト方向が逆になります。
Virtex-4 の場合、PSEN のアサートと PSDONE のアサートまでのクロック サイクル数は変動するので正確な数は指定されていません。別の位相シフト操作を実行する前に PSDONE がアサートするのを待つようにしてください。
Spartan-3 ファミリの場合 (Spartan-3 および Spartan-3E/-3A の DCM 位相シフトには違いがあるので注意)
位相調整に 100 CLKIN サイクルかかり、さらに DCM の PSDONE 出力が 1 PSCLK サイクル間 High になるまでに 3 PSCLK サイクルかかる可能性があるため、『Spartan-3 ユーザー ガイド』 を参照してください。このパルスは、前の位相調整が PS ユニットで完了し、次のリクエストの準備が整ったことを示します。位相シフトは Spartan-II/-IIE DLL では使用できません。
PSCLK を 1 サイクルのみ PSEN をアサートしてから、別の位相シフトを実行する前に PSDONE がアサートされるのを待ちます。PSCLK を 2 サイクル以上 PSEN をアサートすると、DCM が予測不可能な状態で位相シフトしてしまいます。
図 1: 推奨可変ファイン位相シフト シーケンス
コース位相シフトとは、DCM の CLK90、CLK180、CLK270、CLK2X180、CLKFX180 出力を指します。これらの出力は、Virtex-4 および Virtex-5 で常に使用でき、フィードバックなしで相互位相関係を維持します。Spartan-3 ジェネレーション FPGA では、これらのクロックは四分位相シフト出力と呼ばれ、DLL を使用しているときは常に使用可能です。
ファイン グレイン位相シフトは、CLKOUT_PHASE_SHIFT と PHASE_SHIFT パラメーター、DCM の PSINCDEC、PSEN、PSCLK ポートを使用して実行します。この位相シフトではフィードバックを使用する必要があります。FIXED、VARIABLE_POSITIVE、および VARIABLE_CENTER モードでファイン グレイン位相シフトを使用するときは、位相シフト値はクロック周期の分周で、温度および電圧に対して調節されます。
DIRECT ファイン グレイン位相シフトは、DCM のダイナミック リコンフィギュレーション ポート (DRP) を使用して実行します。このモードでは、ユーザーが DCM の個々の遅延タップにアクセスでき、位相シフト値は 1 タップに等しくなります。この位相シフトは温度や電圧に対して調節されず、DCM 出力のすべてに影響します。Spartan-3 ファミリおよび Virtex-II/-II Pro の場合は、FIXED と VARIABLE のオプションがあります。
テクニカル アシスタンスが必要な場合は、サービス ポータルでサービス リクエストを開きます。
https://japan.xilinx.com/support.html#serviceportal
ソリューションのディスカッションは、ザイリンクス ユーザー コミュニティをご覧ください。
次のセクションでは、DCM/DLL/PLL をデザインに含めるにあたっての設計の判断について説明します。DCM/DLL/PLL は Architecture Wizard またはインスタンシエーションで設計できます。DCM/DLL/PLL のインスタンシエーション テンプレートは、ISE の『ライブラリ ガイド』、ユーザー ガイド、言語テンプレートに含まれています。
決定の影響を受ける属性設定の詳細は「設定方法」を参照してください。Architecture Wizard は自動設定します。Architecture Wizard で生成されるコードを表示したい場合は、ISE の [Sources] パネルで XAW ファイルを選択し、[Processes] パネルで [View HDL Source] をダブルクリックします。 インスタンシエーションを使用している場合は、「設定方法」にあるように属性および接続を変更できます。
PLL および DCM は、周波数合成、クロック調整、位相シフトなど、同じ基本的な機能を実行しますが、異なるアーキテクチャでアーカイブされます。
非常に単純な DLL は、タップ遅延ラインと制御ロジックで構成されています。制御ロジックは、遅延ラインを調整するため、入力クロックとフィードバック クロックを連続してサンプルします。遅延ラインは遅延エレメントで構成されています。
PLL は電圧制御のオシレーターを使用し、入力クロックを概算するクロック信号を生成します。位相検出器とフィルターで構成されている制御ロジックは、クロック分配遅延を補正するため、オシレーター周波数と位相を調節します。
DCM か PLL かの選択
PLL の利点
DCM の利点
クロックをデスキューする必要がありますか。
スキューは、クロック エッジの到達時間の差で、ポイント間のクロック パス遅延の差により発生します。スキューはセットアップおよびホールド タイムに悪影響を及ぼし、システム パフォーマンスを低下させます。
DCM/DLL は、CLKIN と CLKFB を比較し、同期タップを調整してアラインします。FPGA のクロック分配遅延を正しく DCM/DLL で補正できるようにするには、フィードバック パスを使用する必要があり、また、BUFG を使用するなどしてグローバル クロック ラインにフィードバックを配線する必要があります。フィードバック パスがローカル配線に配線されていると、DCM/DLL はロックしますが、クロックはデスキューされません。DCM の DLL 出力のいずれかが使用されている場合は、デスキューをしているかしていないかに関係なく、LOCKED 信号が High になるようにするには CLKFB が必要です。
DCM を使用して、クロックをデスキューするよう選択している場合は、DCM の DLL 部分が使用されます。DFS モードの DCM には幅広い範囲で使用できます。クロックをデスキューするよう選択している場合は、厳しい DLL 仕様に従う必要があります。
クロックのデスキューについての詳細は、デバイスのユーザー ガイドを参照してください。
GCLK パッドから DCM 入力までの追加配線遅延を補正するには、DESKEW_ADJUST というアドバンス属性を使用して、DCM により僅かな遅延が追加されます。
SYSTEM_SYNCHRONOUS: ホールド タイムを 0 にするためすべてのクロック遅延を補正しようとします。 データ パスにあるすべてのデバイスで、共通のクロック ソースを共有しているときに使用されます。これがデフォルト値です。DCM のクロック スキュー除去機能により、クロックが前へ進められ、ワースト ケースのクロック パスが劇的に短くなります。しかし、クロックがデータの前にあらわれるほどにクロック パスが前に進められると、ホールド タイムは正の値になります。SYSTEM_SYNCHRONOUS の設定により、ホールド タイムを 0 にするため、クロック パスに十分な追加スキューが挿入されますが、clock-to-output タイムはやや長くなります。
SOURCE_SYNCHRONOUS: データとともにクロックが供給されるときに使用されます。クロックは通常エッジ アラインされるか、データを使用して中央にアラインされます。SOURCE_SYNCHRONOUS モードは主に高速データ通信 インターフェイスで使用されます。入力クロックと、DCM からのデスキューされた出力クロックの位相差を、実質 0 にします。ソース同期アプリケーションでは、データおよびクロックの両方が同じクロック ソースから派生します。送信デバイスはデータとクロックの両方を受信デバイスに送信します。これを受けて、受信デバイスは、データ受信をベストにするためクロック タイミングを調整します。高速デュアル データ レート (DDR) および LVDS 接続がこうしたシステムの例です。
DESKEW_ADJUST を SYSTEM_SYNCHRONOUS または SOURCE_SYNCHRONOUS に設定します。
例:
DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS",
クロックをデスキューするには、フィードバック クロックを DLL/DCM/PLL に入力する必要があります。ザイリンクス FPGA には、内部パスまたは外部パスに相対してデスキューできる機能があります。
内部フィードバックが選択されている場合、デバイスの同期エレメントにクロックが到達するのと同時に、外部 FPGA 入力ピンにも到達するよう、DLL/DCM によりクロックがデスキューされます。
外部フィードバックが選択されている場合は、ダウンストリーム デバイスにクロックが到達するのと同時に、外部 FPGA 入力ピンにも到達するよう、DLL/DCM によりクロックがデスキューされます。
外部フィードバックを使用するときは、コンフィギュレーション直後に DCM にリセット パルスを適用して、一定したロック状態が得られるようにしてください。
また、フィードバック パス遅延の変動は必ず CLKFB_DELAY_VAR_EXT の制限内になるようにしてください。グローバス クロック ラインに接続されているときはオンチップ変動は最小限なので、この制限は外部フィードバック パスのみに適用されます。
例:
CLK0_BUFG_INST : BUFG
port map
(I=>CLK0_BUF,
O=>CLKFB_IN);
-- edited section of DCM instantiation --
CLKFB=>CLKFB_IN,
CLK0=>CLK0_BUF,
さらに、外部フィードバックを使用していて、セットアップをシミュレーションしたい場合は、PCB トレースの外部遅延をエミュレートするためテストベンチに外部遅延を追加する必要があります。
例:
-- Instantiate the Unit Under Test (UUT)
uut: ext_fb_top PORT MAP(
clkin => clkin,
clkfb => clkfb,
din => din,
qout => qout,
rst => rst,
locked => locked,
clkout => clkout
);
clkin <= not clkin after 5 ns;
clkfb <= transport clkout after 1 ns;
DCM は High と Low の 2 つの周波数モードで動作可能です。選択されているモードにより、入力および出力の周波数の許容範囲が変わります。CLKFX や CLKFX180 などの DFS 出力のみを使用している場合は、範囲が異なります。 DLL 出力と DFS 出力の両方を使用している場合、たとえば、デスキューに CLK0 が使用されている場合などは、範囲の狭い DLL が使用されます。
Spartan-3 DCM では FREQUENCY_MODE 設定が使用され、これは入力クロックの周波数に基づいて設定する必要があります。正しい範囲および設定についてはデバイスのデータシートを参照してください。Spartan-3E および Spartan-3A ファミリの DCM の場合、ソフトウェアでは FREQUENCY_MODE 設定は使用されません。代わりに、入力周波数はハードウェアにより検出され、正しい設定に自動的に調整されます。
たとえば、Virtex-4 (スピード グレード -12) では、最高速 (MS) モード (このモードについては次のセクションを参照) で DLL 出力を使用しているとき、低周波数モードの入力周波数の許容範囲は 32MHz から 150MHz までです (たとえば、CLKIN_FREQ_DLL_LF_MS_MIN から CLKIN_FREQ_DLL_LF_MS_MAX まで)。
MS モードで DLL 出力を使用しているときの高周波数モードの許容範囲は、150MHz から 500MHz までです (たとえば CLKIN_FREQ_DLL_HF_MS_MIN から CLKIN_FREQ_DLL_HF_MS_MAX です)。
どの入力/出力周波数の組み合わせを使用するかを決める前に、DCM が動作する周波数を理解しておくことが重要です。
周波数モードを選択するには、DLL_FREQUENCY_MODE および DFS_FREQUENCY_MODE の属性を設定する必要があります。DLL_FREQUENCY_MODE 属性は、DLL の周波数モードを設定します。DFS_FREQUENCY_MODE 属性は、デジタル周波数合成 (DFS) の周波数モードを設定します。どちらの属性にも HIGH と LOW の値を指定できます。どちらもデフォルトは LOW です。DFS_FREQUENCY_MODE は、CLKIN、CLKFX、CLKFX180 の周波数範囲を決定します。
DLL_FREQUENCY_MODE と DFS_FREQUENCY_MODE を同じ値に設定する必要はありません。たとえば、スピード グレード -12 の Virtex-4 を使用している場合、入力クロックが 200MHz であれば、必要な出力は CLK0 が 200MHz、CLKFX が 125MHz となります。DLL_FREQUENCY_MODE を HIGH に、DFS_FREQUENCY MODE を LOW に設定する必要があります。
DLL_FREQUENCY_MODE およびDFS_FREQUENCY_MODE 属性を HIGH または LOW に設定します。
例:
DLL_FREQUENCY_MODE => HIGH,
Virtex-4 および Virtex-5 の DCM のみにパフォーマンス モードがあります。DCM_PERFORMANCE_MODE 属性を使用して、DCM を高周波数で低ジッターに最適化するか、低周波数で幅広い位相シフトに最適化するかを決めることができます。
注記: Spartan-3 ジェネレーション デバイスには DCM パフォーマンス モードはありません。
属性値は MAX_SPEED および MAX_RANGE で、デフォルトは MAX_SPEED です。
MAX_SPEED に設定すると、DCM は高周波数のクロックを低ジッターで生成するよう最適化されます。しかし、位相シフトの範囲は、MAX_RANGE を選択する場合よりも狭くなります。
MAX_RANGE に設定すると、DCM は、位相シフトの範囲が広く、低周波数クロックを生成するように最適化されます。
DCM_PERFORMANCE_MODE は、DCM の入力および出力周波数範囲、位相シフトの範囲、出力ジッター、DCM_TAP、CLKIN_CLKFB_PHASE、CLKOUT_PHASE、およびデューティ サイクル精度に影響します。ほとんどのケースで DCM_PERFORMANCE_MODE 属性は MAX_SPEED (デフォルト) に設定する必要があります。次の場合のみ、MAX_RANGE への変更を考慮してください。
DCM_PERFORMANCE_MODE 属性を MAX_SPEED または MAX_RANGE に設定します。
例:
DCM_PERFORMANCE_MODE => "MAX_SPEED",
一般的に、DCM のカスケードは推奨されません。ジッターは累積するので、2 段目の DCM の出力クロック ジッターが 1 段目の DCM のものより悪化するためです。可能であれば、2 つの DCM を直列ではなく並列に使用してください。しかし、デザインで必要なクロック周波数を生成するには、DCM のカスケードが必要になることがあります。
DCM をカスケードする必要がある場合は、次のルールに必ず従ってください。
R1 = DCM1 に対する M/D 比
R2 = DCM2 に対する M/D 比
M および D の値の範囲はデータシートにあります。
自動キャリブレーション マクロを使用している DCM をカスケードするには、 Virtex-4 FPGA User Guide (UG070) を参照してください。
スキューは、クロック エッジの到達時間の差で、ポイント間のクロック パス遅延の差により発生します。スキューはセットアップおよびホールド タイムに悪影響を及ぼし、システム パフォーマンスを低下させます。
PLL は CLKIN と CLKFBIN を比較し、同期タップを調整してこの 2 つをアラインします。PLL には専用フィードバック出力および入力ポート、CLKFBIN と CLKFBOUT があります。PLL で FPGA のクロック分配遅延を補正するには、BUFG を介した CLKFBOUT から CLKFBIN へのフィードバック パスを使用する必要があります。位相関係を維持させる必要がない場合は、CLKFBOUT から CLKFBIN へのパスには BUFG は不要です。
PLL でのデスキュー制御には COMPENSTION 属性が使用されます。ユーザーが使用できる値は SYSTEM_SYNCHRONOUS および SOURCE_SYNCHRONOUS です。SYSTEM_SYNCHRONOUS は、ホールド タイムを 0 にするためすべてのクロック遅延を補正しようとします。
SOURCE_SYNCHRONOUS は、データと共にクロックが提供されているときに使用され、クロックと位相関係を保ちます。ほかに、INTERNAL、EXTERNAL、DCM2PLL、PLL2DCM という ISE で使用可能な値が 4 つあります。ユーザー設定にベストな値が ISE で選択されます。
たとえば、外部フィードバックを使用している場合は、COMPENSATION 属性を SYSTEM_SYNCHRONOUS に設定する必要があり、インプリメンテーション中にツールによってこれが EXTERNAL に変更されます。
スタンドアロンの周波数合成に PLL が使用されていて、PLL がクロックをデスキューしていない場合、ISE により INTERNAL が選択されるので、COMPENSATION 属性は デフォルトの SYSTEM_SYNCHRONOUS のままにしておく必要があります。
COMPENSATION 属性を SYSTEM_SYNCHRONOUS または SOURCE_SYNCHRONOUS に設定します。
例:
COMPENSATION => "SYSTEM_SYNCHRONOUS",
内部フィードバックが選択されている場合、デバイスの同期エレメントにクロックが到達するのと同時に、外部 FPGA 入力ピンにも到達するよう、PLL によりクロックがデスキューされます。
外部フィードバックが選択されている場合は、ダウンストリーム デバイスにクロックが到達するのと同時に、外部 FPGA 入力ピンにも到達するよう、PLL によりクロックがデスキューされます。
また、フィードバック パス遅延の変動は必ず CLKFB_DELAY_VAR_EXT の制限内になるようにしてください。グローバス クロック ラインに接続されているときはオンチップ変動は最小限なので、この制限は外部フィードバック パスのみに適用されます。
外部フィードバックを使用する場合は、次の条件が満たされている必要があります。
さらに、外部フィードバックを使用していて、セットアップをシミュレーションしたい場合は、PCB トレースの外部遅延をエミュレートするためテストベンチに外部遅延を追加する必要があります。
例:
-- Instantiate the Unit Under Test (UUT)
uut: ext_fb_top PORT MAP(
clkin => clkin,
clkfbin => clkfbin,
din => din,
qout => qout,
rst => rst,
locked => locked,
clkfbout => clkfbout
);
clkin <= not clkin after 5 ns;
clkfbin <= transport clkfbout after 1 ns
PLL の入力および出力周波数を選択するとき、次のように定義されている FVCO および FOUT の仕様に合わせる必要があります。
PLL に対し M、D、D0 の値を選択する場合、FVCO および FOUT が仕様範囲内であることを必ず確認してください。VCO 動作周波数の最小値と最大値、CLKIN 入力周波数の最小値と最大値は、Virtex-5 データシートの電気的仕様のセクションで定義されています。
Virtex-5 の PLL を使用するときは BANDWIDTH 属性の値の選択に注意してください。使用可能な値は HIGH、LOW、OPTIMIZED で、デフォルトは OPTIMIZED です。バンド幅はソフトウェアで選択されます。PLL はジッター フィルターとして機能し、PLL で BANDWIDTH を LOW に設定するとさらにこのフィルター機能が高まります。BANDWIDTH を LOW に設定すると PLL のスタティック オフセットが増加する可能性があります。
NBTI の詳細については、WP224 を参照してください。NBTI を簡単に説明すると、小さいプロセスでは、PMOS に長時間負のバイアスがかかると、しきい値がシフトする可能性が高くなります。
Virtex-4 DCM のみが NBTI の影響を受けるため、DCM の入力がトグルされていることが重要です。
DCM 入力クロックが長時間停止する可能性がある場合は、マクロが必要です (CLKIN および CLKFB が 100ms より長く停止する場合など)。
早期 Virtex-4 シリコンには、Virtex-4 LX/SX の ES およびステップ 1 デバイス、Virtex-4 FX の ES1、ES2、ES3 デバイスがあります。これらのデバイスには TCONFIG、DCM_INPUT_CLOCK_STOP、および DCM_RESET に関する要件があります。
TCONFIG: VCCINT が適用された後デバイスをコンフィギュレーションするために必要な時間の最大値 (10min)
DCM_INPUT_CLOCK_STOP: CLKIN および CLKFB の停止期間の最大値 (100ms)
DCM_RESET: RST をアサート状態にしておくことができる時間の最大値 (10sec)
デバイスが損傷するなどの可能性があるため、デバイスに電源を投入し、コンフィギュレーションしないまま放置しておくことはできません。デバイスに電源を投入しておく必要がある場合は、ヌルのビットストリームをデバイスにダウンロードしてください。DCM がアクティベートされ、連続キャリブレーション ステートに保たれます。
FX ヌル ビットストリームの場合は、(Xilinx Answer 22471) を参照してください。
DCM_STANDBY マクロは、Virtex-4 LX/SX ES およびステップ 1 デバイスと、Virtex-4 FX ES デバイスに対する回避策です。これは新しいステップ番号のシリコンで使用できます。しかし、DCM_STANDBY マクロは自動キャリブレーション ブロックよりもサイズがかなり大きくなっています (100 スライス vs 15 スライス)。このため、新しいステッピング シリコンのみをターゲットにしている場合は、DCM_STANDBY マクロを使用するよりも、ソフトウェアでマクロを挿入したほうが効率的です。
最新のプロダクション Virtex-4 デバイスには、Virtex-4 LX/SX のステップ 2、および Virtex-4 FX の ES4 およびそれ以上のものがあります。ISE 7.1.2 以降、AUTOCALIBRATION ブロックはソフトウェアにより自動的にインサートされます。このサイズは DCM_STANDBY よりも小さくなっています。CLKIN および CLKFB が停止しないことが確実になるまで、AUTOCALIBRATION ブロックはオフにしないてください。DCM_AUTOCALIBRATION が FALSE に設定されている場合、リセット要件は 3 クロック サイクルです。
シリコンのステッピング レベルを確認するには、『デバイス パッケージ ユーザー ガイド』 (UG112) を参照してください。
DCM_STANDY マクロ、自動キャリブレーション ブロック、DFS スタンバイ マクロのオプションがあります。
Virtex-4 LX/SX ES およびステップ 1 デバイス、Virtex-4 FX ES1、ES2、ES3 の場合は、DCM_STANDY マクロを使用する必要があります。
Virtex-4 LX/SX のステップ 2 および Virtex-4 FX の ES4 の場合は、自動キャリブレーション ブロックを使用します。
このマクロは、ステップ 1 および新しい XC4VLX と XC4VSX デバイス、SCD1 および新しい XC4VFX デバイスには不要です。
DCM をどれぐらいの期間リセットすべきですか。
自動キャリブレーションまたはスタンドバイ マクロを使用している場合、DCM を 200ms 間リセットする必要があります。これらのマクロは 10KHz のクロックで実行するので、PVT 変動に対して十分な期間リセットする必要があるからです。
DFS マクロを使用しているか、マクロを使用していない場合は、3 サイクル以上 DCM をリセットする必要があります。
リセット期間が 200ms 未満だと、DCM がリセットから回復しない可能性があります。
ISE v7.1.03i 以降のバージョンでは、Virtex-4 LX/SX のプロダクション ステップ 2 以降のデバイス、 Virtex-4 FX の ES4 およびプロダクション デバイスをターゲットにしたデザインで、各 DCM に対し自動キャリブレーション ブロックがマップによりインスタンシエートされます。アクティブ Low のリセットを使用している場合、DCM がリセットに保持されていると LOCKED 信号はトグルします。
この問題を回避するには、可能であれば、リセットをアクティブ High に変更します。
可能でない場合は、インバーターとしてコンフィギュレーションされた LUT を手動で挿入して回避できます。ツールでこの LUT が最適化されてしまわないようにするため、LUT の入力および出力ネットに KEEP 制約を設定する必要があります。
例:
Verilog;
assign RESET = ~RESET_N;
VHDL;
LUT1_inst : LUT1
generic map (
INIT => "01") -- Specify LUT to be an inverter
port map (
O => RESET, -- Output of LUT, route to reset port of DCM
I0 => RESET_N -- Active Low reset input to LUT
);
次の制約を .ucf ファイルに追加する必要があります。
NET "RESET_N_IBUF" KEEP;
# The net coming from the active Low reset pad needs to be constrained
# check in FPGA Editor for the correct name of the net
注記: Synplify を使用している場合は、synthesis syn_keep = 1 制約を HDL および UCF の両方でネットに適用する必要があります。
DCM の DFS 部分のみを使用している場合は、別のソリューションが必要です。DLL 出力のいずれかを使用している場合 (デスキュー目的で CLK0 を使用している場合でも) は、自動キャリブレーションまたはスタンバイ マクロが必要です。
DFS 出力のみが使用されていて、DCM の CLKIN が DLL 出力の範囲外にあるケースでは、マクロを使用して LOCKED 信号を監視する必要があります。
DFS のみのマクロを使用している場合、自動キャリブレーションはオフにする必要があります。自動キャリブレーション ブロックは CLK0 および CLKFB の動きを監視するのですが、DFS のみが使用されているときは CLK0 または CLKFB に動きがないので使用できません。DCM の DFS 部は NBTI 影響を受けないため、自動キャリブレーション ブロックは不要なのですが、DFS として使用した後に DLL として使用しないでください。
DCM へのクロック入力が中断されないことが確実である場合、マクロは不要です。一般的に、ISE により挿入される自動キャリブレーション ブロックの使用を推奨します。
余分なロジック挿入は、次のいずれかの方法でオフにできます。
UCF ファイルでこの属性を適用する場合の構文は、次のようになります。
INST DCM_INST DCM_AUTOCALIBRATION="FALSE";
ISE 7.1i SP1 およびそれ以降ソフトウェアを使用している場合、未使用 DCM は自動的に連続キャリブレーション モードに自動的にコンフィギュレーションされます。
シリコンおよびソフトウェアに関する Q&A のデータベースを検索するには、またはサービス ポータルでサービス リクエストを開くには、こちらをクリックしてください。
https://japan.xilinx.com/support.html#serviceportal
ソリューションのディスカッションには、ザイリンクス ユーザー コミュニティ フォーラムを使用してください。
The information disclosed to you hereunder is provided AS-IS with no warranty of any kind, express or implied; and is provided subject to our website Terms or Use, Notices, and Disclaimers found at (ここに記す情報は現状のまま提供され、明示または暗示を問わず一切の保証を伴いません。また次のリンク先にある利用規約、告知、免責事項に従うものとします。)http://www.xilinx.com/legal.htm
AR# 52806 | |
---|---|
日付 | 03/02/2017 |
ステータス | アクティブ |
種類 | 一般 |
デバイス |
|