インテルのみ表示可能 — GUID: rqy1636755972675
Ixiasoft
インテルのみ表示可能 — GUID: rqy1636755972675
Ixiasoft
4.3.1.5.1. コンプリーション・バッファーのサイズ
PCIe向けRタイルハードIPでは、各PCIeコアのヘッダーとデータに対するコンプリーション (Cpl) バッファーを実装します。エンドポイント・モードで、コンプリーション・クレジットが無限大の場合、ユーザー・アプリケーションでは、未処理のリクエストの数を管理して、オーバーフローやコンプリーションの損失を防ぐ必要があります。
コンプリーション・バッファー | 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) コンフィグレーションに応じて必要なコンフィグレーション・バッファー・エントリーの量です。
メモリー読み出しリクエストの例 | 必要なコンプリーション・バッファー・エントリー | |||||
---|---|---|---|---|---|---|
ポート0 | ポート1 | ポート2/3 | ||||
ヘッダー | データ | ヘッダー | データ | ヘッダー | データ | |
メモリー読み出しリクエストのアドレスが1_0000hで、長さがC0hバイト (10進数で192) の場合、その完了には、RCB値が64バイトのルート・コンプレックスを使用します。次のコンプリーションの組み合わせのいずれか1つを使用します (バイト)。
|
3 | 3 | 3 | 6 | 3 | 12 |
メモリー読み出しリクエストのアドレスが1_0000hで、長さがC0hバイト (10進数で192) の場合、その完了には、RCB値が128バイトのルート・コンプレックスを使用します。次のコンプリーションの組み合わせのいずれか1つを使用します (バイト)。
|
2 | 3 | 2 | 6 | 2 | 12 |
メモリー読み出しリクエストのアドレスが1_0020hで、長さが100h バイト (10進数で256) の場合、その完了には、RCB値が64バイトのルート・コンプレックスを使用します。次のコンプリーションの組み合わせのいずれか1つを使用します (バイト)。
|
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バイトの単一のコンプリーションを取得します。
- dl_up 信号がLowからHighになると、アプリケーション・ロジックでは、使用可能なコンプリーション・バッファー・エントリーの初期化を行います。これは、上記のCPLバッファーサイズの表 (コンプリーション・バッファー・サイズ) に基づいて行われます。
- アプリケーション・ロジックの送信キューにNPリクエストが追加されると、コンプリーション追跡ロジックでは、リクエストに必要なコンプリーション・バッファー・エントリーを計算します。このとき、受信可能なコンプリーションの最大数を考慮に入れます。この例では、64バイトのコンプリーションが3つです。 (コンプリーション・バッファー・エントリーの例の表と例を参照してください。)
- コンプリーション追跡ロジックでは、必要なコンプリーション・バッファー・エントリーと使用可能なコンプリーション・バッファー・エントリーを照合します。
- 使用可能なバッファーエントリーが十分にある場合、アプリケーション・ロジックでは、メモリー読み出しリクエストの送信をスケジュールします。
- コンプリーション追跡ロジックでは、使用可能なコンプリーション・ヘッダー・バッファー・エントリーを更新します。
- コンプリーション追跡ロジックでは、使用可能なコンプリーション・バッファー・エントリーを更新します。
- PCI Express向けインテルFPGA RタイルIPでは、NP TLPをリンクパートナーに送信します。
- リンクパートナーでは、メモリー読み出しリクエストに応答します。このときデータペイロードが192Bの単一のコンプリーションを使用します。
- コンプリーション・パケットを、アプリケーション層のRXキューで受信すると、
- コンプリーション追跡ロジックでは、使用可能なコンプリーション・ヘッダー・バッファー・エントリーを更新します。
- コンプリーション追跡ロジックでは、使用可能なコンプリーション・データ・バッファー・エントリーを更新します。
- コンプリーション追跡ロジックでは、元のNPリクエストが完全に完了し、コンプリーションを受信したかどうかを確認します。
- リクエストが完了している場合、コンプリーション追跡ロジックでは、使用可能なコンプリーション・バッファー・エントリーの調整を行います。このとき、以前にリクエストに割り当てられた未使用のエントリーを使用します。
- ステップ8および8aで複数のコンプリーションがあった場合、コンプリーション追跡ロジックでは、コンプリーション・バッファー・エントリーを更新します。これは、受信した各コンプリーションTLPに対して行われます。