LIMIT_FC 方法 - 1.3 简体中文

UltraScale+ 器件 Integrated Block for PCI Express 产品指南 (PG213)

Document ID
PG213
Release Date
2022-11-16
Version
1.3 简体中文
LIMIT_FC 方法最便于实现。用户应用会对每次允许的未完成的非转发请求的最大数量(即 MAX_NP)进行评估。要计算该值,请执行以下步骤:
  1. 判定 Max_Request_Size 包所需的 CplH 信用值数量:

    Max_Header_Count = ceiling(Max_Request_Size / RCB)

  2. 假定完成包均为最大大小,则判定 CplD 信用值池所支持的此类完成包的最大数量:

    Max_Packet_Count_CplD = floor(CplD / Max_Request_Size)

  3. 假定完成包均为最大大小,则判定 CplH 信用值池所支持的此类完成包的最大数量:

    Max_Packet_Count_CplH = floor(CplH / Max_Header_Count)

  4. 使用步骤 2 和步骤 3 中两种数量中较小的值来获取未完成的非转发请求的最大数量:

    MAX_NP = min(Max_Packet_Count_CplH, Max_Packet_Count_CplD)

已知 MAX_NP 后,用户应用可在复位时加载含零位的寄存器 NP_PENDING,并确保它始终处于 0 到 MAX_NP 的范围内。发射非转发请求后,NP_PENDING 减小 1。接收到未完成的非转发请求的所有完成包之后,NP_PENDING 增加 1。例如:

  • Max_Request_Size = 128B
  • RCB = 64B
  • CplH = 64
  • CplD = 15,872B
  • Max_Header_Count = 2
  • Max_Packet_Count_CplD = 124
  • Max_Packet_Count_CplH = 32
  • MAX_NP = 32

虽然此方法最易于实现,但它浪费的接收器空间最大,因为对于每个非转发请求,都会分配完成信用值的整个 Max_Request_Size 块,与实际请求大小无关。如果用户应用发出的简短的存储器读取(约为单个 DWORD)、I/O 读取和 I/O 写入所占比例增加,那么浪费的量会进一步增加。