核将从链路接收到的每个请求 TLP 作为独立 AXI4-Stream 数据包通过完成器请求接口进行传输。每个数据包均以 1 个描述符开头,在描述符后可包含有效载荷数据。描述符长度始终为 16 字节,并在请求包的前 16 字节内发送。描述符始终在 512 位接口的第一拍内进行传输。下图演示了不同类型的请求的描述符格式。
当所传输的请求 TLP 为存储器读取/写入请求、I/O 读取/写入请求或原子操作 (Atomic Operation) 请求时,即适用下图所示格式。
下图格式仅适用于类型 0 或类型 1 的“Vendor-Defined Messages”(供应商定义的报文)。
下图所示格式适用于所有 ATS 报文,包括“Invalid Request”(无效请求)、“Invalid Completion”(无效完成)、“Page Request”(页面请求)、“PRG Response”(PRG 响应)。
对于所有其它报文,描述符采用下图所示格式。
位索引 | 字段名称 | 描述 |
---|---|---|
1:0 | “Address Type”(地址类型) |
该字段定义仅适用于存储器传输事务和原子操作。其中包含从请求的 TL 报头抽取的 AT 位。
|
63:2 | “Address”(地址) |
该字段适用于存储器、I/O 和原子操作请求。它可提供来自 TL 报头的地址。这是请求所引用的首个 Dword 的地址。必须使用来自 当此传输事务指定 32 位地址时,此字段的位 [63:32] 为 0。 |
74:64 | “Dword Count”(Dword 计数) |
这 11 个位用于指示要读取或写入的块大小(以 Dword 为单位),对于报文,这些位指示报文有效载荷的大小。其范围为 0 - 256 个 Dword。对于 I/O 访问,Dword 计数始终为 1。 对于长度为 0 的存储器读取/写入请求,Dword 计数为 1,且 |
78:75 | “Request Type”(请求类型) | 用于识别传输事务类型。表 2 中列出了传输事务类型及其编码。 |
95:80 | “Requester ID”(请求器 ID) |
与请求关联的 PCI 请求器 ID。在 RID 的传统解读中,这 16 个位分割为 8 位总线编号 [95:88]、5 位器件编号 [87:83] 和 3 位功能编号 [82:80]。启用 ARI 时,位 [95:88] 包含 8 位总线编号,而位 [87:80] 则提供功能编号。 当请求为非转发传输事务时,用户完成器应用必须存储该字段,并将其与完成数据一起重新提供给核。 |
103:96 | “Tag”(标签) | 与请求关联的 PCIe 标签。当请求为非转发传输事务时,用户完成器应用必须存储该字段,并将其与完成数据一起重新提供给核。针对存储器写入和报文,可忽略该字段。 |
111:104 | “Target Function”(目标功能) | 该字段定义仅适用于存储器、I/O 和原子操作请求。它可提供请求的目标功能编号(由 BAR 检查来判定)。使用 ARI 时,该字段的全部 8 位都有效。否则,仅限位 [106:104] 有效。 |
114:112 | BAR ID |
该字段定义仅适用于存储器、I/O 和原子操作请求。它可为请求中的地址提供匹配的 BAR 编号。
注释: 在根端口 (RP) 模式下,BAR ID 始终为 000。
对于 64 位传输事务,所提供的 BAR 编号为匹配的 BAR 对的下位地址(即,0、2 或 4)。 |
120:115 | “BAR Aperture”(BAR 间隙) |
该 6 位字段定义仅适用于存储器、I/O 和原子操作请求。它可提供与请求匹配的 BAR 的间隙设置。此信息适用于判定在存储器或 I/O 空间寻址过程中用户将使用的位。例如,值为 12 表示匹配的 BAR 的间隙为 4K,因此,用户可以忽略地址的位 [63:12]。 对于 VF BAR,此输出上提供的值基于 BAR 所覆盖的单一 VF 耗用的存储器空间。 |
123:121 | “Transaction Class (TC)”(传输事务类) | 与请求关联的 PCIe 传输事务类 (TC)。当请求为非转发传输事务时,用户完成器应用必须存储该字段,并将其与完成数据一起重新提供给核。 |
126:124 | “Attributes”(属性) |
这些位可提供与请求关联的 Attribute 位的设置。位 124 为“No Snoop”(无嗅探)位,位 125 则为“Relaxed Ordering”(宽松排序)位。位 126 为“ID-Based Ordering”(基于 ID 排序)位,只能针对存储器请求和报文进行设置。 当请求为非转发传输事务时,用户完成器应用必须存储该字段,并将其与完成数据一起重新提供给核。 |
114:112 | “Message Routing”(报文路由) | 该字段定义适用于所有报文。这些位可提供来自 TL 报头的 3 位路由 (Routing) 字段 r[2:0]。 |
15:0 | “Destination ID”(目标 ID) | 该字段仅适用于供应商定义的报文。当报文按 ID 进行路由(即,当“Message Routing”(报文路由)字段为 010 二进制值)时,该字段可提供报文的“Destination ID”(目标 ID)。 |
63:32 | “Vendor-Defined Header”(供应商定义的报头) | 该字段仅适用于供应商定义的报文。它包含从 TL 报头的 Dword 3 抽取的字节。 |
63:0 | “ATS Header”(ATS 报头) | 该字段仅适用于 ATS 报文。它包含从 TL 报头的 Dword 2 和 3 抽取的字节。 |
请求类型(二进制) | 描述 |
---|---|
0000 | 存储器读取请求 |
0001 | 存储器写入请求 |
0010 | I/O 读取请求 |
0011 | I/O 写入请求 |
0100 | 存储器提取和添加请求 |
0101 | 存储器无条件交换请求 |
0110 | 存储器比较和交换请求 |
0111 | 锁定读取请求(仅在传统器件中支持) |
1000 | 类型 0 配置读取请求(仅限在请求器侧) |
1001 | 类型 1 配置读取请求(仅限在请求器侧) |
1010 | 类型 0 配置写入请求(仅限在请求器侧) |
1011 | 类型 1 配置写入请求(仅限在请求器侧) |
1100 | 任意报文(ATS 报文和供应商定义的报文除外) |
1101 | 供应商定义的报文 |
1110 | ATS 报文 |
1111 | 保留 |