この図 に示すように、レシーバーのセットアップは、FIFO にパラレル データを書き込む一連のデシリアライザー レジスタに接続する入力遅延エレメントと、クロック生成ロジックに分かれます。
入力遅延ラインは常に信号入力パスにあります。入力遅延が不要なときは、遅延値を 0 に設定してください。デシリアライザー レジスタは、1:2、2:4、および 4:8 の 3 つのステージに分割されます。ここから FIFO 入力が書き込まれます。レジスタ ステージおよび FIFO 書き込み側に必要なすべてのクロックは、クロック生成ロジックで生成され、BITSLICE_CONTROL 出力によって供給されます。BITSLICE_CONTROL の BISC コントローラーは、データに対するクロックの調整およびアライメント用クロックを使用します。これは、 「 BITSLICE_CONTROL 」 の 「 ネイティブ モードでのクロッキング 」 で詳細に説明しています。
データ転送クロックを用いたデータ キャプチャを想定します。
• 転送クロックはニブルの BITSLICE_0 に接続する必要があります。これらは、QBC または DBC と呼ばれる入力です。
• 転送クロックは、BITSLICE_0 を経由して BITSLICE_CONTROL に渡されます。
• BITSLICE_CONTROL 内のクロック ジェネレーターは、データ ビットのキャプチャと FIFO への書き込みに必要なクロックを生成します。
• BITSLICE_CONTROL には、その PLL_CLK 入力に適用するマスター クロックまたは基準クロックも必要です。
一般に、低ジッターおよび高性能を実現するために、このクロックは I/O バンクの後ろの領域にある 2 つの PLL のうち 1 つで生成されます。PLL の CLKOUTPHY 出力は、クロック バッファーなしの BITSLICE_CONTROL の PLL_CLK 入力へ接続する必要があります。ソース同期システムの場合、そのクロックの周波数はキャプチャ データのビット レートに相当します。
• データは、受信した転送クロックを使用してデシリアライザーでキャプチャされ、デシリアライズされたデータが FIFO に書き込まれます。
• FIFO へのデータ書き込みに使用したクロックは、FIFO_WRCLK_OUT として FIFO ロジックに供給されます。各 RXTX_BITSLICE には FIFO_WRCLK_OUT ピンが備わっていますが、その信号はニブルの BITSLICE_0 でしか利用できません。
• FIFO_WRCLK_OUT は、FPGA 内に設計されたロジックのクロックとして、あるいは FIFO の読み出しクロックとして PLL または MMCM の代わりに使用できます。このために、FIFO_WRCLK_OUT は BUFG クロック バッファーを経由して渡されます。
データは、内部 FIFO 書き込みクロックの各立ち上がりエッジで FIFO に書き込まれ、FPGA ロジックへの FIFO_WRCLK_OUT として反映されます。FIFO 書き込みポインターは 0 から 7 まで実行し、その後ループバックして FIFO に新しいデータが書き込まれます。
次に、キャプチャ データとデシリアライズされたデータを FIFO から読み出す条件を示します。
• FIFO からデータを読み出すには、読み出しクロック (FIFO_RD_CLK) が必要です。このクロックの周波数は FIFO_WRCLK_OUT クロックと同じ必要があり、位相は不明です (メソ同期)。このため、必要な場合または望ましい場合は、FIFO_WRCLK_OUT を FIFO_RD_CLK として使用できます。
• FIFO からデータを読み出すための 2 つ目の条件は、FIFO_RD_EN 入力が High であることです。
注記: FIFO_RD_EN が Low に保持されると、読み出しポインターは停止します。書き込みクロックが継続していると想定すると、書き込みポインターはインクリメントを続けるため、通常は FIFO_WRCLK_OUT の 8 クロック サイクルごとに FIFO_EMPTY が発生します。ただし、この 8 サイクル動作は保証されたものではありません。FIFO_RD_EN 回路は、FIFO_EMPTY の最初のディアサートを使用する必要があります。
• FIFO 書き込みおよび読み出しポインターが同じ場合、つまり書き込みと読み出しが FIFO 内の同じ位置にアクセスすると、FIFO_EMPTY パルスが生成されます。このパルスは FIFO_RD_CLK と同期し、RXTX_BITSLICE の FIFO_EMPTY ピンにステータスが現れるまで FIFO_RD_CLK の 2 サイクル要します。
次に、RXTX_BITSLICE の FIFO での有効な動作例を示します。
1. FIFO_RD_CLK を FIFO に適用します。
2. 反転してレジスタに格納された FIFO_EMPTY 信号 (FIFO_RD_CLK で操作) を使用します。
3. この出力を使用して、FIFO_RD_EN 入力で FIFO を有効にします。
次の手法により、最初のデータが FIFO に書き込まれ、そのデータが読み出された後に、FIFO 読み出しポインターにより FIFO で _EMPTY ステータス信号が生成されることはなくなります。
1. 開始時点で、書き込みおよび読み出しポインターは 0 です。
2. FIFO_EMPTY ステータス信号は High で、FIFO が空であることを示します。
3. FIFO が無効のため、読み出しポインターが停止します。
4. 最初のデータが書き込まれると、非エンプティ状態になります。
5. 非エンプティ ステータスは、読み出しクロックの 2 サイクル後に、アプリケーションで利用できます。つまり、書き込みは読み出し前に 2 クロック サイクル間実行されます。
6. FIFO_RD_CLK で動作する FIFO_EMPTY をレジスタを経由して使用し、1 サイクル追加の FIFO_RD_CLK を必要とする FIFO を有効にします。これで、書き込みは読み出し前に 3 クロック サイクル間実行されます。
7. FIFO に対するデータの書き込みと読み出しが実行される限り、FIFO_EMPTY でエンプティ ステータスが示されることはありません。
次の 2 つのユース ケースが適用されます。
° FIFO_RD_EN はそのままにします。これは FIFO_EMPTY 信号でのみ制御されます。
° アプリケーションで FIFO からのデータを無視する必要がある場合、アプリケーションのキャプチャ レジスタを無効にしてください。
FIFO を再度有効にするには、FIFO_EMPTY がパルスされる (Low-High-Low) まで待機して FIFO_RD_EN を適用します。これは、 手順 2 以降の一連の手順に従います。