インテルのみ表示可能 — GUID: zli1557328324421
Ixiasoft
インテルのみ表示可能 — GUID: zli1557328324421
Ixiasoft
5.1.8.2.4. FPGAからのキャッシュ可能なデータアクセスおよびキャッシュ不能なデータアクセスの例
例1: FPGAによるHPS EMIFからの非キャッシュ・コヒーレント・データの直接読み出し
この例では、FPGAからアクセスする必要があるデータは、HPS EMIFに保存されています。MPUからアクセスするのと同じデータのコピーにFPGAからアクセスするためには、L1データキャッシュとL2キャッシュに既にデータのコピーがある場合は、そのキャッシュをフラッシュする必要があります。HPS EMIFに最新データのコピーが含まれるようになると、FPGAからこのデータにアクセスするための最適なパスは、SDRAMを直接ターゲットとするFPGA-to-HPSブリッジを介して、FPGAマスターからデータを読み出すことです。
FPGA-to-HPSブリッジを最適化して読み出しスループットを最大化するには、システム要件に従ってブリッジ幅を設定します。インテルでは、FPGAにあるバースト可能なマスターを使用し、4ビート以上のバースト長のポスティングが可能なSDRAMから読み出すことをお勧めします。
例2: FPGAによるHPS EMIFからの非キャッシュ・コヒーレント・データの直接読み出し
この例では、HPS MPUからアクセスする必要があるデータは、FPGA内から発生したものです。MPUからデータへのコヒーレント・アクセスが、そのデータの書き込み後にできるようにするには、ソフトウェアによるキャッシュラインのフラッシュまたは無効化を転送開始前に行うことが必要になる場合があります。これにより、最新データがその書き込み後にSDRAMに含まれるようになります。キャッシュ動作の実行に失敗すると、1つ以上のキャッシュラインが排除され、FPGAマスターによって書き込まれたデータが上書きされます。
例3: FPGAによるHPSからのキャッシュ・コヒーレント・データの読み出し
この例では、FPGAからアクセスする必要があるデータは、HPSで発生したものです。HPS内のMPUからこのデータへのアクセスが最近行われたため、データがまだキャッシュに含まれている可能性があります。そのため、場合によっては、FPGAからキャッシュされたデータにアクセスすることが最適です。ソフトウェアのオーバーヘッドによるダーティー・キャッシュ・ラインのフラッシュが必要になる状況を回避するため、FPGAでは、FPGA-to-HPSブリッジを介してキャッシュ・コヒーレント読み出しを実行します。読み出されるバッファーは、比較的小さいことが重要です。そうでない場合、L2キャッシュでは、SDRAMからのデータの読み出しをほとんどの転送でスラッシングする可能性があります。より大きなバッファー転送の場合、より適切な方法として、FPGAによるデータ読み出しを、SDRAMに直接アクセスするFPGA-to-HPSブリッジを介して行います。これは、「例1: FPGAによるHPS EMIFからのデータの直接読み出し」 でも示したとおりです。
ガイドライン: FPGA-to-HPSブリッジをターゲットとしたフルアクセスを実行します。
トランザクションをキャッシュ可能にするには、FPGAマスターによって、FPGA-to-HPSブリッジから読み出し、ACE-Liteプロトコルのキャッシュ拡張シグナリングを利用することが必要です。キャッシュ・コヒーレント・アクセス用のACE-Liteプロトコルのシグナリング拡張について詳しくは、 インテル® Agilex™ のテクニカル・リファレンス・マニュアル のキャッシュ・コヒーレンシー・ユニット のセクションを参照してください。
ガイドライン: 64バイトに整列したキャッシュ可能なアクセスをFPGA-to-HPSブリッジをターゲットとして実行します。
HPSのCCUは、キャッシュラインと同じサイズ (64バイト) のトランザクション向けに最適化されています。そのため、データを64バイトの境界に整列させ、データ幅を調整した後、512ビットのブリッジへのバースト長が最大になるようにする必要があります。例えば、128ビットのFPGAマスターは、データを64バイトに整列させ、完全な128ビット (16バイト) のアクセスをバースト長4で実行する必要があります。
ガイドライン: キャッシュ可能なトランザクションごとに64バイトにアクセスします。
各バースト・トランザクションによって64バイトにアクセスすることを確認します。各トランザクションは、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に書き込まれるためです。大きなバッファー転送の場合、より適切な方法として、FPGAによって、SDRAMを直接ターゲットとするFPGA-to-HPSブリッジへのデータ書き込みを行います。これは、例2でも示したとおりです。
ガイドライン: FPGA-to-HPSブリッジをターゲットとしたフルアクセスを実行します。
トランザクションをキャッシュ可能にするには、FPGAマスターからFPGA-to-HPSブリッジに書き込み、ACE-Liteプロトコルのキャッシュ拡張シグナリングを利用することが必要です。キャッシュ・コヒーレント・アクセス用のACE-Liteプロトコルのシグナリング拡張について詳しくは、 インテル® Agilex™ のテクニカル・リファレンス・マニュアル のキャッシュ・コヒーレンシー・ユニット のセクションを参照してください。
ガイドライン L2 ECCがイネーブルされている場合、FPGA-to-HPSブリッジへのキャッシュ可能なアクセスが8バイト境界に整列していることを確認します。
エラー検出および訂正 (ECC) をL2キャッシュでイネーブルする場合、各8バイトのデータグループの書き込みが完了していることも併せて確認してください。L2キャッシュによるECC動作は、64ビット境界で行われます。そのため、キャッシュ可能なアクセスを実行する場合、アクセスは常に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 (またはその両方) の書き込みバイトストローブはイネーブルしてください。