AR# 56113

Spartan-6 BUFIO2 のデザイン アドバイザリ - DIVIDE = 2 の問題

説明

Spartan-6 FPGA では、BUFIO2 で DIVIDE(2) を使用すると停止することがあるため、サポートされていません。ほかのインプリメンテーションを使用する必要があります。

ソリューション

停止状態になると、DIVCLK および SERDESSTROBE 出力が動作しなくなります。BUFIO2 は再コンフィギュレーションするまで停止したままになります。IOCLK はステート マシンに依存していないので、継続して動作します。

コンフィギュレーションによっては、BUFIO2 のクロック入力のグリッチのため BUFIO2 が停止する可能性があります。これらのグリッチは、不安定なクロック、未接続の入力、FPGA のスタートアップ状態など、さまざまな原因で発生します。Spartan-6 デバイスの入力でクロックが既知でグリッチがなくても、FPGA コンフィギュレーション/スタートアップの状態により、BUFIO2 が停止することがあります。

DRC 情報

ISE Design Suite 14.6 以降では、DIVIDE = 2 を使用すると次のような DRC エラーが表示されます。Element BUFIO2_XY has invalid setting of divide by 2. This setting is not supported. For more information, see (Xilinx Answer 56113).
この DRC は、ISE Design Suite 14.6 に含まれる予定です。

ソリューション

BUFIO2 の DIVIDE(2) 設定を使用せずにクロック周波数を下げる標準的な方法を、次に示します。すべての方法が示されているわけではありませんが、一般的なソリューションのいくつかを示します。図 1a 「Failing Clock Generation with BUFIO2, DIVIDE(2)」では、BUFIO2 を使用して FIN を 2 分周しています。


FPGA 内部でのクロックの分周には、通常 DCM および PLL が使用されます。これらを使用して、BUFIO2 が停止する状況を回避できます。ただし、DCM/PLL の要件を満たす必要があるので注意してください。位相アライメントがデザイン要件である場合、図 2 「DCM Clock Divider」に示すように、BUFIO2FB フィードバック バッファーを追加で使用する必要があります。PLL も同様に使用できます。


外部クロック出力を生成するのに分周クロックを使用している場合、図 1b 「Alternative Clock Generation with BFUIO2, DIVIDE(4)」に示すように、OSERDES ソリューションを使用できます。BUFIO2 からの IOCLK は、バンクの同じ半分にある I/O にのみ配線できます。配線制限が適用される場合があります。


SDR を使用する場合は、「OSERDES2 SDR Clock Generation」の図に示すように、データは IOCLK (SDR) の各立ち上がりエッジで送信されます。データ パターン 1010 を駆動すると、各クロック エッジ (IOCLK(SDR) でデータの極性が反転します。この場合、クロック パターン データ レートは IOCLK の周波数に一致します。目標は 2 ビットのクロック データ パターンを生成することなので、ピンのクロック パターンは FIN/2 となります。


DataRate SDR_1010 = FIN

データ パターン 1/1/0/0 では、クロック パターンが 2 ビット データ (1、0) ごとに繰り返されるので、データ レートのクロック パルスが生成されます。

FSDR_1010= DataRate SDR_1010 / 2 = FIN / 2

DDR データ レートを使用する場合は、図 1c に示すように、2 番目の OSERDES2 オプションで 2 逓倍モードを追加できます。同じ BUFIO2 の配線制限が適用されますが、USE_DOUBLER(TRUE) が使用されているので、追加の配線制限がある場合があります。具体的には、2 番目の BUFIO2 (I_INVERT) には UG382 に説明されている専用配置があります。また、USE_DOUBLER(TRUE) には、GTP クロックにはない BUFIO2_2CLK 用の 2 番目の配線が必要です。そのため、このソリューションは、グローバル クロック ピンから配線する場合にのみ可能です。


OSERDES2 を DATA_RATE (DDR) で使用する場合、データ パターンが異なることに注意してください (1100)。これは、クロックの生成方法のためです。これで、「Timing Waveform for OSERDES2 DDR Clock Generation」の図に示すように、2 つのクロックが駆動されます。この場合、CLK0 によりデータ ビットが 1 つおき (DIVIDE(4) では D0、D2 など) に送信されますが、DDR モードが使用されているので、2 番目の BUFIO2、I_INVERT(TRUE) で駆動される 2 番目のクロック ソースが CLK1 を駆動しています。IOCLK1 は IOCLK0 を反転 (または完全な 50/50 デューティ サイクルの場合は 180 度位相シフト) したもので、2 番目のクロックを生成します。示されている DIVIDE(4) の例では、IOCLK1 で残りのデータ ビット D1、D3 が送信されます。

DataRate DDR_1100 = FIN * 2

データ パターン 1/1/0/0 では、1 つのクロック パルスを作成するのに 4 データ ビット (1、1、0、0) が必要なので、データ レートのクロック パルスが生成されます。

FDDR_1100 = DataRate DDR_1100 / 4 = FIN * 2 / 4 = FIN / 2


改訂履歴
2013/05/22 - 初版

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

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

Answer Number アンサータイトル 問題の発生したバージョン 修正バージョン
34856 Spartan-6 FPGA のデザイン アドバイザリのマスター アンサー N/A N/A

関連アンサー レコード

AR# 56113
日付 06/17/2013
ステータス アクティブ
種類 デザイン アドバイザリ
デバイス