本文翻译转载于:Cadence Blog
作者:Igor Krause
简介
在引入 Flit 模式后,TLP Header 中的信息进行了重新调整。除基本包头外,还可以将正交头内容 (OHC) 添加到 TLP 中。OHC 作为 TLP 的额外包头,包含 TLP 类型所需的信息字段。
OHC 背景介绍
OHC 有多种类型,TLP 包中的每种 OHC 都包含一组特定的信息。对于特定的 TLP 类型,发射器必须包含相应的 OHC 内容。
TLP Header 可能包含任意 OHC 内容组合。如果存在 OHC,OHC 必须在 Header Base 之后,并按照 A-B-C-E 顺序依次排布。所包含 OHC 的数量和类型由 TLP Header 第一个 DW 中的 OHC 字段指示。一个 TLP Header 最多可包含 7 个 OHC。
OHC[4:0] 字段指示“正交头内容”(OHC) 的存在,其编码如下:
0 0000b = 不存在 OHC
x xxx1b = 存在 OHC-A
x xx1xb = 存在 OHC-B
x x1xxb = 存在 OHC-C
0 0xxxb = 不存在 OHC-E
0 1xxxb = 存在 OHC-E1
1 0xxxb = 存在 OHC-E2
1 1xxxb = 存在 OHC-E4
OHC 类型 – 适配场景
OHC-A1
如果请求需要 OHC-A1 中的任何字段,则必须包含 OHC-A1。
这种 OHC 适用于包含具体 Byte Enable(字节支持)和/或 PASID 的内存请求、包含 PASID 的地址路由消息以及包含 PASID 转换请求的路由到根复合体消息。
对于所有内存请求,允许存在 OHC-A1(参见图 2-7)。如果内存请求中不存在 OHC-A1,且请求长度大于或等于 2 DW,第一个和最后一个 DW Byte Enable 字段的值都必须处理为 1111b。如果请求需要的 Byte Enable 字段值不是这些值,则必须存在 OHC-A1。如果存在 OHC-A1,当且仅当设置 PV 位后,PASID、PMR 和 ER 字段才有效。
OHC-A2
所有 I/O 请求都必须包含 OHC-A2。
OHC-A3
所有配置请求都必须包含 OHC-A3。
OHC-A4
当需要 Destination Segment 或 PASID 时,ID 路由消息中必须包含 OHC-A4。
OHC-A
对于 Unsuccessful Completion(不成功的填写)、Lower Address[1:0] 不等于 00b 的 Non-UIO Completion(非 UIO 填写),以及由于相关未发布请求包含与填写人获取的字段不匹配的 Requester Segment 而需要填写 Destination Segment 的填写,都需要 OHC-A5。
如果不存在 OHC-A5,意味着填写状态为成功,无需明确指示 Completer Segment 和 Destination Segment,并且对于 Non-UIO Completion,Lower Address[1:0] = 00b。
OHC-B
当使用 TLP 处理提示 (TPH) 时,必须包含 OHC-B 以及适当的 PH 和 ST 值。
OHC-C
IDE TLP 必须包含 OHC-C。在某些情况下,如果要指示 Requester Segment,Non-IDE Request TLP 还必须包含 OHC-C。
OHC-E
先前存在于端到端前缀中的信息现在作为 OHC-E 纳入 TLP Header 中。OHC-E 传达原本使用 E-E 前缀 0011 至 1111 的内容。
OHC 验证挑战和解决方案
OHC 为 TLP Header 的组织调整引入了新的规则。TLP Header 大小不仅取决于 TLP 类型,还与包含的 OHC 数量有关。一些功能现在需要特定的 OHC,例如完整性和数据加密 (IDE) 以及进程地址空间 ID (PASID)。在包头末尾可以轻松检测到端到端前缀。
需要对该解决方案进行验证,检查何时包含 OHC,是否违反了使用规则。此外,还需检查 OHC 字段里的内容和基础 TLP Header 上的字段。实施者需要了解所有可能包含在 TLP 包中的 OHC,并充分掌握每种 OHC 的使用规则。
全部0条评论
快来发表一下你的评论吧 !