完成器完成描述符格式 - 1.3 简体中文

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

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

用户应用将完成器请求的完成数据作为独立 AXI4-Stream 包发送至核的完成器完成接口。每个数据包均以 1 个描述符开头,在描述符后可包含有效载荷数据。描述符长度始终为 12 字节,并在完成包的前 12 字节内发送。描述符始终在完成 TLP 的第一拍内进行传输。当用户应用将请求的完成数据拆分为多个拆分完成 (Split Completion) 包后,它必须将每个拆分完成包作为独立 AXI4-Stream 包随其描述符一起发送。

下图演示了完成器完成描述符的格式。下表描述了完成器请求描述符的每个字段。

图 1. 完成器完成描述符格式
表 1. 完成器完成描述符字段
位索引 字段名称 描述
6:0 “Lower Address”(低位地址) 对于存储器读取完成包,该字段必须设置为所传输的存储器块的起始字节级地址的 7 个最低有效位。对于所有其它完成包,下位地址必须全部设置为 0。
9:8 “Address Type”(地址类型) 该字段定义仅适用于存储器传输事务和原子操作的完成包。对于这些完成包,用户逻辑必须将 AT 位从对应的请求描述符复制到该字段中。针对所有其它完成包,该字段必须设置为 0。
28:16 “Byte Count”(字节计数)

这 13 个位可包含范围在 0 - 4,096 个字节内的值。如果存储器读取请求已通过使用单一完成包完成,那么“Byte Count”值将以字节为单位来表示“Payload”(有效载荷)大小。针对 I/O 读取完成包和 I/O 写入完成包,该字段必须设置为 4。针对长度为 0 的存储器读取发送完成包时,字节计数必须设置为 1,并且在描述符之后必须附加含单 Dword 的虚拟有效载荷。

对于每个“Memory Read Completion”(存储器读取完成),“Byte Count”字段必须表明完成请求所需的剩余字节数,包括随完成包返回的字节数。如果存储器读取请求已使用多个完成包完成,那么后续每个完成包的字节计数值均表示为前一个完成包减去随前一个完成包返回的字节数。

29 “Locked Read Completion”(锁定读取完成) 当“Locked Read”(锁定读取)请求的响应中包含完成包时,必须设置该位。针对所有其它完成包,该位必须设置为 0。
42:32 “Dword Count”(Dword 计数) 这 11 个位表示当前包的有效载荷大小(以 Dword 数为单位)。其范围是 0 - 1000 个 Dword。针对 I/O 读取完成包,该字段必须设置为 1,针对 I/O 写入完成包,该字段必须设置为 0。针对长度为 0 的存储器读取发送完成包时,Dword 计数必须设置为 1。发送 UR 或 CA 完成时,Dword 计数必须设置为 0。在所有其它情况下,Dword 计数必须对应于当前包的有效载荷中 Dword 的实际数量。
45:43 “Completion Status”(完成状态)

这些位必须基于所发送的完成 (Completion) 包的类型来设置。有效设置仅包括:

  • 000:成功完成
  • 001:请求不受支持 (UR)
  • 100:完成器异常中止 (CA)
46 “Poisoned Completion”(毒化完成) 此位可供用户逻辑用于对所发送的完成 TLP 进行毒化。针对所有完成包,此位必须设置为 0,除非用户逻辑在位于描述符后的数据块中检测到错误,并且想使用 PCI Express 的“Data Poisoning”(数据毒化)功能来传递此信息。
63:48 “Requester ID”(请求器 ID) 与请求关联的 PCI 请求器 ID(由用户逻辑从请求复制所得)。
71:64 “Tag”(标签) 与请求关联的 PCIe 标签(由用户逻辑从请求复制所得)。
79:72 “Target Function/Device Number”(目标功能/器件编号)

完成器功能的器件和/或功能编号。

端点模式:

ARI 已启用:

  • 位 [79:72] 必须设置为完成器功能编号。

ARI 已禁用:

  • 位 [74:72] 必须设置为完成器功能编号。
  • 不使用位 [79:75]

开关的上游端口用例(在 IP 中选中端点模式):

ARI 已启用:

  • 位 [79:72] 必须设置为完成器功能编号。

ARI 已禁用:

  • 位 [74:72] 必须设置为完成器功能编号。
  • 如果完成包源自开关本身,则不使用位 [79:75]。如果开关正在中继完成包(完成器位于开关外部),那么这些位必须设置为完成器器件编号,此编号对应于该完成包的来源位置。该位可与描述符中的“Completer ID Enable”位配合使用。

根端口模式(下游端口):

ARI 已启用:

  • 位 [79:72] 必须设置为完成器功能编号。

ARI 已禁用:

  • 位 [74:72] 必须设置为完成器功能编号。
  • 位 [79:75] 必须设置为完成器器件编号。该位可与描述符中的“Completer ID Enable”位配合使用。
87:80 “Completer Bus Number”(完成器总线编号)

与完成器功能关联的总线编号。

端点模式:

  • 如果完成包源自开关本身,则不使用这些位。如果开关正在中继完成包(完成器位于开关外部),那么这些位必须设置为完成器总线编号,此编号对应于该完成包的来源位置。该位可与描述符中的“Completer ID Enable”位配合使用。

根端口模式(下游端口):

  • 必须设置为完成器总线编号。该位可与描述符中的“Completer ID Enable”位配合使用。
88 “Completer ID Enable”(完成器 ID 使能)

1'b1:客户在描述符中提供总线编号、器件编号和功能编号,以供填充到 TLP 报头中的“Completer ID”(完成器 ID)字段中。

1'b0:IP 使用从接收到的配置请求中捕获的总线和器件编号,客户在描述符中提供功能编号,以供填充到 TLP 报头中的“完成器 ID”字段中。

端点模式:

  • 必须设置为 1'b0。

开关的上游端口用例(在 IP 中选中端点模式):

  • 如果完成包源自开关本身,则设置为 1'b0。
  • 当开关正在中继完成(完成器位于开关外部)时,则设置为 1'b1。不启用 ARI 时,该位可与完成器总线编号位 [95:88] 和完成器功能/器件编号位 [87:83] 配合使用。

根端口模式:

  • 必须设置为 1'b1。不启用 ARI 时,该位可与完成器总线编号位 [95:88] 和完成器功能/器件编号位 [87:83] 配合使用。
91:89 “Transaction Class (TC)”(传输事务类) 与请求关联的 PCIe 传输事务类 (TC)。用户逻辑必须从关联的请求描述符的 TC 字段复制该值。
94:92 属性 与请求关联的 PCIe 属性(从请求复制所得)。位 92 为“No Snoop”(无嗅探)位,位 93 为“Relaxed Ordering”(宽松排序)位,位 94 为“ID-Based Ordering”(基于 ID 排序)位。
95 保留 保留以供将来使用。