请求器请求描述符格式 - 1.3 简体中文

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

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

用户应用必须将链路上要发射的每个请求都作为独立 AXI4-Stream 包传输到核的请求器请求接口上。每个数据包都必须以 1 个描述符开头,在描述符后可包含有效载荷数据。描述符长度始终为 16 字节,并必须在请求包的前 16 字节内发送。描述符在 64 位接口上的前 2 个节拍内进行传输,在 128 位或 256 位接口上的第 1 个节拍内进行传输。下图演示了不同类型的请求的描述符格式。

当所传输的请求 TLP 为存储器读取/写入请求、I/O 读取/写入请求或原子操作 (Atomic Operation) 请求时,即适用下图所示格式。

图 1. 对应存储器、I/O 和原子操作请求的请求器请求描述符格式

下图格式仅适用于类型 0 或类型 1 的“Vendor-Defined Messages”(供应商定义的报文)。

图 2. 对应供应商定义的报文的请求器请求描述符格式

下图所示格式适用于所有 ATS 报文,包括“Invalid Request”(无效请求)、“Invalid Completion”(无效完成)、“Page Request”(页面请求)、“PRG Response”(PRG 响应)。

图 3. 对应于 ATS 报文的请求器请求描述符

对于所有其它报文,描述符采用下图所示格式。

图 4. 对应于所有其它报文的请求器请求描述符格式
表 1. 请求器请求描述符字段
位索引 字段名称 描述
1:0 “Address Type”(地址类型)

该字段定义仅适用于存储器传输事务和原子操作。核会将此字段复制到请求 TLP 的 TL 报头的 AT 中。

  • 00:请求中的地址未经转换
  • 01:传输事务为转换请求
  • 10:请求中的地址为已转换的地址
  • 11:保留
63:2 “Address”(地址)

该字段适用于存储器、I/O 和原子操作请求。这是请求所引用的首个 Dword 的地址。用户逻辑还必须在 s_axis_rq_tuser 中设置 First_BE 位和 Last_BE 位,这两个位分别用于指示首个 Dword 和最后一个 Dword 中的有效字节。

当传输事务指定 32 位地址时,该字段的位 [63:32] 必须设置为 0。

74:64 “Dword Count”(Dword 计数)

这 11 个位用于指示要读取或写入的块大小(以 Dword 为单位),对于报文,这些位指示报文有效载荷的大小。其范围为 0 - 256 个 Dword。对于 I/O 访问,Dword 计数始终为 1。

对于长度为 0 的存储器读取/写入请求,Dword 计数必须为 1,且 First_BE 位全部设置为 0。

核不会对照提供的有效载荷(针对含有效载荷的请求)的实际长度检查该字段的设置,也不会对照核的最大有效载荷大小或读取请求大小设置检查此项设置。

78:75 “Request Type”(请求类型) 用于识别传输事务类型。下表中列出了传输事务类型及其编码。
79 “Poisoned Request”(毒化请求) 此位可供用户逻辑用于对所发送的请求 TLP 进行毒化。针对所有请求,此位必须设置为 0,除非用户逻辑在位于描述符后的数据块中检测到错误,并且想使用 PCI Express 的“Data Poisoning”(数据毒化)功能来传递此信息。
87:80

“Requester Function/Device Number”(请求器功能/器件编号)

请求器功能的器件和/或功能编号。

端点模式:

  • ARI 已启用:
    • 位 [87:80] 必须设置为请求器功能编号。
  • ARI 已禁用:
    • 位 [82:80] 必须设置为请求器功能编号。
    • 不使用位 [87:83]

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

  • ARI 已启用:
    • 位 [87:80] 必须设置为请求器功能编号。

  • ARI 已禁用:
    • 位 [82:80] 必须设置为请求器功能编号。
    • 如果请求源自开关本身,则不使用位 [87:83]。如果开关正在中继请求(请求器位于开关外部),那么这些位必须设置为请求器器件编号,此编号对应于该请求的来源位置。该位可与描述符中的“Requester ID Enable”位配合使用。

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

  • ARI 已启用:
    • 位 [87:80] 必须设置为请求器功能编号。
  • ARI 已禁用:
    • 位 [87:80] 必须设置为请求器功能编号。
    • 位 [87:83] 必须设置为请求器器件编号。该位可与描述符中的“Requester ID Enable”位配合使用。
95:88 “Requester Bus Number”(请求器总线编号)

与请求器功能关联的总线编号。

端点模式:

  • 不使用

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

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

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

  • 必须设置为请求器总线编号。该位可与描述符中的“Requester ID Enable”位配合使用。
103:96 “Tag”(标签) 与请求关联的 PCIe 标签。对于转发事务,核始终使用来自该字段的值作为请求的标签。

对于非转发传输事务,如果在核配置期间,在 Vivado IDE 中已设置“Enable Client Tag”(启用客户标签)(即,当标签管理由用户逻辑执行时),那么该核会使用来自该字段的值。如果未设置该属性,那么核中的标签管理逻辑负责生成要使用的标签,并且不使用描述符的标签字段中的值。

119:104 “Completer ID”(完成器 ID) 该字段仅适用于按 ID 进行路由的配置请求和报文。对于这些请求,该字段会指定与请求关联的 PCI 完成器 ID(这 16 个位将在传统解读模式下分割为 8 位总线编号、5 位器件编号和 3 位功能编号。而在 ARI 模式下,这 16 个位则作为 8 位总线编号 + 8 位功能编号来处理)。
120 “Requester ID Enable / T8”(请求器 ID 使能 / T8)

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

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

端点模式:

  • 必须设置为 1'b0

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

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

根端口模式:

  • 必须设置为 1'b1。不启用 ARI 时,该位可与请求器总线编号位 [95:88] 和请求器功能/器件编号位 [87:83] 配合使用。
123:121 “Transaction Class (TC)”(传输事务类) 与请求关联的 PCIe 传输事务类 (TC)。
126:124 属性

这些位可提供与请求关联的 Attribute 位的设置。位 124 为“No Snoop”(无嗅探)位,位 125 则为“Relaxed Ordering”(宽松排序)位。位 126 为“ID-Based Ordering”(基于 ID 排序)位,只能针对存储器请求和报文进行设置。

如果在功能的 PCI Express 器件控制寄存器中未启用对应属性,那么核在链路上发送的请求中会将属性位强制设置为 0。

111:104 “Message Code”(报文代码)

该字段定义适用于所有报文。其中包含要在 TL 报头中设置的 8 位报文代码。

PCI Express 3.0 规范》(http://www.pcisig.com/specifications) 的附录 F 提供了受支持的报文代码的完整列表。

114:112 “Message Routing”(报文路由) 该字段定义适用于所有报文。核会将这些位复制到请求 TLP 的 TL 报头的 3 位路由字段 r[2:0] 中。
15:0 Destination ID 该字段仅适用于供应商定义的报文。当报文按 ID 进行路由(即,当“Message Routing”(报文路由)字段为 010 二进制值)时,该字段必须设置为报文的“Destination ID”(目标 ID)。
63:32 “Vendor-Defined Header”(供应商定义的报头) 该字段仅适用于供应商定义的报文。它将被复制到 TL 报头的 Dword 3 中。
63:0 ATS 报头 该字段仅适用于 ATS 报文。核会将其中包含的字节复制到 TL 报头的 Dword 2 和 Dword 3 中。