AMD ブロック RAM メモリは完全なデュアル ポート RAM で、両方のポートでいつでもどのメモリ ロケーションにもアクセスできますが、同じアドレス空間に対して同時に読み出しおよび書き込みが実行されると、ブロック RAM アドレスの競合が発生します。これは、読み出しポートから読み出されるデータが有効ではないために発生します。
ハードウェアでは、読み出される値は、以前のデータ、新しいデータ、または以前のデータと新しいデータの組み合わせとなります。
シミュレーションでは、読み出された値が不明となるため X が出力されます。ブロック RAM の競合の詳細は、デバイスのユーザー ガイドを参照してください。
アプリケーションによっては、この状態を回避したり、設計を変更したりできないことがあります。その場合、ブロック RAM でこれらの違反が検出されないように設定できます。これは、ブロック RAM プリミティブのジェネリック (VHDL) またはパラメーター (Verilog) の SIM_COLLISION_CHECK
文字列で制御します。
次の表に、競合が発生したときのシミュレーション ビヘイビアーを制御する SIM_COLLISION_CHECK
に使用可能な文字列オプションを示します。
文字列 | 書き込み競合メッセージ | 出力への X の書き込み |
---|---|---|
ALL | あり | あり |
WARNING_ONLY | あり | なし。競合発生時にのみ適用され、同じアドレス空間への後続の読み出しで、出力に X が示される可能性があります。 |
GENERATE_X_ONLY | なし | あり |
None | なし | なし。競合発生時にのみ適用され、同じアドレス空間への後続の読み出しで、出力に X が示される可能性があります。 |
インスタンス レベルで SIM_COLLISION_CHECK
を使用すると、各ブロック RAM インターフェイスの設定を変更できます。