学习: flit vs tlp

简短结论: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_L1 DLLP → 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-Flit 0x00 = MRd 3DW no data
  • Flit Mode 0x00 = 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 这类"模式相关封装或新能力"不能无条件互转。

相关推荐
Escalating_xu43 分钟前
【Linux 网络编程】五种 I/O 模型与非阻塞 I/O:从“等数据”到正确处理 EAGAIN
java·linux·网络
默|笙2 小时前
【Linux网络】传输层协议TCP(3)滑动窗口、流量控制
linux·网络·tcp/ip
xiaoye-duck3 小时前
《C++ 项目:手写大模型接入 SDK》ChatGPT接口设计(中):全量响应实现和测试
网络·c++·语言模型·chatgpt
无言听风雨丶4 小时前
systemd 与信号 / 僵尸进程:Linux 进程管理的底层逻辑与排错
linux·服务器·网络
g5zhu58965 小时前
没有公网ip的情况下,本地能ping服务器服务器不能ping本地,让服务器能访问本地某端口的简单方法
服务器·网络协议·tcp/ip
SDWAN_Cheap5 小时前
BGP是什么,广播IP是什么?两个容易混淆的概念拆解
网络·tcp/ip·bgp·广播ip
程序员JerrySUN5 小时前
PCIe Gen5 SSD 为什么读得快、写得慢?从存储原理到 Linux 性能实测
linux·服务器·网络
guizhoumen5 小时前
net core下WebSocket请求总是断开的解决方案
网络·websocket·网络协议
HKT_China5 小时前
香港电讯河套区创新科技中心暨AI机楼揭幕,以网络基建助力北部都会区发展
网络·ai
云边云科技_云网融合6 小时前
案例分享 | 某运动零售品牌多云治理实战:一套框架解决权限失控、网络混乱与成本黑箱
网络·零售