CML 电平标准与特性归纳

CML,全称 Current-Mode Logic,电流模式逻辑。我在项目中最早接触它是在做 PCIe Gen3 的通道设计时——嗯,那时候被它的差分摆幅只有 400mV 左右吓了一跳。说白了,CML 就是靠电流切换来产生输出电平的,跟 LVPECL 那种射极跟随器不同,它的输出结构更干净,适合用来做高速芯片间的直连。

CML 的核心原理

CML 发送端是一个差分对,尾电流一般在 4~20mA 之间。对地接一个电阻,电流切换时电阻两端产生压降,就能得到差分输出。你看,结构很简单:一个尾电流源,两个 NMOS 管,两个负载电阻(通常是 50Ω 到 VCC)。

  • 输出共模电压:VCC − I·R (典型值约 VCC − 0.4V)
  • 差分输出摆幅:2 × I·R (典型值 400mV ~ 800mV pp)
  • 输出阻抗:单端 50Ω,差分 100Ω,匹配传输线

我记得第一次算这个共模电压时,忘了考虑负载电阻的并联效应,结果 PCB 回来发现眼图塌了一块。后来养成个习惯:凡是 CML 接口,一定先算好 Vcm 范围。

电平标准详解

CML 没有像 LVDS 那样严格的统一标准,不同协议会自己定义。以下我用一张表把常见的几种列出来——你设计时可以直接翻到这里做参考。

协议/Tx 类型 Vcc (V) 差分摆幅 mVpp 共模电压 Vcm 耦合方式
PCIe Gen3/4 0.9 ~ 1.0 800 ~ 1200 0 ~ 0.6 AC (有时 DC)
SATA 6G / SAS 1.2 400 ~ 600 0.6 ~ 0.8 AC
Xilinx GTH/GTY 1.0 400 ~ 800 0.5 ~ 0.7 AC/DC 可选
标准 CML 宏单元 1.8 / 2.5 400 ~ 800 Vcc − 0.4 DC

为什么差异这么大?因为 CML 尾电流和负载电阻可以灵活调。PCIe 用 0.9V 低电源是为了省功耗,而传统 CML 宏用 1.8V 是为了兼容老工艺。

避坑指南:我曾经把 SATA 的 CML 共模电压 0.7V 直接接到标准 CML 接收端(Vcm 要求 1.4V),结果接收器一直饱和,眼图根本打不开。后来加了一级 AC 耦合电容就解决了。记住:CML 接收端一般允许 Vcm 范围很窄,AC 耦合能帮你抹平直流偏置差异。

CML 与 LVPECL 的对比

很多刚开始做高速设计的朋友容易把两者弄混。我来列几个关键区别,你下次画链路均衡框图时能分清。

  • 输出级结构:LVPECL 是射极跟随器,输出阻抗低(~10Ω),必须外接上拉电阻到 Vcc−2V;CML 是漏极开路(或源极开路),已经内置 50Ω,不需要额外偏置。
  • 功耗:LVPECL 驱动电流大(常用 14mA 左右),功耗相对较高;CML 可以低至 4mA,很适合多通道并行。
  • 摆幅:LVPECL 静态输出摆幅典型 800mV,CML 可以更低(400mV),对近端串扰更友好。
  • 共模电压:LVPECL 的 Vcm 约 Vcc−1.3V(1.8V 电源时约 0.5V);CML 的 Vcm 与协议相关,范围更宽。

我个人偏爱 CML 的一个原因是:它天然适配 AC 耦合,不像 LVPECL 那样对共模电平敏感。你在做链路均衡时,如果接收端是 CML 且支持自动 DC 恢复,很多低频截止的问题就自动消失了。

CML 在均衡设计中的角色

CML 的线性度比较好,因为输出级是开漏 NMOS,跨导变化小。这一点在做 CTLE 和 DFE 时特别重要 —— 非线性会导致 ISI 恶化。我见过一个项目,在 28Gbps 下用 CML 实现了 -10dB 的插损补偿,眼高还剩 200mV。换成 LVPECL 同等条件下只剩 120mV。

你想想看,CML 的尾电流准确度直接影响均衡效果。仿真时一定要考虑工艺角下电流的变化,一般 ±20% 以内是可以接受的。如果电流漂多了,差分摆幅就会变,增加或减少接收端的自适应压力。

注意:CML 发送端通常含有预加重 / 去加重功能。它通过改变尾电流来切换摆幅。有些 SerDes 的 CML 输出级会内置可编程均衡器,这时你外部链路就不需要再加 CTLE 了。但是,频率越高(比如 56Gbps PAM4),CML 的寄生电容和开关瞬态就越难控制,这时候我会建议在接收端仍然保留一级 CTLE。

单端 vs 差分:CML 特有的小陷阱

CML 虽然是差分信号,但它的两个输出节点对地都有直流辐射,因为负载电阻连接电源。这跟 LVDS 的电流源返回不同。我在做 EMC 测试时遇到过一例:CML 链路的共模噪声在 2.4GHz 处超标,后来发现是芯片内部电源去耦不充分导致 CML 的共模电压波动。解决办法是在发送端附近加一个 0.1μF + 10nF 的组合去耦电容。

画图时间:CML 发送端到链路的完整路径

为了让你更直观地理解 CML 在整个链路中的位置,我画了一张结构图。它从发送端 PreDriver 开始,经过 CML 输出级、PCB 走线、AC 耦合电容,最后进入接收端的 CTLE。

CML 发送端至接收端链路结构 CML 发送端 PreDriver CML输出级 (差分对+50Ω负载) PCB 差分走线 AC 耦合 接收端 CTLE Vcm = Vcc − I·R 摆幅 = 2·I·R 差分阻抗 100Ω,对地 50Ω 关键设计点: 1. CML 输出级自身可提供预加重/去加重,这是第一级均衡。 2. PCB 走线的插入损耗决定了后级 CTLE 所需增益。 3. AC 耦合电容的容值选择会影响低频转折,通常 100nF ~ 1μF。

一些实战经验总结

  • 仿真一定要覆盖电流变化:CML 的 Tail Current 在 PVT 下可能漂 ±30%,建议跑 Monte Carlo 看摆幅和共模电压。
  • AC 耦合电容不要太小:我有一块板子为了省成本用了 10nF,结果 1Gbps 以下的码型眼图全部塌掉。换成 100nF 才正常。
  • 接收端 CML 的输入阻抗:除了 50Ω 对地,还有芯片内部封装的寄生。做 SI 仿真时记得加上封装模型,否则 10Gbps 以上的 S参数会有谐振。
  • 电源噪声敏感:CML 的输出摆幅直接受 Vcc 影响。我遇到过 Vcc 纹波 50mVpp 时,输出抖动增加 8ps。最好在发送端供电处加 LC 滤波。

一句话记住 CML:电流切换、50Ω 内置、摆幅可控、对 AC 耦合友好。在均衡设计里,它的低摆幅和线性度是高数据率链路的首选。