Dual Port RAM - 2022.1 日本語

Vitis Model Composer ユーザー ガイド (UG1483)

Document ID
UG1483
Release Date
2022-05-26
Version
2022.1 日本語

ザイリンクス Dual Port RAM ブロックは、ランダム アクセス メモリ (RAM) をインプリメントします。デュアル ポートでは、複数のデータ幅を使用して異なるサンプル レートでメモリ空間に同時にアクセスできます。

ブロックのインターフェイス

このブロックには、読み出しと書き込みを同時に実行できるように、個別のポート セットが 2 つあります。個別のアドレス、データ、および書き込みイネーブル ポートにより、1 つのメモリ空間への共有アクセスが可能です。デフォルトでは、各ポート セットには、1 つの出力ポートと、アドレス、入力データ、ライ トイネーブルの 3 つの入力ポートがあります。オプションで、各入力ポート セットにポート イネーブル信号と同期リセット信号を追加できます。

デュアル ポート RAM は、FPGA 内の分散メモリ、ブロック RAM、または UltraRAM リソースを使用してインプリメントできます。

Form Factors

Dual Port RAM ブロックでは、さまざまなフォーム ファクター (FF) もサポートされます。フォーム ファクターは次のように定義されます。

FF = WB / WA

ここで、WB はポート B のデータ幅、WA はポート A のデータ幅です。

ポート B (DB) のワード数は、指定されたフォーム ファクターから次のように推論されます。

DB = DA / FF

フォーム ファクター 1 に対しては、ポート A と B のデータ入力ポートの演算型と 2 進小数点の位置を異なるものにできます。フォーム ファクターが 1 より大きい場合、ポート A とポート B のデータ入力ポートは、2 進小数点が 0 の符号なし演算型にする必要があります。出力ポート A および B のデータ型は、対応する入力データ ポートとと同じになります。

メモリ ブロック内の位置は、各アドレス ポートに有効なアドレスを指定することにより、読み出しまたは書き込みでアクセスできます。有効なアドレスは、0 ~ d-1 の符号なし整数です (d は特定のポートの RAM のワード数)。メモリの範囲を超えて読み出そうとすると、シミュレーションでエラーとなります。デュアル ポート RAM が分散メモリまたはブロック RAM でインプリメントされている場合、RAM の初期内容をブロック パラメーターを使用して指定できます。各ライト イネーブル ポートは、ブール値である必要があります。WE ポートが 1 の場合、データ入力の値がアドレス ラインで指定された場所に書き込まれます。

Write Mode

Dual Port RAM ブロックをブロック RAM にインプリメントする場合、[Block Parameters] ダイアログ ボックスでブロックの書き込みモードを設定できます。

書き込み操作中の出力は、書き込みモードによって決まります。WE が 0 の場合、出力ポートの値はアドレス ラインで指定された位置の値になります。書き込み操作 (WE アサート) では、入力データ ポートのデータが、メモリのアドレス入力ポートで選択された場所に格納されます。書き込みサイクル中の各データ出力ポート A と B の動作は、次のいずれかに設定できます。

  • Read after write
  • Read before write
  • No read on write

書き込みモードは、下の図で説明できます。図では、メモリの初期値は 5、アドレス ビットは 4 に指定されています。No read on write モードを使用すると、出力はアドレス ラインに影響されず、WE が 0 のときの最後の出力と同じ値になります。ほかの 2 つのモードでは、出力はアドレス ラインで指定された場所から取得されるので、書き込まれる場所の値となります。Read after write の場合、出力は古い値になります。

図 1. 書き込みモードの出力


Collision Behavior

両方のポートに同時にアクセスした場合、次のようになります。

Read-Read Collisions

両方のポートが同じメモリ セルから同時に読み出した場合、読み出し操作は正しく実行されます。

Write-Write Collisions

両方のポートが同じメモリ セルに同時に書き込もうとすると、両方の出力が無効 (nan) とマークされます。

Write-Read Collisions

この競合は、1 つのポートが書き込みを実行し、もう 1 つのポートが同じメモリ セルから読み出しを実行した場合に発生します。メモリの内容は破損しませんが、読み出しポートの出力データが有効であるかどうかは、書き込みポートの書き込みモードによります。

  • 書き込みポートが Read before write モードの場合、もう一方のポートは古いメモリ内容を確実に読み出すことができます。
  • 書き込みポートが Read after write モードまたは No read on write モードの場合、読み出しポートの出力データは無効 (nan) になります。

各ポートの書き込みモードは、[Block Parameters] ダイアログ ボックスの Advanced タブで設定できます。

ブロック パラメーター

Simulink モデルでブロックのアイコンをダブルクリックすると、Block Parameters ダイアログ ボックスが開きます。

Basic タブ
Basic タブには、次のパラメーターがあります。
Depth
ポート A のメモリのワード数を指定します。正の整数で指定する必要があります。ポート B のワード数は、入力データ幅で指定されたフォーム ファクターから推論されます。
Initial value vector
分散メモリまたはブロック RAM の初期メモリ内容を指定します。初期値ベクターの要素のサイズと精度は、ポート A に指定されたデータ フォーマットに基づきます。ベクターが RAM より長い場合、ベクターの末尾の要素は破棄されます。RAM がベクターより長い場合は、RAM の末尾のワードは 0 に設定されます。初期値ベクターには、RAM のデータ ポート A で指定された精度に基づいて、飽和および丸めが実行されます。
注記: UltraRAM メモリは、電源投入時またはデバイス リセット時にすべて 0 に初期化されます。Single Port RAM ブロックを UltraRAM にインプリメントした場合は、ユーザー定義の値に初期化できません。
Memory Type
Dual Port RAM を Distributed memoryBlock RAMUltraRAM のいずれにインプリメントするかを選択します。分散デュアル ポート RAM は、ポート A は Read Before Write モード、ポート B は Read-Only モードで使用するよう設定されます。

Memory Type の選択によって、デザインをコンパイルしたときに、Dual Port RAM はこのように推論またはインプリメントされます。

  • ブロックを Distributed memory にインプリメントする場合、デザインをコンパイルしたときに Distributed Memory Generator v8.0 LogiCORE IP が推論またはインプリメントされます。この LogiCORE IP については、 『Distributed Memory Generator LogiCORE IP 製品ガイド』 (PG063) を参照してください。
  • ブロックをブロック RAM または UltraRAM にインプリメントする場合は、デザインをコンパイルしたときに、XPM_MEMORY_TDPRAM (完全なデュアル ポート RAM) マクロが推論またはインプリメントされます。XPM_MEMORY_TDPRAM ザイリンクス パラメーター指定マクロ (XPM) の詳細は、 『UltraScale アーキテクチャ ライブラリ ガイド』 (UG974) を参照してください。

Initial value for port A output Register
ポート A の出力レジスタの初期値を指定します。初期値には、RAM のデータ ポート A で指定された精度に基づいて、飽和および丸めが実行されます。
Initial value for port B output register
ポート B の出力レジスタの初期値を指定します。初期値には、RAM のデータ ポート B で指定された精度に基づいて、飽和および丸めが実行されます。
Provide synchronous reset port for port A output register
ブロック RAM または UltraRAM のポート A の出力レジスタにあるリセット ポートを有効にします。リセット ポートは、ブロック RAM または UltraRAM のレイテンシが 1 以上の場合にのみ使用可能です。
Provide synchronous reset port for port B output register
ブロック RAM または UltraRAM のポート B の出力レジスタにあるリセット ポートを有効にします。リセット ポートは、ブロック RAM または UltraRAM のレイテンシが 1 以上の場合にのみ使用可能です。
Provide enable port for port A
ポート A のイネーブル ポートを有効にします。イネーブル ポートは、レイテンシが 1 以上の場合にのみ使用可能です。
Provide enable port for port B
ポート B のイネーブル ポートを有効にします。イネーブル ポートは、レイテンシが 1 以上の場合にのみ使用可能です。
Advanced タブ
Advanced タブには、次のパラメーターがあります。
Write Modes
Port A or Port B
Dual Port RAM ブロックをブロック RAM にインプリメントする場合に、WE がアサートされたときのポート A またはポート B のメモリ動作を指定します。サポートされるモードは、Read after writeRead before write、および No read On write です。Read after write を選択すると、出力値は書き込み後のメモリのステートを反映します。Read before write を選択すると、出力値は書き込み前のメモリのステートを反映します。No read on write を選択すると、メモリのアドレスまたはステートにかかわらず、出力値は変化しません。これらのモードの適用には、デバイス特定の制限があります。詳細は、[Write Mode] の説明を参照してください。

このブロックで使用されるその他のパラメーターについては、[Block Parameters] ダイアログ ボックスの共通オプション を参照してください。

™LogiCORE および XPM 資料

『Distributed Memory Generator LogiCORE IP 製品ガイド』 (PG063) (分散メモリ)

『UltraScale アーキテクチャ メモリ リソース ユーザー ガイド』 (UG573) - XPM_MEMORY_TDPRAM マクロ (UltraRAM)