PCI Express* 向けRタイル Avalon® StreamingインテルFPGA IPユーザーガイド

ID 683501
日付 10/07/2022
Public
ドキュメント目次

4.3.1.5.1. コンプリーション・バッファーのサイズ

PCIe向けRタイルハードIPでは、各PCIeコアのヘッダーとデータに対するコンプリーション (Cpl) バッファーを実装します。エンドポイント・モードで、コンプリーション・クレジットが無限大の場合、ユーザー・アプリケーションでは、未処理のリクエストの数を管理して、オーバーフローやコンプリーションの損失を防ぐ必要があります。

表 57.  コンプリーション・バッファーのサイズ
コンプリーション・バッファー R0/R1サフィックスOPN R2/R3サフィックスOPN
深さ 深さ
ポート0 Cplヘッダー 572 非該当 1444 非該当
ポート0 Cplデータ 2016 512 2016 512
ポート1 Cplヘッダー 572 非該当 1144 非該当
ポート1 Cplデータ 2016 256 2016 256
ポート2 Cplヘッダー 286 非該当 572 非該当
ポート2 Cplデータ 1730 128 2016 128
ポート3 Cplヘッダー 286 非該当 572 非該当
ポート3 Cplデータ 1730 128 2016 128

アプリケーション層では、十分なコンプリーション・バッファーのエントリーがある場合、リクエストを送信する必要があります。メモリー読み出しリクエストの場合、コンプリーターにより、1つの読み出しリクエストの応答を複数のコンプリーションに分割することが許可されています。そのため、アプリケーション層では、返される可能性のある最大のコンプリーションを考慮する必要があります。

次の表で示す例は、メモリー読み出しリクエストのサイズとRead Completion Boundary (RCB) コンフィグレーションに応じて必要なコンフィグレーション・バッファー・エントリーの量です。

表 58.  コンフィグレーション・バッファー・エントリーの例
メモリー読み出しリクエストの例 必要なコンプリーション・バッファー・エントリー
ポート0 ポート1 ポート2/3
ヘッダー データ ヘッダー データ ヘッダー データ
メモリー読み出しリクエストのアドレスが1_0000hで、長さがC0hバイト (10進数で192) の場合、その完了には、RCB値が64バイトのルート・コンプレックスを使用します。次のコンプリーションの組み合わせのいずれか1つを使用します (バイト)。
  • 192
  • 128、64
  • 64、128
  • 64、64、64 → コンプリーションの最大数
3 3 3 6 3 12
メモリー読み出しリクエストのアドレスが1_0000hで、長さがC0hバイト (10進数で192) の場合、その完了には、RCB値が128バイトのルート・コンプレックスを使用します。次のコンプリーションの組み合わせのいずれか1つを使用します (バイト)。
  • 192
  • 128、64 → コンプリーションの最大数
2 3 2 6 2 12
メモリー読み出しリクエストのアドレスが1_0020hで、長さが100h バイト (10進数で256) の場合、その完了には、RCB値が64バイトのルート・コンプレックスを使用します。次のコンプリーションの組み合わせのいずれか1つを使用します (バイト)。
  • 256
  • 32、224
  • 32、64、160
  • 32、64、64、96
  • 32、64、64、64、32 → コンプリーションの最大数
  • 32、64、128、32
  • 32、128、96
  • 32、128、64、32
  • 96、160
  • 96、128、32
  • 96、64、96
  • 96、64、64、32
  • 160、96
  • 160、64、32
  • 224、32
5 4 5 8 5 16

上の表に示した例に基づいて、次に示すアプリケーション・ロジックによってコンプリーション・バッファー・エントリーを追跡し、PCIe向けRタイルIPへのNPリクエストをスケジュールするための推奨フローでは、アプリケーション・ロジック内のコンプリーション・バッファー・エントリーを追跡し、それに基づいて、PCI Express向けインテルFPGA RタイルIPに対するノンポステッド (NP) リクエストをスケジュールします。

説明のために、アプリケーション・ロジックによってコンプリーション・バッファー・エントリーを追跡し、PCIe向けRタイルIPへのNPリクエストをスケジュールするための推奨フローで示しているPCIe Express向けインテルFPGA RタイルIPは、コンフィグレーション・モード0 (1x16) でコンフィグレーションされています。また、アプリケーション・ロジックによって、192バイトのメモリー読み出しをリクエストし、リンクパートナーからの応答で192バイトの単一のコンプリーションを取得します。

フローは次のとおりです。
  1. dl_up 信号がLowからHighになると、アプリケーション・ロジックでは、使用可能なコンプリーション・バッファー・エントリーの初期化を行います。これは、上記のCPLバッファーサイズの表 (コンプリーション・バッファー・サイズ) に基づいて行われます。
  2. アプリケーション・ロジックの送信キューにNPリクエストが追加されると、コンプリーション追跡ロジックでは、リクエストに必要なコンプリーション・バッファー・エントリーを計算します。このとき、受信可能なコンプリーションの最大数を考慮に入れます。この例では、64バイトのコンプリーションが3つです。 (コンプリーション・バッファー・エントリーの例の表と例を参照してください。)
  3. コンプリーション追跡ロジックでは、必要なコンプリーション・バッファー・エントリーと使用可能なコンプリーション・バッファー・エントリーを照合します。
  4. 使用可能なバッファーエントリーが十分にある場合、アプリケーション・ロジックでは、メモリー読み出しリクエストの送信をスケジュールします。
    1. コンプリーション追跡ロジックでは、使用可能なコンプリーション・ヘッダー・バッファー・エントリーを更新します。
    2. コンプリーション追跡ロジックでは、使用可能なコンプリーション・バッファー・エントリーを更新します。
  5. PCI Express向けインテルFPGA RタイルIPでは、NP TLPをリンクパートナーに送信します。
  6. リンクパートナーでは、メモリー読み出しリクエストに応答します。このときデータペイロードが192Bの単一のコンプリーションを使用します。
  7. コンプリーション・パケットを、アプリケーション層のRXキューで受信すると、
    1. コンプリーション追跡ロジックでは、使用可能なコンプリーション・ヘッダー・バッファー・エントリーを更新します。
    2. コンプリーション追跡ロジックでは、使用可能なコンプリーション・データ・バッファー・エントリーを更新します。
  8. コンプリーション追跡ロジックでは、元のNPリクエストが完全に完了し、コンプリーションを受信したかどうかを確認します。
    1. リクエストが完了している場合、コンプリーション追跡ロジックでは、使用可能なコンプリーション・バッファー・エントリーの調整を行います。このとき、以前にリクエストに割り当てられた未使用のエントリーを使用します。
    2. ステップ8および8aで複数のコンプリーションがあった場合、コンプリーション追跡ロジックでは、コンプリーション・バッファー・エントリーを更新します。これは、受信した各コンプリーションTLPに対して行われます。
図 32. アプリケーション・ロジックによってコンプリーション・バッファー・エントリーを追跡し、PCIe向けRタイルIPへのNPリクエストをスケジュールするための推奨フロー