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!

AR# 22462

Virtex-4 FPGA - FIFO16 のフラグが正しく機能しない

説明

キーワード : flags, almost, empty, full, フラグ

FIFO16 のエラー発生条件とその回避策

FIFO16 のフラグ (ALMOSTFULL、FULL、 ALMOSTEMPTY、EMPTY) が、ある特定のシーケンス後に正常に機能しなくなります。FULL および EMPTY フラグの設定が不正な場合、FIFO の基本的動作にも影響を及ぼすことがあります。 このアンサーでは、エラーの発生する条件の詳細と、あらゆる動作条件下で FIFO16 を正常に動作させるための同期クロックおよび非同期クロックでのソリューションを説明します。

FIFO16 エラーの発生条件

基本的な Virtex-4 FIFO16 では、次のシーケンスが発生すると、ALMOSTEMPTY および EMPTY フラグが正常に機能しなくなります。

1. 読み出しと書き込み、またはそのいずれかのシーケンスにより、FIFO のワード数が ALMOST_EMPTY_OFFSET のしきい値 (読み出し後は上位から、書き込み後は下位から) に一致し、この後に書き込みまたは読み出しのいずれかが実行されます。
2. この読み出しまたは書き込み直後に、同時読み出し/書き込みが実行され、読み出しおよび書き込みのアクティブ クロック エッジが一致あるいは僅差 (<500ps) となると、ALMOSTEMPTY フラグが正常に機能しなくなります。ALMOSTEMPTY は、EMPTY をデコードする条件であるため、EMPTY フラグも不正となってしまいます。

ALMOST_FULL_OFFSET 付近での同様のシーケンスでも、ALMOSTFULL および FULL フラグが正常に機能しなくなります。

ソリューション

同期クロックでの回避策

同期デザインでは、読み出しクロックと書き込みクロックを約 1ns オフセットすることで同時読み出し/書き込みを回避できます。これは、読み出しと書き込みに反対のクロック エッジを使用することで、容易に実現できます。くのアプリケーションでは、読み出しと書き込みを同じクロック ドメインに戻すために、データを再同期化するレジスタが必要です。図 1 にこの概念を示します。この再同期化は、クリティカルな EMPTY フラグのレイテンシを回避するため、入力側で行う必要があります。FULL フラグはレイテンシが 2 クロックとなり、有益ではなくなるので、代わりに ALMOSTFULL を使用してください。回路のこの部分は 2 倍のクロック レートで動作するので、入力レジスタと FIFO16 間の接続には厳しい制約を設定する必要があります。

図 1 - 同期クロックでの回避策
図 1 - 同期クロックでの回避策


非同期クロックでの回避策

非同期デザインでは、2 つのクロックが僅差 (<500ps) となる状況を回避できないので、前述の問題が発生することがありますが、クロック遅延を調整してこの問題を回避することはできません。ザイリンクスでは、回路を追加して FIFO16 でエラーが発生しないようにするソリューションを提供しています。このソリューションは、基本的な FIFO16 と同様に動作し、すべての条件およびクロック周波数で機能します。

この複合 FIFO では、小型の LUTFIFO を追加して非同期バッファとして動作させることにより、FIFO16 が常に同期モードで動作するようにしています。この場合、LUTFIFO が問題とならないよう、速度の大きい方のクロックを FIFO16 ポートに接続する必要があります。
どちらのクロックが高速なのかが不明な場合は、「WRCLK が RDCLK より高速なデザイン」を使用してください。このデザインは、WRCLK が RDCLK より高速な場合、WRCLK が RDCLK と同じまたは位相シフトしたものである場合、または WRCLK と RDCLK の関係が不明な場合など、いかなるクロック周波数の組み合わせでも機能します。このデザインを使用して RDCLK が WRCLK より高速な場合、ALMOSTEMPTY フラグがアサートされる前に EMPTY フラグがアサートされてしまう可能性があります (両クロックがほぼ同じであれば、この問題は発生しません)。これは、FIFO 内の制御ロジックが高速な方のクロックとして指定された WRCLK で動作していますが、実際のシステムでは WRCLK の方が遅いからです。これによりデータが破壊されたり、FIFO が不正に動作することはありません。この状況が発生しており、問題となる場合は、後述の CORE Generator FIFO Generator ブロック RAM を使用した解決方法を参照してください。

どちらのデザインでも、追加ロジックにより 2 つの FIFO 間のデータ転送を制御します。2 つの FIFO 間の特定の信号およびハンドシェークの再同期化によって、複合 FIFO のワード数や Almost_Full_offset および Almost_Empty_offset が多少不安定になる場合があります。詳細は、表 1 を参照してください。

WRCLK が RDCLK より高速なデザイン

このデザインでは、FIFO の WRCLK は WRCLKFIFO16 に接続されています。RDCLKFIFO16 および WRCLKLUTFIFO は、WRCLK を 180位相シフトした WRCLKbar で駆動されます。FIFO の RDCLK は RDCLKLUTFIFO に接続されています。FIFO16 は、複合 FIFO の書き込みインターフェイスを形成し、読み出し側には、小型の LUTFIFO への書き込みにも使用されている書き込みクロックを反転させたクロックを使用します。

図 2 - RDCLK が WRCLK より高速なデザイン
図 2 - RDCLK が WRCLK より高速なデザイン


RDCLK が WRCLK より高速なデザイン

このデザインでは、FIFO の WRCLK は WRCLKLUTFIFO に接続されています。RDCLKLUTFIFO および WRCLKFIFO16 は、RDCLK クロックを 180位相シフトした RDCLKbar で駆動されます。FIFO の RDCLK は RDCLKFIFO16 に接続されています。LUTFIFO は、合成 FIFO の書き込みインターフェイスを形成し、読み出し側には、FIFO16 への書き込みにも使用される読み出しクロックを反転させたクロックを使用します。LUTFIFO フラグは、まとめられて書き込みクロックに同期化され、ALMOSTFULL フラグを生成します。

図 3 - RDCLK が WRCLK より高速なデザイン
図 3 - RDCLK が WRCLK より高速なデザイン


複合 FIFO でプログラム可能なフラグ設定

表 1 に、プログラム可能な ALMOSTEMPTY および ALMOSTFULL フラグのオフセット範囲を FIFO の容量と共に示します。FIFO の全容量は通常クリティカルではないので、ALMOSTFULL フラグは、多くのアプリケーションで警告としてだけではなく書き込みの停止信号として使用されます。ALMOSTEMPTY フラグは、FIFO が EMPTY に近づいた場合の警告として使用できますが、FIFO の最後のデータが確実に読み出されるようにするには、EMPTY がアサートされるまで読み出しを継続してください。

下のデザインファイルで提供される Perl スクリプトでオフセット範囲を設定する場合には、10 進法を使用してください。

表 1 - FIFO の容量と ALMOSTFULL/ALMOSTEMPTY フラグのオフセット
表 1 - FIFO の容量と ALMOSTFULL/ALMOSTEMPTY フラグのオフセット


メモ :
FIFO16 は、FIFO16 の容量を示します次のウェブ サイトから、『Virtex-4 User Guide』 (UG070) の第 4 章「Block RAM」の表 4-9 「FIFO Capacity」を参照してください。
http://japan.xilinx.com/xlnx/xweb/xil_publications_display.jsp?category=User+Guides&iLanguageID=2
[FPGA デバイス ファミリ] を展開して [Virtex-4] をクリックし、 『Virtex-4 ユーザー ガイド』をクリック

AFFIFO16 は、FIFO16 の ALMOST_FULL_OFFSET を設定します。次のウェブ サイトから、『Virtex-4 User Guide』 (UG070) の第 4 章「Block RAM」の表 4-13 「FIFO ALMOSTFULL/EMPTY Flag Offset Range」を参照してください。
http://japan.xilinx.com/xlnx/xweb/xil_publications_display.jsp?category=User+Guides&iLanguageID=2
[FPGA デバイス ファミリ] を展開して [Virtex-4] をクリックし、 『Virtex-4 ユーザー ガイド』をクリック

次のウェブ サイトから、『Virtex-4 User Guide』 (UG070) の第 4 章「Block RAM」の表 4-13 「FIFO ALMOSTFULL/EMPTY Flag Offset Range」を参照してください。
http://japan.xilinx.com/xlnx/xweb/xil_publications_display.jsp?category=User+Guides&iLanguageID=2
[FPGA デバイス ファミリ] を展開して [Virtex-4] をクリックし、 『Virtex-4 ユーザー ガイド』をクリック
すべての値は、読み出し/書き込みのクロック レートと読み出し/書き込みパターンによって、最高 3 ワードまで異なります。

ステータス フラグ

複合 FIFO のステータス フラグの機能は同じですが、信号によってはアサート/ディアサートのレイテンシが増加します。重要な信号 (EMPTY、FULL、ALMOSTEMPTY、 ALMOSTFULL、RDERR、WRERR) のアサート値は、FIFO16 と同じです。表 2 に、ステータス フラグのレイテンシ値を示します。レイテンシの値は、読み出し/書き込みクロック周波数の比および読み出し/書き込みパターンによって変化します。

表 2 - ステータス フラグのアサート/ディアサートのクロック サイクル レイテンシ
表 2 - ステータス フラグのアサート/ディアサートのクロック サイクル レイテンシ


メモ : 太字で示したレイテンシの値は、読み出し/書き込みクロック周波数の比および読み出し/書き込みパターンによって変化します。WRCLK > RDCLK の場合のある条件下では、ALMOSTEMPTY フラグが EMPTY フラグの前にディアサートされます。 このビヘイビアはシミュレーションに反映されますが、ALMOST_EMPTY_OFFSET を増やすことによって修正できます。

リソースの使用率

デザインは、ISE 8.1i で、マップ、配置、配線のデフォルト設定を使用してインプリメントされています。x4 デザインでは LUT 数は 55 ~ 70、x9 デザインでは 65 ~ 80、x18 デザインでは 85 ~ 100、x36 デザインでは 125 ~ 130 です。

読み出し/書き込みクロック周波数が最大の場合のパフォーマンス

読み出し/書き込みクロックの最大周波数は、すべてのコンフィギュレーションおよびモードで 500MHz 以上となります。ただし、512 x 36 のコンフィギュレーションで書き込みクロックが読み出しクロックより高速な場合は、最大周波数は標準モードでは 473MHz、FWFT モードでは 488 MHz となります。

デザイン ファイル

非同期クロックのソリューションに必要なすべてのファイルは、下のリンクからダウンロード可能な ZIP ファイルに含まれています。異なる FIFO のコンフィギュレーションに対して NGC ファイルおよびシミュレーション モデルを生成する Perl スクリプトが提供されています。Perl スクリプトおよび結果ファイルの使用方法を説明した readme ファイルも含まれています。Perl スクリプトには、書き込みクロック > 読み出しクロック (図 2)、読み出しクロック > 書き込みクロック (図 3)、および書き込みクロック = 読み出しクロック (図 2) の 3 つのクロック オプションがあります。同期クロックのデザインの場合、Perl スクリプトで図 1 はインプリメントされません。このデザインを使用する場合は、図 1 に示すようにレジスタを追加してください。

Perl スクリプトを含む ZIP ファイルは、次のサイトから入手できます。
http://japan.xilinx.com/xlnx/xweb/xil_publications_file.jsp?iLanguageID=2&ipoid=24332297&category=-1210766&filename=v4_fifo16_1_0_1.zip&file=531

次のサイトからも入手できます。
http://japan.xilinx.com/xlnx/xweb/xil_publications_file.jsp?iLanguageID=2&ipoid=24332297&category=-1210766&filename=v4_fifo16_1_0_1.tar.gz&file=532


このソリューションは、ISE 7.1i サービス パック 4、8.1i、8.1i サービス パック 1 および ModelSim バージョン 6.1SE で検証されています。
メモ : スクリプトが使用されている場合、RDCOUNT および WRCOUNT で示される FIFO への読み出し/書き込みビット数が正確でないことがあります。

CORE Generator の回避策
FIFO Generator 3.2 (およびそれ以降) では、上記の回避策が自動的にインプリメントされます。デバイス使用率はコアのデータシートに詳しく記載されています。
http://japan.xilinx.com/bvdocs/ipcenter/data_sheet/fifo_generator_ds317.pdf

同期 FIFO および非同期 FIFO のどちらも、FIFO16 プリミティブを使用する代わりに、CORE Generator から FIFO Generator ブロック RAM FIFO を使用してインプリメントできます。ブロック RAM ベースのインプリメンテーションでは、FIFO の制御ロジックがデバイスのファブリックにインプリメントされるため、FIFO16 ベースのインプリメンテーションに比べて低速になります。FIFO Generator コアの FIFO16 がビルトインされた FIFO コンフィギュレーションでも、上記と同様の問題が発生します。詳細は、次のサイトから FIFO Generator のデータ シートを参照してください。
http://japan.xilinx.com/xlnx/xebiz/designResources/ip_product_details.jsp?sGlobalNavPick=PRODUCTS&sSecondaryNavPick=Intellectual+Property&key=FIFO_Generator

ソフトウェアのアップデート

ISE 8.1i サービス パック 1 以降のソフトウェアでは、同期 FIFO16 (RDCLK および WRCLK が接続されている) がデザインに挿入されているかどうかがツールにより自動的に検出され、次のような警告メッセージが表示されます。

"WARNING:PhysDesignRules:1447 - FIFO16 XLXI_1 has been found to have both RDCLK
and WRCLK input pins connected to the same source XLXN_5_BUFGP.
Please
consult the Xilinx web site for more details."

この警告メッセージが表示されないようにするには、混合 FIFO ソリューションをダウンロードするか、同期 FIFO の回避策を適用してください。

ソフトウェア IP コア

For この問題により影響を受けるソフトウェア IP コアを確認するには、次のサイトを参照してください。
http://japan.xilinx.com/ipcenter/coregen/advisories/ip_cores_impacted_by_fifo16_ar22462_issue.htm

AR# 22462
日付 07/28/2009
ステータス アクティブ
種類 一般
このページをブックマークに追加