ザイリンクス Single Port RAM ブロックは、1 つのデータ入力および 1 つのデータ出力ポートを使用してランダム アクセス メモリ (RAM) をインプリメントします。
ブロックのインターフェイス
このブロックは、アドレス、入力データ、ライト イネーブル (WE) 用に出力ポートを 1 つと入力ポートを 3 つ備えています。Single Port RAM の値はワード単位で保存され、すべてのワードは演算型、幅、2 進小数点の位置が同じです。
シングル ポートの RAM は、FPGA のブロックメモリ、分散メモリ、または UltraRAM リソースのいずれかを使用してインプリメント可能です。各データ ワードは、1 つのアドレスに関連付けられます。このアドレスは、0 ~ d-1 の符号なし整数である必要があります (d は RAM のワード数)。メモリのアドレス範囲を超えて読み出そうとすると、シミュレーションではエラーになりますが、ブロック メモリ インプリメンテーションを選択した場合、ハードウェアでは指定したアドレス範囲を超えて読み出すことが可能です (予期しない結果になる可能性あり)。シングル ポート RAM が分散メモリまたはブロック RAM でインプリメントされている場合は、ブロック パラメーターを使用して RAM の初期内容を指定できます。
ライト イネーブル信号は Bool 型である必要があり、その値が 1 のとき、データ入力はアドレス入力で示されるメモリ位置に書き込まれます。書き込み中の出力は、どのメモリ インプリメンテーションが選択されているかによって異なります。
出力ポートの動作は、選択されている書き込みモード (次を参照) に依存します。WE が 0 の場合、出力ポートの値はアドレス ラインで指定された位置の値になります。
ブロック パラメーター
Simulink® モデルでブロックのアイコンをダブルクリックすると、Block Parameters ダイアログ ボックスが開きます。
- Basic タブ
-
Basic タブには、次のパラメーターがあります。
- Depth
- メモリのワード数は正の整数である必要があります。
- Initial value vector
-
メモリの初期内容を指定します。ベクターの長さがメモリのワード数を超える場合、ワード数より大きいインデックスの値は無視されます。ワード数がベクターの長さを超える場合、ベクターの長さより大きいアドレスのメモリ位置は 0 に初期化されます。初期値には、データ ポートで指定された精度に基づいて、必要に応じて飽和および丸めが実行されます。
UltraRAM メモリは、電源投入時またはデバイス リセット時にすべて 0 に初期化されます。Single Port RAM ブロックを UltraRAM にインプリメントした場合は、ユーザー定義の値に初期化できません。
- Memory Type
- シングル ポート RAM を Distributed
memory、Block
RAM、または UltraRAM のいずれにインプリメントするかを選択します。
Memory Type の選択により、シングル ポート RAM は、デザインのコンパイル時に次のように推論またはインプリメントされます。
- ブロックを Distributed memory にインプリメントする場合、デザインをコンパイルしたときに Distributed Memory Generator v8.0 LogiCORE IP が推論またはインプリメントされます。この LogiCORE IP の詳細は、 『Distributed Memory Generator LogiCORE IP 製品ガイド』 (PG063) を参照してください。
- ブロックをブロック RAM または UltraRAM にインプリメントする場合は、デザインをコンパイルしたときに、XPM_MEMORY_SPRAM (シングル ポート RAM) マクロが推論またはインプリメントされます。ザイリンクス パラメーター指定マクロ (XPM) の XPM_MEMORY_SPRAM の詳細は、 『UltraScale アーキテクチャ ライブラリ ガイド』 (UG974) を参照してください。
- Write Mode
- WE がアサートされたときのメモリ動作を指定します。サポートされるモードは、Read after write、Read before write、および No read On write です。Read after write を選択すると、出力値は書き込み後のメモリのステートを反映します。Read before write を選択すると、出力値は書き込み前のメモリのステートを反映します。No read on write を選択すると、メモリのアドレスまたはステートにかかわらず、出力値は変化しません。これらのモードの適用には、デバイス特定の制限があります。詳細は、この後の「書き込みモード」および「ハードウェアに関する注記」を参照してください。
- Provide reset port for output register
- ブロック RAM または UltraRAM に対して、RAM の出力レジスタを制御するリセット ポートを有効にします。このポートは、メモリの内容を初期化しません。注記: ブロック RAM または UltraRAM では、ブロック RAM のレイテンシが 1 以上の場合にのみ、リセット ポートが使用可能です。
- Initial value for output register
-
ブロック RAM に対して、出力レジスタの初期値を指定します。初期値には、ブロック RAM のデータ ポートで指定された精度に基づいて、飽和および丸めが実行されます。
UltraRAM の場合、出力レジスタはすべて 0 に初期化されます。UltraRAM 出力レジスタをユーザー定義の値に初期化することはできません。
このブロックで使用されるその他のパラメーターについては、この章の最初にある [Block Parameters] ダイアログ ボックスの共通オプション を参照してください。
書き込みモード
書き込み操作 (WE アサート) では、データ入力のデータが、メモリのアドレス入力で選択された場所に格納されます。書き込み操作が実行されたときのデータ出力ポート A の動作は、次のいずれかのモードに設定できます。
- Read after write
- Read before write
- No read on write
これらのモードは、下の図で説明できます。図では、メモリの初期値は 5、アドレス ビットは 4 に指定されています。No read on write モードを使用すると、出力はアドレス ラインに影響されず、WE が 0 のときの最後の出力と同じ値になります。ほかの 2 つのモードでは、出力はアドレス ラインで指定された場所から取得されるので、書き込まれる場所の値となります。つまり、出力は古い値 (Read before write mode) または新しい値 (Read after write mode) のいずれかになります。
ハードウェアに関する注記
分散メモリ LogiCORE™ では、™Read before write モードのみがサポートされます。ザイリンクス Single Port RAM ブロックでは、指定したレイテンシが 0 より長い場合、Write Mode オプションを Read after write に設定した分散メモリも使用できます。分散メモリの Read after write モードは、追加のハードウェア リソース (書き込み操作中にデータをラッチするための分散メモリ出力の MUX) を使用して達成できます。