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 和各个芯片厂家的自家规范。我个人习惯把标准分三类:
- 通用 CML:比如 JESD8-2(虽然后来被更高速的接口标准取代了),定义了输出摆幅、共模范围的基本参数。
- 串行接口协议自带的 CML:比如 PCIe、SATA、USB 3.0、以太网 XFI/SFI。这些协议里面规定了 CML 的电气特性,但具体数值会因速率而微调。
- 芯片厂家的“参考设计”:很多高速 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 差分驱动器和接收器的基本结构,以及关键的电压节点。你对照着看,有助于理解参数的意义。
4.5 时序约束相关的要点
CML 的电气特性直接决定了时序约束的几个参数:
- 输入阈值:CML 接收器通常有固定的差分阈值电压(比如 ±50 mV)。你需要把这个阈值换成时序库里的电平转换点,来确定 setup/hold 的基准。
- 上升/下降时间:CML 的边沿速率快,往往需要更小的时序余量。我曾在一个 25 Gbps 的设计里,发现 CML 输出上升时间只有 20 ps,而 PCB 走线延迟反而成了主要影响因素。所以做静态时序分析时,要把传输线延迟算进去,不能只看芯片内部的延时。
- 共模漂移:如果供电有噪声,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 的时序问题基本都能提前堵住。