2.2.7 内存、I/O和配置请求规则
以下规则适用于所有内存、I/O和配置请求。每种类型的请求还有特定的额外规则。
- 所有内存、I/O和配置请求除了常见的头标字段外,还包括以下字段:
- requester ID[15:0]和Tag[9:0],形成事务ID。
- Last DW BE[3:0] and First DW BE[3:0]。对于设置了TH位的内存读取请求和原子操作请求,头标中Last DW BE[3:0] and First DW BE[3:0]的字节位置被重新用于携带ST[7.0]字段。对于设置了TH位的原子操作请求,DW字节使能位的值被认为是保留的。对于清除了TH位的原子操作请求,DW字节使能位是保留的。
对于内存请求,以下规则适用:
- 内存请求通过地址进行路由,使用64位或32位寻址(见图2-17和图2-18)。
-
对于内存读取请求,长度不得超过Max_Read_Request_Size指定的值。
-
对于原子操作请求,表2-12中指定了架构操作数大小及其关联的长度字段值。如果完成器支持原子操作,以下规则适用:完成器必须检查长度字段值,如果该值与架构值不匹配,完成器必须将TLP视为畸形TLP。否则,如果该值与完成器支持的操作数大小不匹配,完成器必须将TLP视为不支持的请求(UR)。这是一个与接收端口相关联的报告错误。
-
一个FetchAdd请求包含一个操作数,即"add"值。
-
一个Swap请求包含一个操作数,即"swap"值”。
-
一个CAS请求包含两个操作数。数据区域中的第一个是“compare”值,第二个是“swap”值。
-
对于原子操作请求,地址必须与操作数大小自然对齐。完成器必须检查此规则的违规情况,如果TLP违反此规则,则该TLP是一个畸形TLP。这是一个与接收端口相关联的报告错误。
-
请求不能指定会导致内存空间访问跨越4-KB边界的地址/长度组合。
-
接收器可以可选地检查此规则的违规情况。如果实现此检查的接收器确定TLP违反此规则,则该TLP是一个畸形TLP。
- 如果进行了检查,这是与接收端口相关联的报告错误。
- 对于原子操作请求,完成器必须强制检查地址的自然对齐(见上文),已经保证了访问不会跨越4-KB边界,因此不需要单独的4-KB边界检查。
- 如果对原子操作CAS请求执行了4-KB边界检查,此检查必须理解TLP长度值是基于两个操作数的大小,而对内存空间的访问是基于一个操作数的大小。
对于I/O(输入/输出)请求,适用以下规则:
- I/O请求通过地址路由,使用32位寻址(见图2-19)。
- I/O请求有以下限制:
- TC[2:0] 必须是 000b(二进制)
- LN 对于I/O请求不适用,该位是保留的
- TH 对于I/O请求不适用,该位是保留的
- Attr[2] 是保留的
- Attr[1:0] 必须是 00b(二进制)
- AT[1:0] 必须是 00b(二进制)。接收方不要求或鼓励检查这一点。
- Length[9:0] 必须是 00 0000 0001b(二进制)
- Last DW BE[3.0] 必须是 0000b(二进制)
接收方可以选择性检查这些规则的违规情况(但不得检查保留位)。这些检查是独立可选的。如果执行这些检查的接收方确定事务层包(TLP)违反了这些规则,该TLP就是畸形TLP。
- 如果进行了检查,这是一个与接收端口相关联的报告错误。
对于配置请求,适用以下规则:
- 配置请求通过ID路由,并使用3个DW的头标。
- 除了所有内存、I/O和配置请求中包含的头标字段以及ID路由字段,配置请求还包含以下额外字段(见图2-20):
- register number[5:0]
- extended register number[3:0]
- 配置请求有以下限制:
- TC[2:0] 必须是 000b(二进制)
- LN 对于配置请求不适用,该位是保留的
- TH 对于配置请求不适用,该位是保留的
- Attr[2] 是保留的
- Attr[1:0] 必须是 00b(二进制)
- AT[1:0] 必须是 00b(二进制)。接收方不需要或鼓励检查这一点。
- Length[9:0] 必须是 00 0000 0001b(二进制)
- Last DW BE[3:0] 必须是 0000b(二进制)
- 接收方可以选择性检查这些规则的违规情况(但不得检查保留位)。这些检查是独立可选的。如果执行这些检查的接收方确定事务层包(TLP)违反了这些规则,该TLP就是畸形TLP。
- 如果进行了检查,这是一个与接收端口相关联的报告错误。
MSI/MSI-X 机制使用内存写请求来表示中断消息。用于 MSI/MSI-X 事务的请求格式与上面定义的内存写请求格式相同,并且就排序、流量控制和数据完整性而言,MSI/MSIX 请求与内存写入无法区分。
2.2.7.1 TPH 规则
为 TPH 指定了两种格式。所有提供 TPH 的请求都必须使用基准 TPH 格式(见图 2-22 和图 2-23)。带有可选 TPH TLP 前缀的格式扩展了 TPH 字段(见图 2-21),以提供 Steering Tag (ST) 字段的额外位。
可选的 TPH TLP 前缀用于扩展 TPH 字段。 通过decode byte0 来确定是否存在 TPH TLP 前缀。
对于目标为内存空间的请求,TH 位为 1b 表示 TLP 头标和可选的 TPH TLP 前缀(如果存在)中存在 TPH。
- 对于提供 TPH 的请求,必须设置 TH 位。
- 针对具有 TPH TLP 前缀的请求,必须设置 TH 位。
- 当 TH 位清零时,PH(处理提示)字段是保留的。
- 对于所有其他请求,TH 位和 PH 字段都不适用,并且是保留的。
- 处理提示(PH)字段的映射在图 2-22、图 2-23 和表 2-14 中显示。
PH[1:0] 字段提供了有关数据访问模式的信息,并如表 2-15 中所述所定义。
转向标签(ST)字段映射到 TLP 头标,如图 2-24、图 2-25 和表 2-16 所示。
- ST[7:0] 字段携带转向标签值
- 所有位都是零的值表示没有转向标签偏好
- 提供了总共255个唯一的转向标签值
对于不支持 TPH(Translation Process Hierarchy)完成或路由能力的功能,如果接收到设置了 TH 位的事务,则必须忽略 TH 位,并以与未设置 TH 位的相同事务类型的请求相同的方式处理该请求。