FIFO の機能

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

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

FIFO は、FIFO_RD_CLK、FIFO_RD_EN、FIFO_EMPTY、および FIFO_WRCLK_OUT 信号によって制御されます。FIFO からのデータは Q[7:0] ピンから利用できます。FIFO のビヘイビアーを制御する属性は、RX_DATA_WIDTH および FIFO_SYNC_MODE です。これらは、 表: RXTX_BITSLICE のポート および 表: RXTX_BITSLICE の属性 で説明します。

RX_DATA_WIDTH は、レシーバー全体で使用される属性です。4 に設定すると、FIFO はデータ出力を Q[3:0] ピンで渡し、レシーバーのシリアル入力からの信号が Q5 ピンで利用できます。RX_DATA_WIDTH を 8 に設定すると、FIFO は 8 ビット データを渡し、シリアル データ出力は利用できません。この Q5 シリアル データは RX_BITSLICE および RXTX_BITSLICE でのみサポートされます。ISERDES はサポートされません。

FIFO_SYNC_MODE を FALSE に設定して、FIFO をクロック乗せ換えエレメントとして使用します。このモードにより、インターフェイス クロック ドメインからキャプチャしたデータをインターコネクト ロジックのクロック ドメインへクロスオーバーできます。FIFO 全体の一般的なレイテンシは、2 クロック サイクル (さらに 1 クロックの FIFO イネーブル サイクルをカウントした場合は 3 クロック サイクル) に相当しますが、デザインによっては 8 読み出しクロック サイクルにもなります。 表: FIFO のクロックと制御入力のビヘイビアー に、FIFO のクロックと制御入力のビヘイビアーを示します。

表 2-21: FIFO のクロックと制御入力のビヘイビアー

クロックまたは制御入力

ビヘイビアー

FIFO_WRCLK_OUT

このクロックは、FIFO の読み出しクロックとして使用できます。データをキャプチャするためのクロックは、BITSLICE_CONTROL および RXTX_BITSLICE プリミティブ内部で生成されます。これらの内部生成されたクロックのうち 1 つが、分周サンプル クロックであり、FIFO へデータを書き込むために使用するクロック (FIFO_WR_CLK と呼ばれる) です。このクロックのコピーが、ビット スライスの FIFO_WRCLK_OUT 出力として提供されます。各ビット スライスには FIFO_WRCLK_OUT 出力ピンがありますが、ニブル位置 0 のビット スライスのみがこのクロックを配線および使用できます。

FIFO_RD_CLK

これは、データを FIFO から読み出すために使用する信号です。この周波数は FIFO_WR_CLK と同じ必要がありますが、FIFO_WRCLK_OUT クロックとの間に位相関係は必要ありません。FIFO 読み出しクロックは、同じニブル、バイト、または I/O バンク内の BITSLICE_0 の FIFO_WRCLK_OUT によって、あるいは PLL または MMCM が生成したクロックによって供給できます。このクロックは、FPGA 内の通常のクロック ネット全体で配線され、クロック バッファー (BUFG、BUFGCE など) を必要とします。

FIFO_RD_EN

このピンは、FIFO の読み出しを有効にするために High に接続される必要があります。この入力ピンが Low に接続されている場合、FIFO 出力は FIFO_RD_CLK の 8 サイクルごとに新しいデータを示します。これは、書き込みポインターはレシーバー内の書き込み動作のたびに前進しますが、FIFO_RD_EN によって FIFO の読み出しポインターはロックされるためです。書き込みポインターが 8 番目のポインター位置に到達すると、0 にループバックして継続します。読み出しポインターがロックされるため、新しいデータがビット スライスの出力ピンに現れます。エンプティ条件が検出され、FIFO_EMPTY ステータスが生成されます。

FIFO_EMPTY

FIFO が空になると、この出力が High になります。FIFO にデータが書き込まれ、書き込みと読み出しポイントが FIFO 内の同じ位置にアクセスする場合、エンプティ条件が検出されて FIFO_EMPTY ピンで示されます。FIFO エンプティ条件は FIFO_RD_CLK に同期するため、FIFO_EMPTY ピンがステートを変更するまで FIFO_RD_CLK の 2 サイクル要します。このメカニズムにより、通常動作では書き込みポインターが常に読み出しポインターの前に動作するようになります。

表: FIFO のクロックと制御入力のビヘイビアー で説明したビヘイビアーを、 この図 に示します。

図 2-36: レシーバー FIFO の回路図

X-Ref Target - Figure 2-36

X16332-Schematic-view-receiver-fifo.jpg

FIFO を使用して、データを複数のレシーバーの Q ピンで揃えます。I/O バンク内で FIFO_WRCLK_OUT を FIFO_RD_CLK として使用する場合、次に従います。

クロックを受信するビット スライスから最も離れた使用ビット スライスの反転 FIFO_EMPTY 信号を利用します。結果、使用ビット スライスのすべての入力に対して FIFO_WRCLK_OUT がオプションのフリップフロップを介して生成されます。オプションのフリップフロップを使用することで、タイミング要件を満たすことができます。

注記: 「最も離れた」とは、クロック バックボーンの端にあるビット スライスを指します。 この図 に示すように、クロックは byte_2 の下位ニブルに到達し、インターバイトおよびインターニブルのバックボーンを経由して byte_0 の上位ニブルへ渡されます。

クロック レートが高い場合、タイミングを満たすことが難しくなることがあります。パイプラインを追加して、この問題を解決します。

複数のクロック/ストローブが存在する場合は次のようにします。

すべての使用ビット スライスの FIFO_EMPTY 信号をオプションのフリップフロップを介してすべての使用ビット スライスの FIFO_RD_EN の入力として処理する NOR ゲートを使用します。オプションのフリップフロップを使用することで、タイミング要件を満たすことができます。

NOR ゲートは、最後の FIFO_EMPTY 信号が Low に遷移するまで待機し、その後オプションのフリップフロップを介して FIFO_RD_EN をトリガーします ( この図 参照)。

注記:

スタティック タイミング解析を実行する場合、FIFO_WRCLK_OUT の使用時は生成されたクロックをタイミング制約の一部として指定する必要があります。例として、DATA_WIDTH = 4 (RX_BITSLICE) で、rx_clk_in というポートのサンプル クロックが 500MHz の場合を想定します。さらに、属性 DATA_TYPE = DATA_AND_CLOCK (RX_BITSLICE) および SERIAL_MODE = FALSE (BITSLICE_CONTROL) を用いる、rx_clock_bitslice_inst インスタンス (ニブル位置 0) を想定します。

次のサンプル XDC は、FIFO_WRCLK_OUT ピンに必要なクロックを生成します。

create_clock -name rx_clk -period 2.000 -waveform {0.000 1.000} [get_ports rx_clk_in]

create_generated_clock -divide_by 2 -source [get_ports rx_clk_in] -name fifo_wrclk rx_clock_bitslice_inst/FIFO_WRCLK_OUT

BITSLICE_CONTROL の VTC_RDY が High になった後にアプリケーション ロジックを FPGA で有効にするのが実践的に優れています。VTC_RDY 信号は、I/O インターフェイスが初期化、起動および実行されていることを示すものです。

FIFO_WRCLK_OUT クロックは、BUFG クロック バッファーを使用する必要があります。HDL では、FIFO_WRCLK_OUT クロックを FIFO_RD_CLK へ直接接続できますが、Vivado ツールでは BUFG クロック バッファーが自動的に挿入されます。

すべての RX ビット スライスを同期させるには、RX VTC_RDY 信号がアサートされるまで rx_clk_in (FIFO_RD_CLK) [(上記例では rx_clk_in)] RXCLK を停止する必要があります。

RX のリセット終了時にユーザーが TX を制御できる場合は、RX VTC_RDY 信号がアサートされるまで RX 部への CLK の供給を停止してください。

ユーザーが TX 部を制御できない場合は、必要なときにすべてのチャネルが確実にアラインされるように、bitslip モジュールを RX 側に実装する必要があります。

図 2-37: ビット スライス出力シンクロナイザーとしての FIFO (複数のクロックまたはストローブ)

X-Ref Target - Figure 2-37

X16333-fifo-as-bit-slice-output-synchronizer.jpg

注記 1: シングル クロックまたはシングル ストローブを使用する場合、最も離れたところにあるビット スライスのフリップフロップへの FIFO_EMPTY パスにあるインバーターを NOR ゲートの代わりに使用します。オプションのフリップフロップを使用することで、タイミング要件を満たすことができます。

注記 2: 複数クロックまたは複数ストローブを使用する場合、フリップフロップへのパスにあるすべての使用ビット スライスの FIFO_EMPTY 信号を集めて処理する NOR ゲートを使用します。オプションのフリップフロップを使用することで、タイミング要件を満たすことができます。

この図 この図 に示すように、FIFO のレイテンシは FIFO_RD_CLK によって異なります。FIFO_RD_CLK に対して書き込みポインターが早く更新された方が FIFO のレイテンシは短くなります。

図 2-38: RX_BITSLICE FIFO のレイテンシ (DATA_WIDTH = 8)

X-Ref Target - Figure 2-38

X19087-0vnjusLa.jpg
図 2-39: RX_BITSLICE FIFO のレイテンシ (DATA_WIDTH = 4)

X-Ref Target - Figure 2-39

X19086-sNB3QUNY_h.jpg