AN 886: Agilex™ 7 デバイスのデザイン・ガイドライン

ID 683634
日付 10/09/2023
Public
ドキュメント目次

5.1.8.2.4. FPGAからのキャッシュ可能なデータアクセスおよびキャッシュ不可能なデータアクセスの例

例1: FPGAで非キャッシュ・コヒーレント・データをHPS EMIFから直接読み出す

この例では、FPGAからHPS EMIFに格納されているデータにアクセスする必要があります。MPUがアクセスするデータと同じデータのコピーにFPGAがアクセスするには、L1データキャッシュとL2キャッシュにデータのコピーが既にある場合はそれらをフラッシュする必要があります。HPS EMIFにデータの最新コピーが含まれている場合にFPGAからこのデータにアクセスする最適なパスは、FPGAマスターからFPGA-to-HPSブリッジを介して、SDRAMを直接ターゲットとしてデータを読み取ることです。

図 9. FPGAでの非キャッシュ・コヒーレント・データの読み出し

FPGA-to-HPSブリッジを最適化して読み出しスループットを最大化するには、システム要件に基づきブリッジ幅を設定します。インテルでは、バースト対応可能なFPGAのマスターを使用し、4ビート以上のバースト長をポスティングできるSDRAMから読み出すことを推奨しています。

例2: FPGAで非キャッシュ・コヒーレント・データをHPS EMIFに直接書き込む

この例では、HPS MPUからFPGA内を起源とするデータにアクセスする必要があります。データが書き込まれた後にMPUがコヒーレンシーをもってデータにアクセスするには、転送が開始する前にソフトウェアでキャッシュラインをフラッシュまたは無効化し、書き込み後にSDRAMに最新データが含まれるようにする必要があります。キャッシュ操作を実行しないと、1つまたは複数のキャッシュラインが最終的にエビクションされ、FPGAマスターによって書き込まれたデータが上書きされる可能性があります。

図 10. FPGAでの非キャッシュ・コヒーレント・データの書き込み
注: FPGAでHPS EMIFから直接データを読み出す例1と同様に、FPGA-to-HPSブリッジを最適化して書き込みスループットを最大化するには、システム要件に基づきブリッジ幅を設定します。

例3: FPGAでHPSからキャッシュ・コヒーレント・データを読み出す

この例では、FPGAからHPSを起源とするデータにアクセスする必要があります。このデータにはHPSのMPUが最近アクセスしているため、データがまだキャッシュに含まれている可能性があります。よって、キャッシュされたデータにFPGAでアクセスすることが最適だと考えられます。ダーティー・キャッシュ・ラインをフラッシュするソフトウェアのオーバーヘッドを回避するため、FPGAでFPGA-to-HPSブリッジを介してコヒーレント読み出しを実行することができます。読み出すバッファーは比較的小さいことが重要です。そうでない場合、L2キャッシュはほとんどの転送で、SDRAMからのデータの読み出しをスラッシングする可能性があります。大規模なバッファー転送には、例1 (FPGAでHPS EMIFから直接データを読み出す) で示されているように、FPGAでFPGA-to-HPSブリッジを介して直接SDRAMにアクセスし、データを読み出すほうが適切です。

ガイドライン: FPGA-to-HPSブリッジをターゲットとするフルアクセスを実行します

トランザクションをキャッシュ可能にするには、FPGAマスターでFPGA-to-HPSブリッジから読み出し、ACE-Liteプロトコルのキャッシュ拡張信号を利用する必要があります。キャッシュ・コヒーレント・アクセスに向けたACE-Liteプロトコル信号拡張の詳細に関しては、 Agilex™ 7ハード・プロセッサー・システムのテクニカル・リファレンス・マニュアルで、キャッシュ・コヒーレンシー・ユニットのセクションを参照してください。

図 11. FPGAでのキャッシュ・コヒーレント・データの読み出し

ガイドライン: FPGA-to-HPSブリッジをターゲットにし、64バイトにアライメントされたキャッシュ可能なアクセスを実行します

HPSのCCUは、キャッシュラインと同じサイズ (64バイト) のトランザクションに向けて最適化されています。そのため、データを64バイト境界に揃え、データ幅の調整後に、512ビットFPGA-to-HPSブリッジへのバースト長が最大になるようにする必要があります。例えば、128ビットのFPGAマスターは、データを64バイトにアライメントし、バースト長4で128ビット (16バイト) 全体のアクセスを実行します。

ガイドライン: キャッシュ可能なトランザクションごとに64バイトにアクセスします

各バースト・トランザクションでは64バイトにアクセスするようにします。各トランザクションは、64バイト境界で開始する必要があります。

表 27.  64バイト・アライメントのバースト長
FPGAマスター幅 (ビット) アクセスサイズ (バイト) バースト長
32 4 16
64 8 8
128 16 4
256 32 2
512 64 1

例4: FPGAでキャッシュ・コヒーレント・データをHPSに書き込む

この例では、HPS MPUでFPGAを起源とするデータにアクセスする必要があります。小さなデータブロックをMPUと共有する最も効率的なメカニズムは、FPGA内のロジックでHPSへのキャッシュ可能な書き込みを実行することです。HPSに書き込まれるデータは、比較的小さなブロックの形式であることが重要です。これは、大きなブロックの書き込みはL2キャッシュのスラッシングにつながり、ほとんどの転送でキャッシュがSDRAMに書き込まれるようになるためです。大規模なバッファー転送においては、例2に示すように、SDRAMを直接ターゲットとしてFPGAでFPGA-to-HPSブリッジにデータを書き込むほうが適切です。

ガイドライン: FPGA-to-HPSブリッジをターゲットとするフルアクセスを実行します

トランザクションをキャッシュ可能にするには、FPGAマスターでFPGA-to-HPSブリッジに書き込み、ACE-Liteプロトコルのキャッシュ拡張信号を利用する必要があります。キャッシュ・コヒーレント・アクセスに向けたACE-Liteプロトコル信号拡張の詳細に関しては、 Agilex™ 7ハード・プロセッサー・システムのテクニカル・リファレンス・マニュアルで、キャッシュ・コヒーレンシー・ユニットのセクションを参照してください。

図 12. FPGAでのキャッシュ・コヒーレント・データの書き込み略語については、HPSメモリーマップド・インターフェイスの概要にある図を参照してください。

ガイドライン: L2 ECCが有効になっている場合、FPGA-to-HPSブリッジへのキャッシュ可能なアクセスが8バイト境界でアライメントされていることを確認します

L2キャッシュでエラー検出と訂正 (ECC) を有効にする場合は、8バイトの各データグループが完全に書き込まれるようにする必要があります。L2キャッシュは64ビット境界でECC動作を実行するため、キャッシュ可能なアクセスを実行する際はかならず、アクセスを8バイト境界に揃え、一度に8つのレーンすべてに書き込む必要があります。これらの規則に従わないと、ダブル・ビット・エラーが発生し、回復することができません。

ECCが有効になっているか無効になっているかにかかわらず、64バイトのキャッシュ・トランザクションでは最良のパフォーマンスがもたらされます。64バイトのキャッシュ・トランザクションについては、「例3: FPGAでHPSからキャッシュ・コヒーレント・データを読み出す」のセクションにある「ガイドライン: キャッシュ可能なトランザクションごとに64バイトにアクセスします」を参照してください。

ガイドライン: L2 ECCが有効になっている場合、FPGA-to-HPSブリッジへのキャッシュ可能なアクセスで8つの書き込みストローブのグループが有効になっていることを確認します

  • 32ビットFPGAマスターからのFPGA-to-HPSアクセスでは、バースト長を2、4、8または16にし、書き込みバイトストローブをすべて有効にする必要があります。
  • 64ビットFPGAマスターからのFPGA-to-HPSアクセスでは、すべての書き込みバイトストローブを有効にする必要があります。
  • 128ビットFPGAマスターからのFPGA-to-HPSアクセスでは、上位8または下位8 (またはその両方) の書き込みバイトストローブを有効にする必要があります。