☰
学习: flit vs tlp
2026/10/15 16:37:48 网站建设 项目流程

简短结论:Flit Mode 和 Non-Flit(传统 TLP)模式不是“同一份报文直接改个外壳”,而是通过 Switch/Root Complex 在边界做TLP header translation。

事务语义层(Memory/Config/Completion/Message/Atomic 等)通常可翻译;但链路层/成帧层对象、部分新字段、特定编码的 TLP、以及纯 Flit 控制结构不能一一互转。


1. 能“转换”的是什么

这里的“转换”准确说是:同一个事务(Transaction)在出口侧重新编码成目标模式允许的 TLP。

可以翻译的常见 TLP 语义:

  • Memory Read / Write(32-bit / 64-bit address)
  • Configuration Read / Write(Type 0 / Type 1)
  • I/O Read / Write
  • Completion / Completion with Data / Locked Completion
  • Message(大多数传统 Message 类型)
  • AtomicOp(FetchAdd / Swap / CAS 等)
  • TLP Prefix → Flit 模式下的 OHC(Orthogonal Header Content)
  • 14-bit Tag、Segment Number 等 Flit 新能力在支持时映射/丢弃/补全

PCI-SIG 官方也明确说:Flit Mode 和 Non-Flit Mode Links 可以互通,边界处会自动翻译。


2. 不能“直接互转”或会出问题的东西

(1)Flit / NOP Flit / Idle Flit 本身

Flit 是 256B 传输容器,不是 TLP:

  • Payload Flit
  • NOP Flit
  • Idle Flit
  • ACK / NAK / Replay Flit
  • Flit Marker

这些没有对应的传统 TLP,不能翻译成 Non-Flit TLP。

它们承载的是:

  • Flit 序列号
  • Link-level retry
  • 流控更新
  • 电源/链路管理控制信息

其中一部分在 Non-Flit 模式里用DLLP​ 表达,但不是 1:1 映射。


(2)传统 DLLP 和 Flit DLP 不是同层对象

Non-Flit:

  • DLLP:流控、ACK/NAK、PM、Vendor 等
  • TLP:业务事务

Flit Mode:

  • DLP(6B)放在 Flit 里
  • 传统 DLLP 要么进 DLP 区域,要么用 Optimized Update FC / Flit Marker 等机制替代

所以:

DLLP ↔ DLP 是“功能近似”,不是报文格式互转。

例如:

  • PM_Enter_L1DLLP → Flit 里通过 DLP 字段表达
  • InitFC/UpdateFC→ Flit 里用 Optimized Update FC
  • ACK/NAK → Flit 级 sequence + replay 机制

(3)Flit TLP Header 和传统 Fmt+Type TLP Header 编码不同

Non-Flit DW0:

Fmt[2:0] + Type[4:0] + TC + Attr + Length

Flit Mode DW0:

Type[7:0] + TC + OHC + TH + Attr + AT + Length

同一个字节值含义不同,例如:

  • Non-Flit0x00= MRd 3DW no data
  • Flit Mode0x00= NOP TLP

所以:

不能把 Flit TLP 的 raw DW0 直接当传统 TLP 解,也不能反向直接塞进去。


(4)OHC 不一定都能退回传统 Prefix

Flit 模式用:

  • OHC-A:Byte Enable、ST(Stream ID)、Segment、Error/Report 等
  • OHC-B:TPH 相关
  • OHC-C:ID 相关
  • OHC-E:IDE / 安全相关

回到 Non-Flit 时:

  • 标准 Local/End-End Prefix 能映射的部分 → 转成 Prefix
  • 传统模式没有对应 Prefix 的 OHC → 不能表达
  • 如果出口链路不支持该能力 → 翻译失败 / blocked

典型例子:

  • Flit 模式 Memory Request 使用非隐式 Byte Enable​ 且依赖 OHC-A1
    → Non-Flit 模式没有等价表达 →TLP Translation Egress Blocked

(5)Segment Number / 14-bit Tag 等“新能力”

  • Flit Mode TLP 可带 Segment Number
  • Non-Flit 老硬件根本不认识

翻译规则:

  • 若对端层次/软件已配置支持 Flit Mode → 可以保留语义
  • 若对端是纯 Non-Flit → RC 可能必须“take ownership”,不能把 segment 信息原样发出去

14-bit Tag 同理:

  • Non-Flit 5.0 最多 10-bit Tag
  • Flit 14-bit Tag 发到 Non-Flit 端口必须降级/阻塞

(6)IDE / 安全 Trailer / Flit CRC / FEC

  • Flit CRC(8B)
  • FEC(6B)
  • IDE Trailer / PCRC
  • Flit-level ECRC 替代机制

这些都不是 TLP 层对象,不能转成传统 TLP 的 LCRC/ECRC 报文。


(7)NOP TLP / Padding / Flit 内部填充

Flit TLP 区域里会有:

  • NOP TLP
  • Padding
  • 跨 Flit 的 TLP 分片

传统模式没有“NOP TLP”这个概念(传统靠 STP/END 成帧,没业务就不发)。

所以:

  • Flit 内 NOP TLP → Non-Flit 侧直接消失
  • 跨 Flit TLP 分片 → 在 Non-Flit 侧重组为完整 TLP 再发
  • 这不是“格式转换”,是“重新组装”

3. 一句话总结

对象

Flit ↔ Non-Flit 能否转换

Memory / Config / IO / Completion / Message

✅ 语义可翻译

AtomicOp

✅ 基本可翻译

TLP Prefix ↔ OHC

⚠️ 能映射的才可行

NOP / Idle / Payload / ACK / NAK Flit

❌ 不是 TLP,不能转 TLP

传统 DLLP ↔ Flit DLP

⚠️ 功能等价,不是格式互转

Segment / 14-bit Tag / 非隐式 BE

⚠️ 老模式不支持时阻塞

Flit CRC / FEC / IDE Trailer

❌ 链路/安全层对象,无 TLP 对应物

核心原则:

TLP 的“事务语义”可以跨模式翻译;Flit/DLLP/OHC/Segment/14-bit Tag 这类“模式相关封装或新能力”不能无条件互转。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询