UCIe多Die拓扑集成与系统级调试 - 第4节

4. UCIe物理层(PHY)基础

本章核心:把 UCIe PHY 那一大堆规范条文,拆成几个你调试时真正用得上的模块。我不喜欢对着六百页 spec 发呆,所以这里只挑最关键的讲——信号类型、时钟方案、数据速率、均衡与训练、以及眼图测试。先搭骨架,再填血肉。

4. UCIe 物理层(PHY)基础归纳总结

4.1 PHY 的整体结构

UCIe PHY 说白了就是 die 与 die 之间那条“高速公路”。它负责把逻辑层发过来的并行数据,转成高速串行差分信号,穿过封装基板或中介层,到另一端的 die 上再还原回去。我个人习惯把 PHY 分成三块来看:

  • 发送端(TX) – 串行化、预加重、驱动。我最怕 TX 的预加重系数没调好,信号过冲直接让接收端误码率爆炸。
  • 接收端(RX) – 均衡器(CTLE + DFE)、时钟数据恢复(CDR)、串并转换。
  • 边带通道(Sideband) – 训练、链路状态管理、调试用的辅助通道。

这三块配合不好,链路根本立不起来。我见过一个项目,TX 的阻抗和 RX 的端接差了 5Ω,结果眼图几乎闭合,最后硬生生重新流片——教训啊。

UCIe PHY 功能模块与信号流 发送端 TX 串行化 & 预加重 差分驱动 阻抗校准 封装 / 基板 差分对 (P/N) 走线 + 过孔 损耗 ~0.5-2dB 接收端 RX CTLE + DFE 均衡 CDR 时钟恢复 采样 & 解串 边带通道 (Sideband) 训练序列 | 链路状态 | 调试命令 | 参数协商

4.2 时钟方案与数据速率

UCIe PHY 支持两种主流时钟模式,这个在调试时一定要先搞清楚——我吃过亏,默认以为用的都是内建 PLL,结果对方 die 非要转发时钟。

时钟模式 原理 典型速率 调试注意点
转发时钟(Forwarded Clock) 发送端同时发数据 + 时钟 8~32 Gbps skew 必须校准,我见过差 1 ps 就错采样
内建 PLL(Embedded Clock) 接收端从数据流恢复时钟 4~24 Gbps CDR 锁定时间与抖动容忍需实测
备用时钟(Sideband Clock) 低速参考钟通过边带提供 通常 ≤ 100 MHz 仅用于初始化,带宽不够跑高速

我个人习惯在调测前先用边带时钟把链路搭建起来,确认 ID 和配置寄存器能读写,再切到高速模式。这样至少知道底层连线没断。

4.3 信号幅度与均衡

UCIe PHY 用的是差分信号,共模电压通常在 0.3~0.6V 之间,差模幅度 200~600 mVpp。但走线长度一超过 10mm,高频损耗就很厉害。你想想看,25 Gbps 的信号在普通封装基板上,每厘米损耗 1~1.5 dB 很正常。

调试技巧: 遇到眼图睁不开时,先检查 TX 预加重(de-emphasis)系数。我习惯从 -3 dB 开始,再根据接收端 BER 反推最优值。不要一上来就调 DFE,CTLE 先拉到最大增益,确定能锁到信号后再慢慢降。

均衡器的配置是调试中最容易踩坑的地方。我通常用以下步骤:

  1. 眼图模板测试: 用示波器看 TX 输出眼图是否满足 UCIe 规范模板。我曾经碰到过模板通过但实际链路不稳,后来发现是示波器探头接地不好。
  2. 扫 CTLE 增益: 从低到高扫 5~6 个档位,同时观察 CDR 失锁指示。
  3. 细调 DFE: DFE 的 tap 系数可以从 0.5 开始,但注意别引起误收敛(false convergence)。

4.4 训练序列与链路初始化

UCIe PHY 丢数据之前会跑一套训练流程。我把它简化为四个状态(千万别跟 spec 里那二十多个子状态较真,先抓住主线):

  • DETECT – 发送端检测远端是否在线。这个阶段我见过因为端接没上电导致检测失败的案例,后来强制加了上电时序检查。
  • TRAIN – 交换训练序列,校准 CTLE、DFE 和 CDR。注意这里的训练 pattern 有长伪随机(PRBS)和短 pattern 两种,选错会导致均衡无法收敛。
  • ALIGN – 对齐字节/通道边界。
  • LINKUP – 进入正常数据传输。
警告: 千万不要在 TRAIN 阶段还没完成时就强行写入数据寄存器。我有一次为了赶演示,手动跳过了 TRAIN 状态…… 结果 link 只是假 up,实际传出去全是乱码,后面花了三倍时间定位。

4.5 眼图测试与误码率(BER)

眼图是 PHY 调测的“心电图”。UCIe 规范要求 BER 必须低于 1E-15,但这在实验室里很难直接测,因为要跑超长时间。实际中我常用快速 BER 测试——用 PRBS31 跑 10 秒,换算成 2.5 Gbps 时相当于测了 ~2.5e10 个 bit,没出错就能大致放心。

测试项目 工具 验收标准 常见问题
TX 眼图 高速示波器 (≥50 GHz BW) 眼高 ≥ 200 mV, 眼宽 ≥ 0.4 UI 预加重不足导致眼图左右不对称
RX 眼图 示波器 + 夹具 眼高 ≥ 150 mV, 眼宽 ≥ 0.35 UI 端接电阻偏差或过孔阻抗不连续
BER 测试 内建 BERT 或外部码型发生器 BER < 1E-15 SSO 噪声耦合导致突发错误

嗯,这里要注意:SSO(同步开关输出)噪声在多 die 集成时尤其明显。我记得有一次在调 16-lane 的 UCIe 链路,所有 lane 同时切换时电源噪声飙升,导致中间几根 lane 偶尔出 bit 错。后来我们在 PHY 附近加了去耦电容,再配合随机扰码(scrambling),才把 BER 压下去。

4.6 调试常用寄存器与工具链

每个 UCIe PHY IP 厂家的寄存器映射不完全一样,但下面几个我建议你提前找到:

  • PHY Status Register – 看 link state、PLL lock、均衡收敛标志。
  • Eye Monitor Register – 很多 PHY 内置了眼图扫描硬件,用寄存器就能读出水平/垂直裕量。
  • PRBS Error Counter – 实时统计 bit 错误,调试必备。
  • Training Override Register – 调试时用来强制跳过某阶段或固定均衡参数。
避坑指南: 我曾经用 I²C 去读写这些寄存器,速率默认 400 kHz。但在 PDN(下电到上电)转换瞬间,I²C 总线会被 PHY 内部状态机意外拉死。解决办法:在 PHY 上电稳定后再发起 I²C 通讯,或者用边带通道自带的调试帧(debug packet)来读。

4.7 个人经验小结

PHY 调试说白了就是跟信号完整性和时序作斗争。我有几条血泪教训:

  • 别急着上高速,先用最小速率把环回测试跑通。
  • 每次只改一个参数,固定其他变量。我见过同事一次性改了预加重、CTLE、DFE 三个地方,眼图变好了,但根本不知道是哪个参数起了作用。
  • 眼图测试时,示波器采样点一定要取过 1000 个 UI,不然眼图轮廓的统计意义不够。
  • 如果链路过长(>20 mm),考虑加转接驱动器(re-driver),但要注意 re-driver 的 latency 必须匹配 UCIe 的时序预算。

以上就是一个相对完整的 UCIe PHY 基础框架。你在实际项目中肯定会遇到比这里更具体的问题,但先把这些概念理清楚,调试时至少知道该往哪个方向排查。后面我们再展开每个专题的细粒度调试方法。