读取完成边界 - 1.3 简体中文

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

Document ID
PG213
Release Date
2022-11-16
Version
1.3 简体中文

可通过多个完成包来答复单个存储器请求,将这些完成包放置在一起即可返回请求的所有数据。为了预留资源用于数据包报头开销,用户应用必须分配足够的空间,以便容纳可能返回的最大数量的完成包。

为了简化此进程,《PCI Express 基本规范》量化了所有完成包的长度,使每个完成包都必须始于和止于自然对齐的读取完成边界 (RCB),除非完成包所服务的对象为原始请求的起始地址或结束地址。如果请求跨地址边界,且边界为 RCB 字节的整数倍,那么可使用多个完成包来完成此类请求,但返回的数据不得分段,位于以下地址边界处的数据除外:

  • 第一个完成包必须以请求中指定的地址开始,并且止于以下地址之一:
    • 请求中指定的地址加上请求指定的长度(例如,整个请求)。
    • 地址边界位于请求的起始和结束之间,并且为 RCB 字节的整数倍。
  • 最后一个完成包必须止于请求中指定的地址加上请求指定的长度。
  • 第一个完成包和最后一个完成包(不含这两个包本身)之间的所有完成包的长度必须为 RCB 字节的整数倍。

在 cfg_rcb_status[3:0] 上会提供 RCB 的编程值。位索引与物理功能编号相关联;例如,cfg_rcb_status[0] 和 cfg_rcb_status[1] 分别与物理功能 0 和 1 相关联(根据功能链路控制寄存器 [3])。如果用户应用不读取 RCB 值,那么它必须使用默认值,即 64 字节。

表 1. 读取完成边界设置

cfg_rcb_status[0]、cfg_rcb_status[1]、cfg_rcb_status[2] 或 cfg_rcb_status[3]

读取完成边界
字节数 DW QW 信用值
0 64 16 8 4
1 128 32 16 8

计算非转发请求所需的完成信用值时,必须确定完成响应可能需要的 RCB 绑定块的数量,这与所需的完成报头信用值相同。