【PCIe 5.0 - 10】Memory, I/O, and Configuration Request 规则

下列规则适用于所有 Memory, I/O, Configuration Requests,以下是针对各类请求的附加规则。

  • 除通用 header 字段外,所有 Memory, I/O, 和 Configuration Requests 还包括以下字段:
    • Requester ID[15:0] 和 Tag[9:0],组成 Transaction ID。
    • Last DW BE[[3:0] 和 First DW BE[3:0]。对于 TH 位为1的 Memory Read Requests 和 AtomicOp Requests,报头中Last DW BE[3:0] 和 First DW BE[3:0] 字段的字节位置将被调整为 ST[7:0] 字段。对于 TH 位为0的Memory Read Requests,参考 【PCIe 5.0 - 8】PCIe 事务层详解4 - First/Last DW Byte Enables规则 中的 First/Last DW Byte Enables规则。对于 TH 位为1的 AtomicOp Requests,DW BE 字段的值隐含为保留。对于 TH 位为0的 AtomicOp Requests,DW BE 字段为保留。

Memory Requests 适用以下规则:

  • Memory Requests 按地址路由,使用 64 位或 32 位寻址方式(见图1 和图2)。
  • 对于 Memory Read Requests,长度不得超过 Max_Read_Request_Size 指定的值。
  • 对于 AtomicOp Requests,表 1 规定了架构操作数大小及其相关的长度字段值。如果完成器支持 AtomicOps,则适用以下规则。Completer 必须检查 Length 字段值。如果该值与架构值不匹配,则完成器必须将 TLP 作为畸形 TLP 处理。否则,如果该值与 Completer 支持的操作数大小不匹配,Completer 必须将 TLP 作为不支持的请求 (Unsupported Request,UR) 处理。这是一个与接收端口相关的报告错误。
表 1 AtomicOp Requests 的 Length 字段值
AtomicOp Request32 Bits64 Bits128 Bits
FetchAdd, Swap1 DW2 DWN/A
CAS2 DW4 DW8 DW
  • FetchAdd Request 包含一个操作数,即 “add” 值。
  • Swap Request 包含一个操作数,即 “swap” 值。
  • 一个CAS Request 包含两个操作数。数据区的第一个操作数是 “compare” 值,第二个操作数是 “swap” 值。
  • 对于 AtomicOp Request,地址必须与操作数大小自然对齐。Completer 必须检查是否违反了这一规则。如果 TLP 违反了这一规则,则该 TLP 为畸形 TLP(Malformed TLP)。这是一个与接收端口相关的报告错误。
  • 请求不得指定导致内存空间访问跨越 4-KB 边界的 Address/Length 组合。
    • Receivers 可选择检查是否违反此规则。如果执行此检查的 Receivers 确定 TLP 违反了此规则,则该 TLP 为畸形 TLP。
      • 如果检查到,这将是一个与接收端口相关的报告错误。
      • 对于 AtomicOp Requests,对地址自然对齐的强制 Completer 检查(见上文)已经保证了访问不会跨越 4KB 边界,因此不需要单独的 4KB 边界检查。
    • 如果对 AtomicOp CAS Requests 执行 4-KB 边界检查,该检查必须理解 TLP Length 值是基于两个操作数的大小,而对内存空间的访问是基于一个操作数的大小。

在这里插入图片描述

图 1 64 位内存寻址的 Request Header 格式



在这里插入图片描述

图 2 32 位内存寻址的 Request Header 格式

实施说明
64位地址的生成
强烈建议 PCI Express 端点能够生成全部 64 位地址范围。但是,如果 PCI Express 端点支持的地址范围较小,无法达到特定平台环境所需的全部地址范围,则相应的设备驱动程序必须确保所有内存事务目标 buffers 都在端点支持的地址范围内。确保这一点的具体方法取决于平台和操作系统,超出了本规范的范围。

对于 I/O Requests,适用以下规则:

  • I/O Requests 按地址路由,使用 32 位寻址法(见图3)
  • I/O Requests 有以下限制:
    • TC[2:0] 必须为 000b
    • LN 不适用于 I/O Request,该位保留
    • Attr[2] 保留
    • Attr[1:0]必须为 00b
    • AT[1:0] 必须为 00b。不要求也不鼓励 Receivers 检查这一点。
    • Length[9:0] 必须为 00 0000 0001b
    • Last DW BE[3:0] 必须为 0000b

Receivers 可选择检查是否违反这些规则(但不得检查保留位,Reserved bit)。这些检查都是独立可选的(见 Optional Error Checking)。如果执行这些检查的 Receiver 确定 TLP 违反了这些规则,则该 TLP 为畸形 TLP(Malformed TLP)。

  • 如果检查到,这是与接收端口相关的报告错误(见Error Signaling and Logging)。

图3 Request Header Format for I/O Transactions

对于 Configuration Requests,适用以下规则:

  • 除了所有 Memory, I/O 和 Configuration Requests 中包含的报头字段和 ID 路由字段外,Configuration Requests 还包含以下附加字段(参见图 4)。

    • Register Number[5:0]
    • Extended Register Number[3:0]
  • Configuration Requests 有以下限制:

    • TC[2:0] 必须为 000b
    • LN 不适用于 Configuration Requests,该位保留。
    • TH 不适用于 Configuration Requests,该位保留。
    • Attr[2] 保留
    • Attr[1:0] 必须为 00b
    • AT[1:0] 必须为 00b。不要求也不鼓励 Receivers 检查这一点。
    • Length[9:0] 必须为 0000 0001b
    • Last DW BE[3:0] 必须为 0000b

Receivers 可选择检查是否违反这些规则(但不得检查保留位,Reserved bit)。这些检查都是独立可选的(见 Optional Error Checking)。如果执行这些检查的 Receiver 确定 TLP 违反了这些规则,则该 TLP 为畸形 TLP(Malformed TLP)。

  • 如果检查到,这是与接收端口相关的报告错误(见Error Signaling and Logging)。

在这里插入图片描述

图 4 Request Header Format for Configuration Transactions

MSI/MSI-X 机制使用 Memory Write Requests 来表示中断消息(参见 MSI and MSI-X Operation)。MSI/MSI-X 事务使用的请求格式与上文定义的 Memory Write Request 格式相同,在排序、流量控制和数据完整性方面,MSI/MSI-X 请求与内存写入没有区别。

TPH 规则

  • 为 TPH 指定了两种格式。所有提供 TPH 的请求都必须使用 Baseline TPH 格式(见图 6 和图 7)。带有可选的 TPH TLP Prefix 的格式扩展了 TPH 字段(见图 5),为 Steering Tag (ST) 字段提供额外位。

在这里插入图片描述

图 5 TPH TLP Prefix
  • 可选的 TPH TLP Prefix 用于扩展 TPH 字段。
    • TPH TLP Prefix 通过解码 byte 0 来确定是否存在。
表 2 TPH TLP Prefix Bit Mapping
FieldsTPH TLP Prefix
ST(15:8)Bits 7:0 of byte 1
ReservedBits 7:0 of byte 2
ReservedBits 7:0 of byte 3
  • 对于以 Memory Space 为目标的 Requests, TH 位为 1b 表示 TLP header 和 可选 TPH TLP Prefix(如有)中存在 TPH。
    • 对于提供 TPH 的请求,TH 位必须设置。
    • 带有 TPH TLP Prefix 的请求必须设置 TH 位。
    • 当 TH 位为0时,PH 字段保留。
    • TH 位和 PH 字段不适用于所有其他 Requests,且为保留字段。

Processing Hints (PH) 映射如图6、图7 和 表3 所示:

在这里插入图片描述

图6 Location of PH[1:0] in a 4 DW Request Header



在这里插入图片描述

图7 Location of PH[1:0] in a 3 DW Request Header



表3 PH[1:0] 在 TLP Header 的位置
PH32-bit Addressing64-bit Addressing
1:0Byte 11 的 bits 1:0Byte 15 的 bits 1:0

PH[1:0] 字段提供有关数据访问模式的信息,其定义如表4 所示:

表4 Processing Hint Encoding
PH1:0Processing Hint描述
00Bi-directional data structure表示 Host 和 Device 频繁读取和/或写入数据
01Requester表示 Device 频繁读取和/或写入数据
10Target表示 Host 频繁读取和/或写入数据
11Target with Priority表示 Host 频繁读取和/或写入,并表明所访问数据具有高时间局部性

Steering Tag (ST) 字段映射到 TLP header,如图8 、图9 和表 5 所示。

在这里插入图片描述

图8 Location of ST[7:0] in the Memory Write Request Header



在这里插入图片描述

图9 Location of ST[7:0] in Memory Read and AtomicOp Request Headers



表3 ST[7:0] 在 TLP Header 的位置
ST BitsMemory Write RequestMemory Read Request or AtomicOp Request
7:0Byte 6 的 Bits 7:0Byte 7 的 Bits 7:0
  • ST[7:0] 字段

    • 全部为 0 的值表示无 Steering Tag 首选项
    • 总共提供 255 个唯一的 Steering Tag 值
  • 不支持 TPH Completer 或 Routing capability 的 Function,在收到设置了 TH 位的事务时,必须忽略 TH 位,并以与未设置 TH 位的相同事务类型的请求相同的方式处理 Request。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值