用于 PCI Express* 的 Intel® FPGA R-tile Avalon® Streaming IP用户指南

ID 683501
日期 3/28/2022
Public

本文档可提供新的版本。客户应 单击此处 前往查看最新版本。

文档目录

4.4.1.5.1. Completion Buffer Size

R-tile Hard IP for PCIe针对每个PCIe核的头(header)和数据实现Completion (Cpl)缓冲区。Endpoint模式中,当Completion credit为infinite(无限)时,用户应用程序需要管理待处理请求的数量,以避免溢出和丢失Completions。

表 56.  Completion缓冲区大小
Completion缓冲区 R0/R1 Suffix OPNs R2/R3 Suffix OPNs
深度 宽度 深度 宽度
Port 0 Cpl header 572 N/A 1444 N/A
Port 0 Cpl data 2016 512 2016 512
Port 1 Cpl header 572 N/A 1144 N/A
Port 1 Cpl data 2016 256 2016 256
Port 2 Cpl header 286 N/A 572 N/A
Port 2 Cpl data 1730 128 2016 128
Port 3 Cpl header 286 N/A 572 N/A
Port 3 Cpl data 1730 128 2016 128

Application Layer应该在有足够completion缓冲区容量时发送请求。对于Memory Read请求,允许Completer(事务接收端)将针对单个Read Request的响应拆分成多个Completions,因而Application Layer需要计算最多可能返回的Completion数量。.

以下是基于Memory Read请求大小和Read Completion Boundary (RCB)配置所需要的Completion缓冲区容量的几个示例。

表 57.  Completion缓冲区容量示例
存储器读(Memory Read)请求示例 需要的Completion缓冲区容量
Port 0 Port 1 Port 2/3
Header Data Header Data Header Data
地址为1_0000h,且长度为C0h字节(十进制192)的Memory Read请求可以由RCB值为64字节的Root Complex,通过如下Completion组合(字节)的其中之一来完成:
  • 192
  • 128, 64
  • 64, 128
  • 64, 64, 64 → 最大completion数
3 3 3 6 3 12
地址为1_0000h,且长度为C0h字节(十进制192)的Memory Read请求可以由RCB值为128字节的Root Complex,通过如下Completion组合(字节)的其中之一来完成:
  • 192
  • 128, 64 → 最大completion数
2 3 2 6 2 12
地址为1_0020h且长度为100h字节(十进制 256)的Memory Read请求可以由RCB值为64的Root Complex通过以下Completions 组合(字节)其中一个来完成:
  • 256
  • 32, 224
  • 32, 64, 160
  • 32, 64, 64, 96
  • 32, 64, 64, 64, 32 → 最大completion数
  • 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

基于上述表格中的示例,以下应用逻辑追踪Completion缓冲区容量的建议流程和对R-tile IP for PCIe安排NP Request的图示中提供有关应用逻辑中追踪completion缓冲区容量的建议流程,并基于此,为R-Tile Intel FPGA IP for PCI Express安排Non-Posted (NP)请求。

出于说明目的,应用逻辑追踪Completion缓冲区容量的建议流程和对R-tile IP for PCIe安排NP Request 显示的是以Gen5x16 (Port 0)配置的R-Tile Intel FPGA IP for PCIe express中,Application逻辑请求192 Bytesde Memory Read,并且得到从链路伙伴的响应中得到192 Bytes的单个完成。

具体流程如下:
  1. dl_up信号从LOW变为HIGH,Application逻辑根据上述CPL缓冲大小表格(Completion Buffer Size)中罗列的情况初始化可用的completion缓冲区容量。
  2. 当有NP请求添加到Application逻辑的传输队列中时,Completion Tracking逻辑计算该请求所需要的completion缓冲区容量,同时要考虑可能接收的最大completion数。本示例中,它是3个64 Bytes的completion。(请参阅Completion缓冲区容量示例中表格提供的示例)。
  3. Completion Tracking逻辑对比可用的completion缓冲区容量查看需要的completion缓冲容量。
  4. 如果有足够可用的缓冲区容量,则Application逻辑安排Memory Read请求的传输。
    1. Completion Tracking逻辑更新可用的completion header缓冲区容量。
    2. Completion Tracking逻辑更新可用的completion数据缓冲区容量。
  5. R-Tile Intel FPGA IP for PCI Express向链路伙伴发送NP TLP。
  6. 该链路伙伴通过单个192B数据负载的Completion响应该MRd请求。
  7. 当其Rx Queue中的Application Layer接收到Completion数据包后,
    1. 该Completion Tracking逻辑更新可用的completion header缓冲区容量。
    2. Completion Tracking逻辑更新可用的completion数据缓冲区容量。
  8. Completion Tracking逻辑验证接收到的Completion是否已完全完成该原始NP请求。
    1. 如果已完成该请求,则Completion Tracking逻辑根据先前分配给该请求的未使用容量调整可用的completion缓冲区容量。
    2. 如果步骤8和步骤8a中有多个Completion,Completion Tracking Logic将相应地更新每个接收到的completion缓冲区容量。
图 29. 应用逻辑追踪Completion缓冲区容量的建议流程和对R-tile IP for PCIe安排NP Request