ワード数の多いメモリでは、RTL で RAM_DECOMP 合成属性を使用してメモリの構成を向上することにより、消費電力を削減できます。メモリ配列に RAM_DECOMP 属性を適用すると、メモリ ロジックは幅の広い配列のブロック RAM プリミティブにマップされます。消費電力とクロック周波数のバランスを取るため、CASCADE_HEIGHT 属性と RAM_DECOMP 属性を組み合わせて使用してカスケードを制御できます。この方法ではアドレス デコード ロジックがより多く必要になりますが、各読み出し操作でイネーブルになるブロック RAM の数が削減されるので、消費電力が削減されます。
次の図に、32x16K メモリの例を示します。
ram_decomp = "power"
cascade_height = 4
16 個の RAMB36E2 が推論され、メモリは次のように分解されます。
- 基本のプリミティブは 32x1K です。
- 4 つのブロック RAM がカスケード接続され、32x4K が作成されます。
- これを 4 つ並列に構成することにより、ワード数が 16K のメモリが作成されます。
- これらの出力がマルチプレクサーで結合され、出力データが作成されます。図 2. CASCADE_HEIGHT および RAM_DECOMP 属性を使用して生成された 32x16K メモリの構造例
次の RTL コードに、CASCADE_HEIGHT および RAM_DECOMP 属性の使用例を示します。
ram_decomp = "power"
属性のみを適用すると、16 個の RAMB36E2 が推論され、メモリは次のように分解されます。
- 基本のプリミティブは 32x1K です。
- 8 つのブロック RAM がカスケード接続され、32x8K が作成されます。
- これを 2 つ並列に構成することにより、ワード数が 16K のメモリが作成されます。
- これらの出力が 2:1 マルチプレクサーで結合され、出力データが作成されます。図 4. RAM_DECOMP 属性を使用して生成された 32x16K メモリの構造例
次の RTL コードに、RAM_DECOMP 属性の使用例を示します。
RAM_DECOMP 属性のみを使用した場合、全体的な消費電力の削減量は RAM_DECOMP および CASCADE_HEIGHT 属性の両方を使用した場合に近いですが、一度にアクティブになるブロック RAM は 1 つのみです。4 ワード数のカスケード ブロック RAM チェーンの方が 8 ワード数のカスケード ブロック RAM チェーンよりも最大クロック周波数が向上します。
詳細は、 『Vivado Design Suite ユーザー ガイド: 合成』 (UG901) のこのセクションを参照してください。