学习: 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 这类"模式相关封装或新能力"不能无条件互转。

相关推荐
一条破秋裤1 小时前
05_设备树自定义属性_写入读取验证
linux·网络·数据库
paopaokaka_luck1 小时前
剧本杀预约管理系统(AI客服、 webSocket在线沟通、协同过滤算法推荐、Echarts多维分析、 QQ邮箱通知、 腾讯地图导航、四角色协作)
websocket·网络协议·echarts
和裕1 小时前
定制纸箱刀卡、平卡、隔档分别是什么?结构与适用场景区别全解析
大数据·运维·网络·人工智能·算法
巧克力味的桃子1 小时前
复杂网络能控性鲁棒性研究进展
开发语言·网络·php
一条泥憨鱼1 小时前
【计算机网络】| 从ping 不通出发:NAT 与 DHCP 在做什么
运维·服务器·网络·计算机网络
ITxiaobing20232 小时前
自研 IP 库与 AppsFlyer 地理位置判定不一致,该如何排查?
网络·数据库·tcp/ip
承渊政道2 小时前
Linux网络学习【应用层自定义协议与序列化实战:从手写序列化与反序列化到深入理解进程间关系与守护进程】
linux·网络·学习·ubuntu·json·序列化与反序列化
ZeroNews内网穿透2 小时前
内网穿透公网暴露防护:边缘网关 IP 黑白名单运维实践
运维·网络协议·tcp/ip·内网穿透·api安全·企业网络安全·运维实践
honsor2 小时前
机房动环监控:以太网温湿度传感器选型与部署全解
运维·服务器·网络·物联网·网络协议·tcp/ip