第2章:物理层基础——电气特性、差分信号、CDR与子块划分

做过高速串行接口调试的工程师都清楚,物理层是整条链路最“脆弱”的环节。信号还没进芯片,在封装、PCB走线、连接器上就已经被折腾得够呛。

UCIe物理层继承了大量来自SerDes和DDR的经验,但它有自己的脾气。这一章我们从电气特性开始,一路讲到子块划分。我不会堆公式,但会告诉你每个指标在示波器上长什么样,或者在实际调试中意味着什么。

2.1 电气特性——UCIe的“电压语言”

UCIe支持两种主要的电气模式:标准电压(Standard Voltage)和低电压(Low Voltage)。标准电压模式用在Chiplet间距较大或对信号质量要求较高时;低电压模式则面向先进封装中的紧密互连,功耗更低。

参数 标准电压模式 低电压模式
单端摆幅(典型) 0.4V ~ 0.6V 0.2V ~ 0.35V
差分峰峰值摆幅 0.8Vpp ~ 1.2Vpp 0.4Vpp ~ 0.7Vpp
共模电压(Vcm) 0.5V ~ 0.7V 0.3V ~ 0.45V
数据速率范围 2Gbps ~ 16Gbps 2Gbps ~ 8Gbps
终端阻抗 50Ω(单端) 50Ω或100Ω

核心要点:UCIe的电压摆幅远低于传统并行总线,甚至低于PCIe Gen5。这意味着更低的功耗、更低的EMI,但也意味着对噪声和阻抗不匹配更敏感。我曾在一个项目中遇到误码率始终降不下去的情况,最后发现是封装基板上的一个过孔阻抗只有35Ω——信号反射回来直接淹没了本来就小的摆幅。

关于共模电压,UCIe不像PCIe那样要求精确的共模点。它留出了调整空间,允许发送端和接收端通过训练阶段协商出一个合适的Vcm。这在实际中很有用:不同Chiplet工艺角的差异,会导致最佳Vcm偏移几十毫伏。

2.2 差分信号——为什么要用两条线传一个比特?

差分信号不是新概念,但UCIe对它的使用有一些值得注意的地方。

差分信号的核心优势是共模抑制。两条线传输相位相反的信号,外部噪声同时耦合到两条线上的部分(共模分量),在接收端相减后被消除。说白了,就是噪声被“减掉了”。

你想想看,如果UCIe用单端信号,0.3V的摆幅加上0.1V的噪声,眼图早就闭上了。用差分信号,同样的噪声可以被抑制到0.01V以下。

在UCIe中,差分信号的几个关键参数:

  • 差分阻抗:一般为100Ω。发送端和接收端都需要匹配到这个值。
  • 共模阻抗:不严格要求,但建议在50Ω以上,避免共模噪声泄漏。
  • 偏斜:差分对内的P/N两条线长度差。我个人的经验是,在基板布线中,P/N线的长度差控制在5mil以内,否则会导致共模到差模的转换,恶化信号质量。

避坑指南:我曾经调试一个UCIe链路,眼图在某个频率点突然闭合。检查了半天,发现是差分走线绕了太多弯,导致P/N线长度差达到20mil。在高速信号面前,那条小小的长度差就像给信号加了一个“时延差”,效果等同于引入了共模干扰。改版后把长度差控制在3mil以内,问题解决。

2.3 时钟与数据恢复(CDR)——从比特流里找时钟

UCIe不传单独的时钟信号。发送端只送数据,接收端自己从数据边沿中恢复出时钟。这个机制叫时钟数据恢复,简称CDR。

CDR的工作流程大体如下:

  1. 接收端锁相环(PLL)锁定到一个参考时钟(通常是系统时钟或频率基准)。
  2. 鉴相器(Phase Detector)比较本地时钟和输入数据的边沿位置。
  3. 环路滤波器(Loop Filter)输出一个控制电压,调整本地时钟的频率和相位。
  4. 最终本地时钟锁定到数据流的速率上,采样窗口对齐到最佳位置。

UCIe的CDR有两种工作模式:

  • 宽捕获范围模式:PLL的自由振荡频率和数据流速率差异较大时使用。适合链路刚启动时的频率锁定。
  • 窄跟踪模式:锁定后,CDR只跟踪数据流的小幅度频率漂移(如温度变化引起的)。

请注意:UCIe要求发送端的数据满足一定的转换密度(Transition Density),即数据中不能有太长的连续“0”或“1”。如果发送端连续发送64个相同的比特而不翻转,CDR的鉴相器就看不到边沿,本地时钟的频率会逐渐漂移,最终导致采样错位。UCIe协议通过内部编码(如64B/66B)来保证转换密度,但调试时要注意——如果误码出现在长时间连续相同比特之后,那很可能是CDR的事。

为什么会这样?因为CDR本质上是一个闭环反馈系统。没有边沿,环路就失去了“误差信号”。就像你开车时闭着眼睛——你希望车能一直直走,但微小的偏差积累起来,最终会偏出车道。

2.4 物理层子块划分——把复杂系统拆开看

UCIe物理层不是一个单一模块。它由多个子块协同工作。理解这些子块,能帮你快速定位问题出在哪里。

整体来看,物理层分为两大块:

  • 电气层(Electrical Layer):负责信号的实际发送和接收。
  • 逻辑层(Logical Layer):负责训练、状态管理和数据对齐。

下面这个图展示了物理层的核心子块及其数据流关系。我建议你在调试过程中多参考这个结构,它能告诉你“问题出在哪一步”。

UCIe物理层核心子块结构 电气层(Electrical Layer) 逻辑层(Logical Layer) 发送驱动器 TX Driver 接收器 RX & Equalizer CDR模块 Clock & Data Recovery 阻抗校准 Impedance Calibration 训练状态机 Training FSM 数据对齐 Word Alignment 通道编码 64B/66B LCRC CRC生成与校验 协议适配层(Protocol Adapter) Flit组包/解包、链路层接口 配置与控制接口(Sideband / CSR) 寄存器配置、状态监控、链路控制 数据流向 发送:协议适配层 → 通道编码 → 发送驱动器 → 外部链路 接收:外部链路 → 接收器 → CDR/对齐 → 通道解码 → 协议适配层

这个图把电气层和逻辑层的关系表达清楚了。左侧是模拟和高速数字部分,右侧是纯数字逻辑。我个人的习惯是,当出现误码时,先判断是电气层的问题还是逻辑层的问题。怎么做?很简单:看误码是否具有周期性,是否和链路速率、码型相关。如果相关,电气层的可能性大;如果误码看起来像随机翻位,或者和某个训练阶段有关,那就去查逻辑层。

2.5 各子块的关键点

发送驱动器:负责将数字“0”和“1”转换为差分电压信号。它必须具备可编程的输出摆幅调节能力,以匹配接收端的灵敏度。我记得某次调试,接收端报信号太弱,实际上只是发送器的摆幅寄存器没配置对——默认值只有目标值的一半。

接收器与均衡器:高频损耗是高速链路的大敌。UCIe接收器包含连续时间线性均衡器(CTLE),用于补偿信道的高频衰减。如果CTLE的boost设置太低,高频分量会损失太多,眼图会闭合。反之如果boost太高,又会放大噪声。

阻抗校准:发送器和接收器的输出/输入阻抗必须精确匹配传输线的特性阻抗。UCIe的阻抗校准使用片内校准电阻和比较器,定期调整输出驱动器的阻抗。我曾经遇到一个案例:芯片温度从25°C升到85°C后,发送器阻抗漂了15Ω,导致回波损耗恶化,误码率从10⁻¹⁵涨到了10⁻¹⁰。

训练状态机(Training FSM):UCIe的物理层在正常发送数据前,必须先经历一系列训练阶段。训练阶段包括:比特锁定(Bit Lock)、符号锁定(Symbol Lock)、分频补偿(Divider Compensation)、通道训练(Lane Training)等。每个阶段都有确认机制,任何一个阶段失败,链路都不会上线。

LCRC(链路CRC):UCIe物理层在发送端为每个Flit生成循环冗余校验码,接收端校验。LCRC可以检测出物理层传输过程中发生的大部分错误,它是UCIe纠错体系的第一道防线。

调试技巧:如果你看到LCRC校验错误,但误码率很低(比如10⁻¹²量级),别急着怀疑硬件。先检查训练状态机的状态是否稳定。我见过一个案例,训练阶段偶尔超时,重训后链路看似正常,但LCRC错误却在重训后持续出现——那是训练没有完全收敛的表现。

好,物理层基础就讲这些。下一层我们要面对的是链路层和Flit结构。不过在那之前,请确保你理解了电气特性和子块划分,因为后续所有的纠错机制都建立在这个物理层基础上。