4、CML电气特性:电流模式逻辑、电压摆幅、共模归纳总结

好了,咱们前面聊完了LVPECL,这次轮到CML了。CML这货在高速时钟分发里特别常见,尤其是那些10Gbps以上的SerDes接口,几乎清一色用CML输出。我个人习惯把它叫做“电流屁股”——因为它的屁股(输出级)永远在拉电流,说白了就是个恒流源驱动的差分管对。

我当年第一次调试25Gbps的激光驱动器,量CML输出眼图,发现共模电压死活不对。后来一查,根本原因是端接电阻选错了……嗯,这些坑待会儿都会提到。先看一张总图,把CML的电流逻辑、电压摆幅和共模关系理清楚:

CML电气特性:电流模式逻辑与摆幅 CML输出级核心结构 · 电流模式逻辑 恒流源 IB = 16mA RC1 50Ω RC2 50Ω 差分管对 Q1/Q2 轮流导通 OUT+ VOH=VCC-0.4V OUT- VOL=VCC-0.8V 共模电压 Vcm VCC - 0.6 V 摆幅 Vswing = 0.4 V VOH-VOL=400mV

电流模式逻辑的本质

CML和LVPECL最大的区别在哪?你想想看,LVPECL输出级有个射极跟随器(Emitter Follower),所以它输出阻抗低得吓人。但CML呢?它的输出级就是一个共源(或共射)差分管对,下拉电阻直接接电源。电流源永远在尾巴上吸电流,管子要么导通要么截止,没有中间的线性区。

为什么叫“电流模式”?因为它的逻辑状态是靠电流流向决定的,而不是电压。左边的管子通,电流走左边,右边输出高阻态(实际为电源电压减去IR压降);右边通,则反过来。我当年做16Gbps时钟分配时,第一次用CML缓冲器,发现功耗远低于同速率的LVPECL——一个恒流源16mA,两个50Ω电阻,简单粗暴。

CML与LVPECL输出级对比
特性CMLLVPECL
输出级结构差分管对 + 下拉电阻到电源差分管对 + 射极跟随器
静态电流约16mA(50Ω负载)约14-20mA
输出阻抗≈50Ω(无缓冲)≈7-10Ω(低阻抗)
摆幅固定400mV(峰峰值)约800-1000mV
共模电压VCC - 0.6VVCC - 1.3V

电压摆幅:为什么只有400mV?

CML的摆幅公式特别简单:Vswing = IB × RL。典型恒流源16mA,输出端接50Ω到电源,摆幅就是16mA × 50Ω = 800mV?等等,这是峰峰值吗?不对。CML是差分对,每次只有一边导通,电流IB全部流过导通边的50Ω电阻,产生压降IB×RL = 800mV。但另一边截止,电阻上无电流,所以电压为VCC。于是差分摆幅就是800mV(单端摆幅400mV从VCC-0.8V到VCC)。

嗯,这里要注意:CML的输出高电平几乎就是电源电压(VCC),低电平则是VCC - 0.8V。所以单端摆幅只有400mV,差分摆幅800mV。为什么设计这么小?

  • 省电——摆幅小,每比特翻转的功耗就低。
  • 高速——对小摆幅信号,上升时间/Rise time更容易做到ps级别。
  • EMI——摆幅小,辐射骚扰自然小。

我在做一个10Gbps SerDes参考设计时,曾经误把CML输出直接连到LVPECL输入,结果共模电压差了一大截,信号根本识别不了。后来加了AC耦合电容和端接网络才搞定。这件事告诉我:别想当然,CML的共模电压和LVPECL不兼容。

共模电压归纳总结

CML的共模电压(Vcm)是(VOH + VOL)/2 = (VCC + (VCC - 0.8V))/2 = VCC - 0.4V。等等,刚才SVG里写的共模是VCC - 0.6V?别急,那是另一个常见版本——取决于端接方式。

实际芯片内部,CML输出通常有两种端接结构:

  1. 片上端接式:RC集成在芯片内部,共模电压为VCC - 0.6V(因为恒流源是18mA或20mA,具体看规格)。
  2. 外部端接式:输出端经过50Ω上拉到VCC,共模就是VCC - 0.4V(针对16mA标准)。

我个人习惯看数据手册的“Output Common Mode Voltage”参数。以TI的DS90LV047A为例,其CML输出共模典型值为1.8V,当VCC=3.3V时,Vcm = 3.3V - 1.5V?不对,别乱套。实际公式为Vcm = VCC - Vdrop,其中Vdrop取决于IB与RC的乘积。

核心公式速记

  • 单端摆幅 Vswing_single = IB × RL / 2
  • 差分摆幅 Vswing_diff = IB × RL
  • 共模电压 Vcm = VCC - (IB × RL/2)

端接与耦合策略

CML输出需要什么样的端接?其实超简单——两端各接50Ω到VCC。但实际PCB设计中,你可能会看到两种做法:

CML端接方案对比
方案示意图适用场景
差分直接耦合OUT+ —50Ω— VCC
OUT- —50Ω— VCC
同一电源域、短距离
AC耦合+偏置OUT+ —C— 50Ω— VCC(偏置)
OUT- —C— 50Ω— VCC(偏置)
不同电源域、长距离
端接到地不要!使输出共模错误,信号失真

我曾经在4层板上做过25Gbps CML链路,采用AC耦合后,发现接收端必须提供共模偏置。很多高速ADC或FPGA的CML输入自带内部偏置网络(一般是上拉到VCC/2),这时候串个电容就能直连。但如果你用分立接收器,记得加两个电阻做分压偏置。

避坑指南:共模漂移

我曾经在一个40Gbps背板设计中,CML链路经过长走线后共模电压飘了100mV,导致眼图闭合。后来发现是端接电阻的精度不一致(用了1%的电阻,但两个电阻差了0.5%)。在高速下,共模偏差会转换成差模噪声。所以高频CML链路建议用0.1%甚至0.05%的电阻,或者用片上端接。

总结CML的三个关键数字

  • 16mA——典型恒流源电流,决定了功耗和摆幅。
  • 400mV——单端摆幅,低摆幅换来高速低功耗。
  • VCC - 0.6V——典型共模电压,相当于3.3V电源下约2.7V,2.5V电源下约1.9V。

⚠️ 特别注意

CML输出不能直接匹配到GND!我曾经在培训课上见过新手把端接电阻一端接OUT、一端接地,结果静态工作点完全错,输出变成了VCC/2附近,信号直接拍死在GND上。正确做法:端接电阻必须拉到,而不是GND。

好了,这节把CML的电流逻辑、摆幅、共模都捋了一遍。你在设计时钟树时,如果遇到高速点对点应用(比如10Gbps以上),CML通常是最省心的选择——不需要像LVPECL那样操心偏置电流路径,也不像NECL需要负电源。只要记住端接拉VCC,共模误差控制住,基本上不会出大问题。