UltraRAM は、1 つのクロックを使用する 2 つのポートを持つ 4Kx72 メモリ ブロックです。このプリミティブは、一部の AMD UltraScale+™ デバイスでのみ使用可能です。これらのデバイスでは、ブロック RAM リソースに加えて UltraRAM が含まれています。
デザインで UltraRAM を使用するには、次のいずれかの方法を使用します。
- HDL のメモリ宣言に
ram_style = "ultra"
属性を設定して合成で UltraRAM が推論されるようにする。 - AMD XPM_MEMORY プリミティブをインスタンシエートする。
- UltraRAM UNISIM プリミティブをインスタンシエートする。
下に示すコード例は、HDL 言語テンプレートに含まれる XPM メモリのインスタンシエーションです。ハイライトされている MEMORY_PRIMITIVE
および READ_LATENCY
が、メモリを UltraRAM に推論してリソース マップの効率を最適化するための主要なパラメーターです。
-
MEMORY_PRIMITIVE = "ultra"
は、メモリを UltraRAM として推論するよう指定します。 -
READ_LATENCY
は、メモリの出力に存在するパイプライン レジスタの数を指定します。
大型メモリは、複数の UltraRAM セルを行 x 列の構造に構成した UltraRAM マトリックスにマップされます。
マトリックスは、ワード数によって、1 列または複数列で作成できます。UltraRAM 列の高さのデフォルトしきい値は 8 ですが、CASCADE_HEIGHT 属性を使用して制御できます。
1 列と複数列の UltraRAM マトリックスの違いは、次のとおりです。
- 1 列 UltraRAM マトリックスでは、ファブリック ロジックを使用せずにビルトインのハードウェア カスケードが使用されます。
- 複数列 UltraRAM マトリックスでは、各列にビルトインのハードウェア カスケードが使用され、列どうしを接続するためにファブリック ロジックが使用されます。達成可能なクロック周波数を保持するため、パイプラインを追加する必要がある場合があります。これは、読み出しレイテンシを増加することにより制御されます。Vivado ツールでは、必要に応じてこれらのレジスタが UltraRAM に自動的に挿入されます。図 1. RTL コードでの UltraRAM の指定 (XPM を使用)
上記の例では、8 つの UltraRAM を使用する 32K x 72 メモリ構造が使用されています。UltraRAM の最大クロック周波数を向上するには、カスケード チェーンにさらにパイプライン レジスタを追加する必要があります。これは、読み出しレイテンシのパラメーター値を増加することにより達成されます。
Vivado 合成での UltraRAM の推論に関する詳細は、 『Vivado Design Suite ユーザー ガイド: 合成』 (UG901) のこのセクションを参照してください。