PACKET_FC 方法 - 1.3 简体中文

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

Document ID
PG213
Release Date
2022-11-16
Version
1.3 简体中文
PACKET_FC 方法用于比 LIMIT_FC 更精细的粒度来分配信用值块,它能以更有效的方式来使用接收完成空间,但所需用户逻辑少量增加。从 CPLH_PENDING 和 CPLD_PENDING(复位时加载,含零位)这两个寄存器开始,然后执行以下步骤:
  1. 当用户应用需发送非转发请求时,判定可能需要的 CplH 和 CplD 信用值的潜在数值:
    • NP_CplH = ceiling[((Start_Address mod RCB) + Request_Size) / RCB]
    • NP_CplD = ceiling[((Start_Address mod 16 bytes) + Request_Size) /16 字节](I/O 写入除外,它会返回零数据)[(req_size + 15)/16]

    modulo 和 ceiling 函数用于确保将所有细小的 RCB 或信用值块都向上舍入。例如,如果存储器从地址 7Ch 读取 8 字节数据,返回的数据可能分为两个完成包(7Ch-7Fh,后接 80h-83h)来返回。这就需要 2 个 RCB 块和 2 个数据信用值。

  2. 检查以下项:
    • CPLH_PENDING + NP_CplH < Total_CplH
    • CPLD_PENDING + NP_CplD < Total_CplD
  3. 如果这两个不等式均成立,则发射非转发请求,将 CPLH_PENDING 增大 NP_CplH,并将 CPLD_PENDING 增大 NP_CplD。对于发射的每个非转发请求,请保留 NP_CplH 和 NP_CplD 以供稍后使用。
  4. 当任一非转发请求的所有完成数据都返回后,请相应减小 CPLH_PENDING 和 CPLD_PENDING。

此方法的资源浪费少于 LIMIT_FC,但仍会占用任一非转发请求的全部完成空间直至满足整个请求为止。RCB_FC 和 DATA_FC 可提供更细粒度的解分配,但需要更多逻辑。