AR# 34859

Virtex-6 FPGA ブロック RAM のデザイン アドバイザリ - アドレス空間の重複

説明

アドレスが重複している場合、状況によっては、Virtex-6 FPGA のブロック RAM の内容が破損する可能性があります。このアンサーでは、『Virtex-6 FPGA のメモリ リソース ユーザー ガイド』 (UG363) に記載されている競合に関する情報を補足し、その他のアドレス競合問題についても説明します。

ソリューション

問題の説明 :

特定の状況で、Virtex-6 FPGA のブロック RAM の内容が破損することがあります。

この問題は、ブロック RAM の CLKA と CLKB に異なるクロックを供給しており、次のいずれかの設定を使用している場合にのみ発生します。
  • RAMB36E1 または RAMB18E1 コンポーネントを完全デュアル ポート (TDP) モードで WRITE_MODE = READ_FIRST に設定
  • RAMB36E1 または RAMB18E1 コンポーネントをシンプル デュアル ポート (SDP) モードに設定 (エラー訂正コード (ECC) のインプリメンテーションを含む)

書き込みを実行した後、重複するアドレスのいずれかに対してもう一方のポートでの読み出しが実行されると、読み出しでエラーが発生し、アクセスされたメモリ ロケーションの内容が破損することがあります。ブロック RAM の CLKA と CLKB が同じクロックで駆動されている場合、競合は発生せず、メモリが破損することなく読み出しおよび書き込みが正常に実行されます。この問題の影響を受けるクロッキングの詳細については、次の図および表を参照してください。またこの問題を回避するには「回避策」のセクションを参照してください。



図 1 :







表 1 : アドレス競合のコンディション


RAMB36E1 プリミティブ

RAMB18E1 プリミティブ
アドレス競合
次の条件がすべて揃った場合に発生 :

-両ポートがイネーブル (ENA および ENB = 1)

- 両ポートに異なるクロックを使用 (CLKA ≠ CLKB)

- クロック間の位相オフセットが 100ps ~ 3ns (または次のクロック エッジ)

- A14 ~ A8、A5 が両ポートで同じ

次の条件がすべて揃った場合に発生 :

-両ポートがイネーブル (ENA および ENB = 1)

- 両ポートに異なるクロックを使用 (CLKA ≠ CLKB)

- クロック間の位相オフセットが 100ps ~ 3ns (または次のクロック エッジ)

- A13 ~ A7、A4 が両ポートで同じ


影響を受けるコンポーネント :
  • いずれかのポートの WRITE_MODE が READ_FIRST に設定されている RAMB18E1 または RAMB36E1
  • RAM_MODE=SDP の RAMB18E1 または RAMB36E1
  • いずれかのポートの WRITE モードが READ_FIRST に設定されているすべての UNIMacro コンポーネント



ソフトウェアでの動作 :
  • ISE 11.4 以降 : ブロック RAM が READ_FIRST モード (SDP および ECC モードを含む) で CLKA と CLKB が同じクロックに接続されている場合、警告が表示されます。
  • ISE 12.1 以降 : シミュレーションで問題が示されます。この状況が示され、破損が発生した場合に値が不明になるよう、シミュレーション モデルがアップデートされています。
  • ISE 12.2 およびそれ以降のバージョンには、シンプル デュアル ポート モードのブロック RAM コンフィギュレーションの WRITE_FIRST モードが追加されています。詳細は「回避策」のセクションを参照してください。

影響を受ける IP :

IP のバージョンによっては、このアドレス重複の問題の影響を受けるものがあります。この問題を避けるには、ISE 12.1 またはそれ以降のバージョンで使用可能な最新版 IP を使用してください。



回避策 :
  • 完全デュアル ポート (TDP) モードの場合、READ_FIRST モードに設定する必要があるのかどうかを判断し、READ_FIRST モードに設定する必要がない場合は WRITE_FIRST または NO_CHANGE モードを使用してください。
  • 12.1 ソフトウェアに含まれるアップデートされたシミュレーション モデルを使用して、すべての条件で完全なタイミング シミュレーションを実行します。少なくとも、合成後のシミュレーションを実行し、競合の可能性を調べるようにしてください。
  • ISE 12.2 より、WRITE_FIRST モードがシンプル デュアル ポート (SDP) ブロック RAM でサポートされています。
    • SDP ブロック RAM の RDCLK および WRCLK が同じクロックで駆動される場合は、競合が起きないので READ_FIRST モードを使用します。SDP ブロック RAM の RDCLK および WRCLK が異なる場合は、WRITE_FIRST モードを使用します。WRITE_FIRST モードでは、1 つのポートが書き込み操作を行い、もう 1 つのポートで同時に同じロケーションから読み出し操作を行うケースに対する既存の回避策を考慮してデザインを行う必要があります。
    • CORE Generator IP および XST は WRITE_FIRST モード をサポートするために現在アップデート中です。Block RAM Generator を使用して SDP コンフィギュレーションのブロック RAM を生成する場合、WRITE_FIRST モードを使用するために、このコアの v4.2 を生成します。FIFO Generator v6.2 は必要であれば自動的に WRITE_FIRST モードのシンプル デュアル ポート ブロック RAM を使用します。
    • SDP ブロック RAM で WRITE_FIRST モードを使用するには、UCF ファイルで目的のブロック RAM すべてに次の 2 つの制約を追加します。
    • INST<BRAM_inst_name>WRITE_MODE_A=WRITE_FIRST;
    • INST<BRAM_inst_name>WRITE_MODE_B=WRITE_FIRST;
AR# 34859
日付 07/29/2010
ステータス アクティブ
種類 デザイン アドバイザリ
デバイス 詳細 概略
ツール