AR# 34533

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

説明

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

ソリューション

問題の説明 :

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

この問題は、ブロック RAM の CLKA と CLKB に異なるクロックを供給しており、書き込み前の読み出しモードを次のいずれかの設定で使用している場合にのみ発生します。
  • RAMB16BWER または RAMB8BWER コンポーネントを完全デュアル ポート (TDP) モードで WRITE_MODE = READ_FIRST に設定
  • RAMB8BWER コンポーネントをシンプル デュアル ポート (SDP) モードで WRITE_MODE = READ_FIRST に設定

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


Figure 1:



表 1 : アドレス競合の発生する状況
RAMB16 プリミティブ RAMB8 プリミティブ
アドレス競合 両ポートがイネーブル (ENA および ENB = 1)、両ポートに異なるクロックを使用 (CLKA CLKB)、クロック間の位相オフセットが 100ps ~ 3ns (または次のクロック エッジ)、および次のいずれか
1) 両ポートの幅が 18 以下 : A13 ~ A6、A4 が両ポートで同じ
2) 両ポートまたはいずれかのポートの幅が 36 : A13 ~ A7、A5 が両ポートで同じ
両ポートがイネーブル (ENA および ENB = 1)、両ポートに異なるクロックを使用 (CLKA CLKB)、および A13 ~ A6、A4 が両ポートで同じ
アドレス競合なし いずれかのポートがディスエーブル (ENA または ENB = 0)、両ポートに同じクロックを使用 (CLKA == CLKB)、クロック間の位相オフセットが 100ps ~ 3ns (または次のクロック エッジ)、および 2 つのポートの次のいずれかのアドレスが常に異なる
1) 両ポートの幅が 18 以下 : A13 ~ A6、A4
2) 両ポートまたはいずれかのポートの幅が 36 : A13 ~ A7、A5
  • 2 つのポートの A12 ~ A6、A4 のいずれかが常に異なる
  • いずれかのポートがディスエーブル
シングル ポート (ポート A/B の上記のアドレスのいずれかを固定)


問題が発生するコンポーネント :

  • いずれかのポートの WRITE_MODE が READ_FIRST に設定されている TDP モードの RAMB16BWER または RAMB8BWER
  • WRITE_MODE が READ_FIRST に設定されている SDP モードの RAMB8BWER
  • いずれかのポートの WRITE モードが READ_FIRST に設定されているすべての UNIMacro コンポーネント

ソフトウェアでの動作 :
  • ISE 12.3 以降 - アドレス重複問題の推奨される回避策として SDP Write First モードが含まれるようになりました。SDP Write First モードの場合、アドレス重複は発生しますが、読み出しでエラーになるだけで、メモリー セルは破損しません。詳細は「回避策」のセクションを参照してください。
  • ISE 12.1 および 12.2 - シミュレーションで問題が示されます。この状況が示され、破損が発生した場合に値が不明になるよう、シミュレーション モデルがアップデートされています。
  • ISE 11.5 以前 - シミュレーションでは問題は示されません。シミュレーションの動作は正常で、エラーや警告は生成されませんが、ハードウェアではメモリ アレイまたは読み出し破損の形で機能エラーが発生します。

回避策 :
  • ISE 12.3 より、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.3 のコアを選択します。 FIFO Generator v6.3 は、必要であれば自動的に WRITE_FIRST モードのシンプル デュアル ポート ブロック RAM を使用します。
    • SDP ブロック RAM で WRITE_FIRST モードを使用するには、UCF ファイルで目的のブロック RAM すべてに次の 2 つの制約を追加します。 
    • INSTWRITE_MODE_A=WRITE_FIRST;
    • INSTWRITE_MODE_B=WRITE_FIRST;
  • 完全デュアル ポート (TDP) モードの場合、READ_FIRST モードに設定する必要があるのかどうかを判断し、READ_FIRST モードに設定する必要がない場合は WRITE_FIRST または NO_CHANGE モードを使用してください。
  • ISE 12.1 ソフトウェアに含まれるアップデートされたシミュレーション モデルを使用して、すべての条件で完全なタイミング シミュレーションを実行します。少なくとも、合成後のシミュレーションを実行し、競合の可能性を調べるようにしてください。
AR# 34533
日付 12/07/2015
ステータス アクティブ
種類 デザイン アドバイザリ
デバイス
ツール 詳細 概略