4. CML 电气特性与标准归纳总结

好了,这一章我们聊聊 CML(Current Mode Logic)。你如果做过高速串行接口,肯定绕不开它。CML 和 LVPECL 有点像,但脾气完全不同。我刚开始搞 SerDes 时,对着数据手册里的共模电压范围看了半天,还是拿不准该不该直接连。后来流片回来,眼图塌了……嗯,从那以后我把 CML 的电气特性老老实实捋了一遍。

说实话,CML 的结构更简单。它靠电流源驱动,输出摆幅小,功耗也低。你想想看,在 10 Gbps 以上,LVPECL 的功耗会让你散热头疼,而 CML 就友好很多。但代价是什么?——共模电压的容差更窄,直流耦合要特别小心。

4.1 CML 基本电气特性

先看标准定义。CML 的输出级就是一个差分管对,尾电流源 I_SS 通常 16 mA,负载电阻 R_L 50 Ω。哦对,CML 的负载电阻是接电源 VCC 的,这和 LVPECL 不一样。单端输出摆幅 = I_SS × R_L / 2,典型值 400 mV 峰峰值。差分摆幅就是 800 mV。共模电压 V_CM = VCC − I_SS × R_L / 2。一般 VCC = 1.8 V 时,V_CM ≈ 1.4 V;VCC = 3.3 V 时,V_CM ≈ 2.9 V。

关键参数速查

  • 输出摆幅:单端 400 mV,差分 800 mV(典型)
  • 共模电压:VCC − 0.4 V(近似)
  • 终端匹配:每线对地 50 Ω 到 VCC(是否需要交流耦合看手册)
  • 上升/下降时间:典型 30~50 ps(取决于工艺)

我曾在 12 Gbps 的 SerDes 项目中,被 CML 接收器的输入共模范围坑过一次。数据手册写的是 V_CM ±100 mV,我直接直流耦合了,结果接收器饱和,眼图闭了。后来加了交流耦合电容和偏置电阻才搞定。教训是:直流耦合前,一定要算清楚发送端共模和接收端共模能不能对上。

4.2 CML 与 LVPECL 的对比

为了方便你选型,我做了个对照表。这两个逻辑家族在终端、摆幅、共模上差异很大,千万别搞混。

参数 CML(典型 1.8 V) LVPECL(典型 3.3 V)
供电电压 1.8 V / 3.3 V 3.3 V / 2.5 V
单端摆幅 约 400 mV 约 800 mV
差分摆幅 约 800 mV 约 1.6 V
共模电压 VCC − 0.4 V VCC − 1.3 V
终端到 VCC(50 Ω 上拉) VCC − 2 V(戴维南等效)
功耗(典型) 约 30 mW 约 100 mW
最大速率 20+ Gbps 约 10 Gbps

⚠ 注意: 不能直接把 CML 输出接到 LVPECL 输入!共模差太多,接口不兼容。我曾经见过有人用电阻分压网络做电平转换,结果波形失真严重。最好用专用转换芯片或交流耦合+偏置电路。

4.3 CML 标准归纳

CML 不像 LVPECL 有那么多标准的变种。常见的 CML 标准主要来自 JEDEC、IEEE 和各个芯片厂家的自家规范。我个人习惯把标准分三类:

  1. 通用 CML:比如 JESD8-2(虽然后来被更高速的接口标准取代了),定义了输出摆幅、共模范围的基本参数。
  2. 串行接口协议自带的 CML:比如 PCIe、SATA、USB 3.0、以太网 XFI/SFI。这些协议里面规定了 CML 的电气特性,但具体数值会因速率而微调。
  3. 芯片厂家的“参考设计”:很多高速 ADC、SerDes 芯片的数据手册会给出 CML 接口的特性,这其实是你最需要参考的标准。说白了,以数据手册为准。

我把几个常见协议中的 CML 参数整理了一下:

协议 速率 差分摆幅 共模(V_CM) 终端
PCIe Gen3 8 GT/s 800~1200 mV 0 ~ 0.6 V 50 Ω 到 GND(交流耦合)
USB 3.0 5 Gbps 800~1200 mV 0 ~ 0.6 V 50 Ω 到 GND
10 GbE XFI 10.3125 Gbps 400~800 mV VCC − 0.4 V 50 Ω 到 VCC
JESD204B 12.5 Gbps 400~700 mV VCC − 0.4 V 50 Ω 到 VCC

你看,同样是 CML,不同协议的共模方向和摆幅差距不小。尤其是 PCIe 和 USB 的 CML 是往 GND 的终端,而 XFI、JESD204B 是往 VCC 的终端。为什么会这样?因为前者是交流耦合,共模由接收端偏置电阻决定;后者是直流耦合,共模直接由发送端决定。你设计 PCB 时,一定要先搞清楚用了哪种耦合方式。

💡 个人经验: 如果芯片手册只写了“CML输出”,没有明确终端方式,我通常先假设是“50 Ω 到 VCC”型。然后看共模电压是否接近 VCC-0.4V。如果手册还给了一个偏置电压引脚(比如 VREF),那很可能是需要外部终端网络的情况。总之,读手册的“电气特性表”比看文字更重要。

4.4 CML 接口结构示意图

下面这张 SVG 图画了 CML 差分驱动器和接收器的基本结构,以及关键的电压节点。你对照着看,有助于理解参数的意义。

CML 差分驱动器与接收器结构 CML 发送器 50 Ω 上拉到 VCC OUT+ OUT- I_SS = 16 mA GND V_CM = VCC − 0.4V CML 接收器 IN+ IN- 差分放大器 输入共模范围:V_CM ± 100mV 典型摆幅:单端 400mV,差分 800mV 终端匹配:50 Ω 到 VCC 或 50 Ω 到 GND

4.5 时序约束相关的要点

CML 的电气特性直接决定了时序约束的几个参数:

  1. 输入阈值:CML 接收器通常有固定的差分阈值电压(比如 ±50 mV)。你需要把这个阈值换成时序库里的电平转换点,来确定 setup/hold 的基准。
  2. 上升/下降时间:CML 的边沿速率快,往往需要更小的时序余量。我曾在一个 25 Gbps 的设计里,发现 CML 输出上升时间只有 20 ps,而 PCB 走线延迟反而成了主要影响因素。所以做静态时序分析时,要把传输线延迟算进去,不能只看芯片内部的延时。
  3. 共模漂移:如果供电有噪声,CML 共模会跟着抖。共模变化会影响接收器的过零点,造成抖动。在时序约束里,可以给输入抖动预算留多一点。我建议至少预留 0.2 UI 的抖动余量(对于 10 Gbps 就是 20 ps)。

⚠ 避坑指南: 我曾经在一款 ADC 的 JESD204B 接口上,把 CML 输出直接接到 FPGA 的 CML 输入,供电都是 1.8 V。结果眼图测试看到大量抖动。排查发现 FPGA 端的 CML 接收器共模范围只有 VCC-0.4V ±80mV,而 ADC 输出共模是 VCC-0.35V,超出了 20 mV。别看只有 20 mV,在高速下就是闭眼的原因。解决办法是用交流耦合,让 FPGA 自己产生偏置。

4.6 小结

CML 的电气特性说白了就三个数字:摆幅 400 mV 单端、共模约 VCC-0.4V、终端 50 Ω 到 VCC。但实际项目里,你会遇到各种变体。我的建议是:

  • 先看数据手册的直流特性表,确认共模和摆幅的真实范围。
  • 再看协议标准里的耦合方式,直流还是交流。
  • 最后用仿真或实际测量验证眼图。

嗯,做到这三点,CML 的时序问题基本都能提前堵住。