CML 基本原理:电流模式逻辑结构与工作方式

CML——电流模式逻辑,这个名字说白了就告诉你它的核心:用电流来干活,而不是用电压。跟上一章讲的 LVPECL 相比,CML 的设计哲学非常直截了当:一个恒定的尾电流,在两个差分路径之间来回切换。电流去哪边,那边的输出就是高电平。听起来简单,但做高频设计时你就会发现,这种“电流投篮”的思路干净利落,寄生效应少,所以它能轻松跑到几十 Gbps。

我最早接触 CML 是在一个 10Gbps 光模块项目里。当时看着差分对尾电流源的拓扑,第一反应是“这跟 LVPECL 好像啊”。但真正用示波器看波形时才发现——哦,输出摆幅可以自己定,而且功耗固定,不随频率跳变。这点对电源完整性太友好了。下面我们把 CML 的结构和原理拆开来看。

CML 的核心结构:差分对 + 尾电流源

CML 的基本单元就三样东西:一对差分晶体管(通常是 NPN 双极型或 NMOS FET)、两个集电极(或漏极)负载电阻、一个尾电流源。电源是单电源 VCC,地是 VEE(或 GND)。没有射极跟随器,没有多余的电平移位——结构非常简洁。

下图是我自己画的一个标准 CML 反相器/缓冲器结构。你盯着看五分钟,之后所有 CML 电路的本质就全理解了。

CML 基本结构图(差分对 + 尾电流源) VCC RL RL Vout- Vout+ Q1 Q2 Vin- Vin+ I_tail GND / VEE 核心思路:尾电流 I_tail 在 Q1/Q2 间切换,RL 上产生电压降,形成差分输出摆幅

看上图。两个负载电阻 RL 各自接在 VCC 和 Q1/Q2 的集电极之间。尾电流源 I_tail 接在两个发射极的公共节点到地。输入差分信号 Vin+ 和 Vin- 分别驱动 Q2 和 Q1 的基极。当 Vin+ > Vin- 时,Q2 导通,I_tail 全部流过 Q2 和右边的 RL,右边 RL 上的压降为 I_tail × RL,所以 Vout+ = VCC - I_tail × RL(低电平);左边的 Q1 截止,左边 RL 上没有电流,Vout- = VCC(高电平)。反过来同理。

小提示: 这个“电流全部走一边”的特性,保证了电源电流始终是恒定的 I_tail。你想想看,不管信号怎么翻,VCC 上的电流抖动几乎为零。这对降低同时开关噪声(SSN)非常有帮助,也是 CML 能跑高速的原因之一。

工作方式:电流切换与电压摆幅

CML 的一大好处是输出摆幅可以通过 RL 和 I_tail 来独立设定。摆幅 = I_tail × RL。你需要的摆幅小,就调小 I_tail 或 RL;需要大摆幅驱动长走线,就反过来。我习惯把单端摆幅设在 400 mV 左右(差分 800 mVpp),这样既能保证信号质量,又不会让功耗失控。

记得有一次调试 25Gbps 背板链路,仿真时一切完美,板上测出来眼图却塌了。翻来覆去找原因,最后发现是对端的 CML 接收器共模范围不够。CML 的输出共模电压是 VCC - (I_tail × RL)/2。因为两边负载一样,无论 Q1 通还是 Q2 通,Vout+ 和 Vout- 的平均值就是 VCC - 0.5 × I_tail × RL。设计时这个共模电压必须要落在接收器的输入共模范围内,否则信号就歪了。

下面这张表把 CML 和前面学的 LVPECL 摆在一起对比,差异一目了然:

参数 CML LVPECL
输出摆幅(差分) 固定 = 2×I_tail×RL,典型 400~800 mVpp 固定 ≈ 800 mVpp(受射极跟随器限制)
功耗 恒定 = I_tail × VCC,与频率无关 随频率略有变化,但基本恒定
输出共模电压 VCC - 摆幅/2 VCC - 1.3V 左右(固定电平)
输出阻抗 近似 RL(通常 50Ω) 很低(射极跟随器输出)
是否需要端接 需要,VCC 到 Vout 之间接 50Ω 到 VCC 需要,Thevenin 端接(VCC-2V 等效)
关键点: CML 的输出阻抗就是 RL 本身(理想情况下),所以通常 RL 直接取 50Ω 来匹配传输线。端接接法是:从 Vout 到 VCC 接 50Ω。不像 LVPECL 需要复杂的戴维南端接。

关键的电气参数

做设计时,下面这几个参数你务必要记牢:

  • Vod(输出差分摆幅):Vod = 2 × I_tail × RL。我手头项目常用 I_tail = 4 mA,RL = 50 Ω,得 Vod = 400 mV。如果是 8 mA 则 800 mV。
  • Vcm(输出共模电压):Vcm = VCC - (I_tail × RL)/2。注意这个值不能太低,否则底部晶体管会进入饱和区。3.3V 电源下,典型 Vcm 在 2.3V~2.7V 之间。
  • 输出短路电流:理论上 Vout 对 VCC 短路时电流最大为 I_tail。不过实际器件都有保护,别真去短就是了。
  • 上升/下降时间:CML 由于电流切换快、输出节点负载小,tr/tf 很容易做到 20 ps 以内,这也是它能用到 40 Gbps 以上的底气。
注意: CML 的输出是“电流切换”而不是“电压切换”,所以当输出走线很长或容性负载很大时,RL 上的 RC 时间常数会成为瓶颈。我曾经在一个项目中遇到输出接了一个 5 pF 的测试点,结果眼图直接关上了。后来加了预加重才救回来。

常见的应用场景与设计要点

CML 最适合 高频串行链路:比如光纤通信(SFI、SFF‑8472)、SerDes 接口(SERDES PCS)、甚至芯片间超短距离互连。它的恒定电流特性对电源噪声免疫,而且输出摆幅可调,能灵活适配不同接收器。

选型时要注意一点:很多 CML 芯片的 I_tail 是内部固定的,你只能通过外接电阻改变 RL(如果允许的话)。也有些可编程器件允许通过 SPI 调 I_tail。我个人习惯优先选可调摆幅的型号,调试时自由度大很多。

避坑经验: 我曾经把一个 CML 信号直接连接到标准 LVPECL 输入,没做电平转换,结果 LVPECL 输入级饱和,整个链路误码率飙升。CML 和 LVPECL 共模电压不同,不能直接互连。要么通过交流耦合电容隔直,再加偏置电阻拉到正确共模点;要么用专用的电平转换芯片。千万不能想当然直连。

最后总结一下 CML 的工作方式:尾电流 I_tail 在差分对里像水一样,左开右关,右开左关。流过哪边,哪边的负载电阻就产生压降。全部动作只有一个切换,没有多余的状态。这种简洁,正是它能跑高速的根本原因。你理解了这张图,就理解了 CML 的魂。