競合動作 - 1.0 日本語

Embedded Memory Generator v1.0 LogiCORE IP 製品ガイド (PG326)

Document ID
PG326
Release Date
2020-07-14
Version
1.0 日本語

Embedded Memory Generator コアは、デュアル ポート RAM 構成をサポートしています。各ポートに差はなく、独立していますが、同じメモリ空間にアクセスします。このような構成では、データの競合が発生する可能性があります。競合発生時の動作の影響を、非同期クロックの場合と同期クロックの場合について説明します。

競合と同期クロック: 一般的なガイドライン

同期クロックでは、複数の競合シナリオが考えられます。非同期クロックを使用する場合、一方のポートがデータをメモリ位置に書き込むとき、もう一方のポートは指定された時間が経過するまで、その位置での読み出し、書き込みはできません。この時間 (clock-to-Q、TCQ) は、その他のブロック RAM/UltraRAM スイッチング特性と共に、デバイスのデータシートに記載されています。

同期書き込み/書き込み競合
書き込み/書き込み競合は、両方のポートが同じメモリ位置に書き込もうとした場合に発生します。結果、そのメモリ位置の内容が不明となります。書き込み/書き込み競合は、メモリの内容に影響を与えます。これに対して、書き込み/読み出し競合は、データ出力のみに影響します。
バイト ライトの使用
バイト ライト使用時に、同一のデータ ワードに別々のバイトを書き込んでも、メモリの内容は破損しません。RAM の内容が破損するのは、両方のポートが同じバイトを書き込もうとしたときのみです。次の図は、このケースを示しています。addra = addrb = 0 と想定します。
図 1. 書き込み/書き込み競合の例
同期書き込み/読み出し競合
同期書き込み/読み出し競合は、一方のポートがあるメモリ位置に書き込もうとしているときに、もう一方のポートが同じ位置を読み出した場合に発生します。書き込み/読み出し競合ではメモリの内容は破損しませんが、出力データが有効であるかどうかは、書き込みポートの動作モードに依存します。
  • 書き込みポートがリード ファースト モードの場合、もう一方のポートは古いメモリ内容を確実に読み出すことができます。
  • 書き込みポートがライト ファースト モードまたは変更なしモードの場合、読み出しポート出力のデータは無効です。
  • バイト ライトの場合、読み出しポート出力の更新されたバイトのみが無効になります。

次の図に、書き込み/読み出し競合とバイト ライトの影響を示します。doutb は、ポート A がライト ファースト モードの場合と、リード ファースト モードの場合を示しています。addra = addrb = 0、ポート B は常に読み出し中、すべてのメモリ位置は 0 に初期化されていると想定します。書き込み/読み出し競合では、RAM の内容が破損することはありません。

図 2. 書き込み/読み出し競合の例

競合とシンプル デュアル ポート RAM

シンプル デュアル ポート RAM では、リード ファースト、ライト ファースト、および変更なしの動作モードを、クロッキングにかかわらず利用できます。

シンプル デュアル ポート RAM は、完全なデュアル ポート RAM に類似していますが、ポート A の書き込みインターフェイスとポート B の読み出しインターフェイスのみが接続されています。動作モードは、ポート A またはポート B の書き込みと読み出しの関係を定義するもので、アドレス競合時のポート A とポート B の関係のみに影響します。

同期クロックで競合発生時、ポート A の書き込みモードは、ポート B の読み出し動作がデータを生成する (リード ファーストのように動作する) か、不定データ (X) を生成するように設定できます。そのため、シンプル デュアル ポート RAM として構成するときは、常にリード ファーストを使用することをお勧めします。非同期クロックでは、競合時の安全性のため、ザイリンクス は、ポート A の書き込みモードをライト ファーストに設定することをお勧めします。