UCIe 协议概述:发展背景、应用场景、协议栈分层架构

做 UCIe 协议层调试,第一件事是把这个协议放在哪里的搞清楚。说白了,UCIe 就是 die 与 die 之间“聊天”的通用语言。我几年前刚接触 Chiplet 互连时,总把它和 PCIe 混在一起——后来踩了不少坑,才发现它完全是另一种玩法。今天咱们把它的出生背景、用在哪儿、以及最核心的协议栈分层捋一遍,后面讲 trace 分析时你才能看穿每一条报文到底卡在哪一层。

1.1 发展背景:为什么需要 UCIe?

大芯片越来越贵,良率也上不去。业界就想了一个法子:把一个大 SoC 拆成多个小芯片(Chiplet),再用高速互连把它们拼回来。但早期每家互连接口都是私有的,Intel 的 AIB,AMD 的 Infinity Fabric,各自为战。这种碎片化局面如果不解决,Chiplet 生态根本做不起来。

2022 年 3 月,Intel 牵头联合 AMD、ARM、三星、台积电、Google 等十几家公司成立了 UCIe 联盟,推出了 1.0 标准。2023 年 8 月又升级到 1.1,主要补了一些高级封装和 retimer 场景的坑。UCIe 的设计目标很直接:一点是低延迟,物理层延迟做到皮秒级;另一点是协议中立,上面可以跑 PCIe、CXL、甚至你自己写的私有协议。这在以前想都不敢想。

我的一点体会:刚开始看 UCIe 标准文档时,我发现它的分层架构和网卡里面 TCP/IP 栈长得特别像。后来调试多了才明白,这种分层就是为了让不同厂家的 die 能灵活对上。你只要保证物理层和链路层标准一致,上面跑什么协议根本不重要。

1.2 应用场景:你在什么项目里会碰到 UCIe?

UCIe 目前最热的几个场景,我挑三个讲:

  • AI 加速器:一个大算力芯片拆成 compute die 和 memory die,用 UCIe 把它们连起来。我之前在一家 AI 芯片公司调过类似方案,最头疼的不是信号完整性,而是协议层的流量控制把训练推理卡死。
  • 异构计算:CPU die + GPU die + NPU die 拼在一起,各跑各的协议。UCIe 的 flit 打包机制在这里特别有用——它能把不同协议的报文混在一条链路上传输。
  • HPC 和服务器:用 Si-Interposer 或 CoWoS 封装把多颗 die 靠在一起,UCIe 提供几千根线的高速互连。注意这里是宽总线、短距离,不像 PCIe 那样走长线。
曾经有工程师问我:UCIe 能不能用来替代 PCIe 长距离互连?我的回答是:不行。UCIe 本质是 die-to-die 接口,最远也就几十毫米,别指望它能走板级走线。如果你想做 chip-to-chip,还是老实等 UCIe 的 retimer 扩展吧。

1.3 协议栈分层架构:把一整个协议“切开”看

UCIe 定义了一个清晰的四层协议栈。你可以把它想象成一个汉堡:最上层是协议层,中间是传输层和数据链路层,最下面是物理层。每层只关心和相邻层之间的接口,不关心上层到底在传什么。这个解耦设计让 UCIe 能适应各种协议。

下面这张图是我自己在调试时经常画的一张分层图,每次分析 trace 都会先定位到第几层出了问题。

UCIe 协议栈分层架构 协议层 (PL) PCIe / CXL / Streaming / 自定义 传输层 (TL) Flit 打包 / 拆分 / 重排序 数据链路层 (DLL) CRC / 重传 / 流量控制 物理层 (PHY) 电气 / 时钟 / 训练 各层核心职责 • 协议解耦,不感知底层 • 报文格式转换 • 流量控制(信用量) • flit 序列号 / ACK • CRC 校验 • 重传 & 错误恢复 • 时钟域同步 • 信号编码 & 训练 Die 0 物理互连(凸块 / 中介层) Die 1

你看,这里每一层都是独立可替换的。物理层管电气和调度,链路层管可靠传输,传输层管报文包的打包和解包,最上面的协议层才决定报文长什么样。在 trace 分析时,我习惯先看链路层的 CRC错误或者流量控制丢包——这往往是最容易定位的问题。

一个小经验:如果 trace 中看到 flit 编号跳跃或者 CRC 错误,十有八九是物理层或者链路层的问题。但是如果你发现上层协议报文的格式不对,比如 PCIe 的 TLP 头被截断,那就要往上查协议层了。别一上来就怀疑物理层,那是初级工程师才会犯的错。

1.4 各层功能速查表

为方便后面章节对照,我把四层的主要功能列出来。这张表我建议你在调试时打印出来贴在显示器旁边。

层名称 缩写 主要功能 典型问题域
协议层 PL 协议适配(PCIe / CXL / Streaming) 报文格式错误,流分类冲突
传输层 TL Flit 打包 / 分组 / 序列号维护 flit 丢包,重排序超时
数据链路层 DLL CRC 校验 / 重传 / 流量控制 CRC 错误,信用量耗尽
物理层 PHY 电气信号 / 时钟校准 / 链路训练 眼图闭合,链路训练失败

嗯,这张表看着简单,但每层背后都有一堆细节。后面几章我们会逐层深入,配合 trace 实例来解剖。不过今天咱们先把地基打牢。

避坑指南:我曾经遇到过这样一个项目——两个不同厂家出的 die 都用 UCIe 1.0,链路训练能过,但一跑大数据业务就死。抓了 trace 发现传输层的 flit 序列号始终对不上。最后发现是两边的载荷大小配置不一致:一个把 flit 配成 64 字节,另一个配成 128 字节。你们看,这种问题在协议层根本看不出来,得从传输层下手。

所以做 UCIe 调试,首先得在脑子里搭好这个分层模型。当 trace 数据出来时,你才能快速判断:这个异常是第几层的?该怎么查?下一级工具该抓什么信号?

好了,关于 UCIe 的背景、场景和分层架构咱们先聊到这儿。后面每章都会围绕一个具体的协议层问题展开,我们通过真实的 trace 数据一步步把问题揪出来。