BUFGCTRL プリミティブ (下図参照) では、2 つの非同期クロックの切り替えが可能です。その他のグローバル クロック バッファー プリミティブはすべて BUFGCTRL のコンフィギュレーションから派生したものです。BUFGCTRL には、S0、S1、CE0、CE1 の 4 つのセレクト ラインと、IGNORE0 および IGNORE1 の 2 つの制御ラインがあります。これらの 6 つの制御ラインを使用して入力 I0 と I1 を制御します。
BUFGCTRL は、2 つのクロック入力をグリッチなしで切り替えるよう設計されています。S0 と S1 の変化後に選択されているクロックが High から Low に切り替わると、出力はもう 1 つのクロックが High から Low に遷移するまで Low を維持します。その後、新しいクロックが出力を駆動し始めます。デフォルトのコンフィギュレーションでは BUFGCTRL は立ち下がりエッジを認識し、入力が切り替わる前は Low に保持されるようになっています。INIT_OUT 属性を使用することで、立ち上がりエッジを認識して、入力が切り替わるまで High を保持するようにも設定できます。
アプリケーションによっては、上記のような切り替え条件が適さない場合もあります。その場合は、IGNORE ピンをアサートすると BUFGCTRL は 2 つのクロック入力の切り替え条件を検出しなくなります。つまり、IGNORE をアサートするとセレクト ピンの変化と同時にマルチプレクサーの入力が切り替わります。IGNORE0 をアサートするとセレクト ピンの変化と同時に I0 入力から切り替わり、IGNORE1 をアサートするとセレクト ピンの変化と同時に I1 入力から切り替わります。
入力クロックは、S0 と CE0 または S1 と CE1 のペアのいずれかが High にアサートされなければ選択できません。S かクロック イネーブル (CE) のいずれかが High にアサートされていないときは、必要な入力が選択されません。通常は、両方のペア (4 つのすべてのセレクト ライン) が同時に High にアサートされることはありません。セレクト ラインとして使用されるのは、ペアの一方のピンだけで、もう一方は High に固定されます。次に、その真理値表を示します。
CE0 | S0 | CE1 | S1 | O |
---|---|---|---|---|
1 | 1 | 0 | X | I0 |
1 | 1 | X | 0 | I0 |
0 | X | 1 | 1 | I1 |
X | 0 | 1 | 1 | I1 |
1 | 1 | 1 | 1 | 前の入力 1 |
|
S と CE はどちらも出力を選択するために使用しますが、グリッチのない切り替えを実行できる S の使用を推奨します。CE を使用してクロックを切り替えると、S を使用した場合よりもクロック選択が高速で変更されます。CE ピンでセットアップ/ホールド タイム違反があると、クロック出力でグリッチが発生します。一方、S ピンの使用では、セットアップ/ホールド タイムと無関係に 2 つのクロック入力を切り替えることができます。このため、S ピンを使用してクロックを切り替えてもグリッチは発生しません。BUFGMUX_CTRL を参照してください。
次のタイミング図は、BUFGCTRL プリミティブを使用した場合のクロックの切り替わりを示しています。正確なタイミング値は、スピード ファイルから求めることができます。
- タイム イベント 1 の前は、出力 O に入力 I0 が選択されています。
- タイム イベント 1 の立ち上がりエッジより TBCCCK_CE 前に、CE0 と S0 が Low にディアサートされます。これとほぼ同時に、CE1 と S1 が High にアサートされます。
- タイム イベント 3 より TBCCKO_O 後に、出力 O が入力 I1 に切り替わります。これは、I0 が High から Low になり (イベント 2)、I1 が High から Low になると発生します。
- タイム イベント 4 で IGNORE1 がアサートされます。
- タイム イベント 5 で CE0 と S0 が High にアサートされ、CE1 と S1 が Low にディアサートされます。タイム イベント 6 より TBCCKO_O 後に、出力 O の入力が I1 から I0 に切り替わります。このとき、I1 が High から Low に切り替わる必要はありません。
BUFGCTRL プリミティブには、ほかに次のような機能があります。
- I0 と I1 入力は、コンフィギュレーション後、デバイスが動作を開始する前にあらかじめ選択されます。
- コンフィギュレーション後の最初の出力には、High または Low のどちらでも選択できます。
- CE0 と CE1 のみを使用してクロックを選択 (S0 と S1 を High に固定) した場合、前に選択されたクロックの High から Low への遷移を待つことなく別のクロックを選択できます。
次の表に、BUFGCTRL プリミティブの属性を示します。
属性名 | 説明 | 設定可能な値 |
---|---|---|
INIT_OUT | コンフィギュレーション後に BUFGCTRL 出力を特定の値に初期化します。立ち上がりエッジと立ち下がりエッジのいずれを使用するかを設定します。また、クロック選択を切り替えるときの出力レベルを設定します。 | 0 (デフォルト)、1 |
PRESELECT_I0 | TRUE の場合、コンフィギュレーション後の BUFGCTRL の出力に I0 入力が選択されます。 1 | FALSE (デフォルト)、TRUE |
PRESELECT_I1 | TRUE の場合、コンフィギュレーション後の BUFGCTRL の出力に I1 入力が選択されます。 1 | FALSE (デフォルト)、TRUE |
|