一、为什么 PCIe 6.0 要引入 OHC
Non-Flit Mode 里:
- TLP Header 长度靠
Fmt/Type决定 - PASID、TPH、IDE、E2E Prefix 等要么塞进 Prefix,要么占死 Header 位
Flit Mode(PCIe 6.0+):
- 所有 TLP 都有Header Base(1 / 3 / 4 / 5 / 6 / 7 DW)
- 可选扩展头叫OHC = Orthogonal Header Content
- 作用:把“不是所有 TLP 都需要”的字段从 Base Header 里拆出来,按需拼接
关键词:Base Header 固定结构 + OHC 插件式扩展
二、Header Base 里和 OHC 最相关的字段
Flit Mode Header Base 第 1 DW 通常包含:
字段 | 位宽 | 作用 |
|---|---|---|
Type[7:0] | 8 bit | 完全解码的 TLP 类型 |
TC[2:0] | 3 bit | Traffic Class |
OHC[4:0] | 5 bit | 指示后面挂了哪些 OHC |
TS[2:0] | 3 bit | Trailer Size |
Attr | — | 属性 |
Length | — | payload 长度(DW) |
OHC[4:0] 编码(重点)
bit0 : OHC-A present bit1 : OHC-B present bit2 : OHC-C present bit3:4 : OHC-E selectionOHC[4:0] | 含义 |
|---|---|
00000 | No OHC |
xxx1 | OHC-A |
xx1x | OHC-B |
x1xx | OHC-C |
000xx / 001xx | No OHC-E |
01xxx | OHC-E1(1 DW) |
10xxx | OHC-E2(2 DW) |
11xxx | OHC-E4(4 DW) |
排列顺序固定:
Header Base → OHC-A → OHC-B → OHC-C → OHC-E → Data → Trailer一个 TLP 最多 7 个 OHC DW(A/B/C 各 1DW,E 最多 4DW)。
三、四类 OHC 到底装什么
1. OHC-A:Request/Completion 的“传统扩展字段”
不是一种格式,而是 A1–A5 子类(由 Type 决定用哪个):
子类 | 用在哪 | 主要内容 |
|---|---|---|
A1 | Memory R/W、ATS、PASID Msg | First/Last DW Byte Enable、PASID、PV、PMR、ER |
A2 | I/O Request | I/O 地址/属性(类似传统 3DW IO header 扩展) |
A3 | Config Request | Config 地址/扩展字段 |
A4 | ID-Routed Message | Destination Segment、PASID |
A5 | Completion | Completion Status、Lower Address[1:0]、Completer/Destination Segment |
📌 功能模型里:OHC-A 不是“开关”,而是“当前 TLP 类型决定的必需块”
2. OHC-B:TPH / Segment Hints
- TPH(TLP Processing Hints):PH、ST
- Requester/Destination/Completer Segment
- 主要用于地址路由请求、跨 Segment 路由
如果没开 TPH:
- PH/ST 可全 0
- 但 Segment 非零时仍可能必须挂 OHC-B
3. OHC-C:IDE / Security
- IDE Stream ID
- IDE 使能标志
- Secure TLP 所需元数据
规则:
- IDE TLP必须有 OHC-C
- 某些非 IDE TLP 也需要 OHC-C 来带 Requester Segment
4. OHC-E:原来的 End-to-End Prefix
Non-Flit Mode 里是 E-E Prefix;
Flit Mode 里变成 OHC-E:
类型 | 大小 | 内容 |
|---|---|---|
E1 | 1 DW | 简单 E2E prefix(如 Precision Time Measurement 等) |
E2 | 2 DW | 更复杂 prefix |
E4 | 4 DW | 大 prefix / 厂商扩展 / 未来特性 |
四、FLIT 打包时的 OHC 处理(如果你做 packetizer)
256B FLIT:
236B TLP region 6B DLP 8B CRC 6B ECCTLP region 里:
- 多个 TLP
- TLP 之间可用 NOP
- 每个 VC 最多 4 个 non-NOP TLP
- OHC 只是 TLP 内部字段,不影响 FLIT 层调度
⚠️ 常见坑:
OHC 不影响路由,但影响:
- Header credit
- Completion 解析
- IDE / PASID / TPH 功能行为
- 合规性检查
十二、一句话总结
OHC 就是 PCIe 6.0 Flit Mode 的“可选 TLP 扩展头插件”:
- A = 请求/完成扩展
- B = TPH / Segment
- C = IDE / 安全
- E = 老 E2E Prefix