Vivado 合成では、UltraRAM プリミティブを使用したさまざまなタイプのメモリを推論できます。実際の例は、コーディング ガイドラインを参照してください。
- シングル ポート メモリでは、1 つのポートで読み出しと書き込みの両方が実行されます。ブロック RAM の 3 つの書き込みモードすべてがサポートされますが、UltraRAM 自体は
NO_CHANGE
モードのメモリのように動作します。RTL にWRITE_FIRST
またはREAD_FIRST
モードの動作が記述されている場合、作成される UltraRAM はシンプル デュアル ポート モードに設定されます。 - シンプル デュアル ポート メモリでは、1 つのポートで読み出しを実行し、もう 1 つのポートで書き込みを実行します。Vivado 合成では、これらのメモリを UltraRAM に推論できます。ヒント: ただし、両方のポートが同じクロックである必要があります。
- 完全なデュアル ポート モードでは、両方のポートでメモリに対して読み出しおよび書き込みを実行できます。このモードでは、
NO_CHANGE
モードのみがサポートされます。
注意:
完全なデュアル ポート RAM をシミュレーションする際は、注意が必要です。以前のバージョンのブロック RAM では、アドレス競合はシミュレーション モデルで処理されますが、UltraRAM では異なります。UltraRAM では、ポート A への操作が常にポート B への操作の前に実行されます。あるアドレスに対してポート A が書き込み、ポート B が読み出しを実行する場合、書き込みが実行されてから読み出しが実行されます。ポート A が読み出し、ポート B が書き込みを実行する場合、読み出しが実行されてから書き込みが実行されます。
注意:
完全なデュアル ポート メモリでは、同じアドレスに対して読み出しと書き込みを同じクロック サイクルで実行しないでください。RTL と合成後のシミュレーションの動作が異なるものになる可能性があります。
シンプル デュアル ポートおよび完全なデュアル ポート メモリのどちらも、両方のポートのクロックは同じである必要があります。
異なるスタイルの RAM に加え、推論可能な UltraRAM の機能がほかにもいくつかあります。RAM には、ライト イネーブルよりも優先されるグローバル イネーブル信号があります。標準のライト イネーブルおよびバイト ライト イネーブルがサポートされています。データ出力には以前のブロック RAM と同様のリセットがありますが、SRVAL
は設定できず、0 へのリセットのみがサポートされます。