4、CML电气特性:电流模式逻辑、电压摆幅、共模归纳总结
好了,咱们前面聊完了LVPECL,这次轮到CML了。CML这货在高速时钟分发里特别常见,尤其是那些10Gbps以上的SerDes接口,几乎清一色用CML输出。我个人习惯把它叫做“电流屁股”——因为它的屁股(输出级)永远在拉电流,说白了就是个恒流源驱动的差分管对。
我当年第一次调试25Gbps的激光驱动器,量CML输出眼图,发现共模电压死活不对。后来一查,根本原因是端接电阻选错了……嗯,这些坑待会儿都会提到。先看一张总图,把CML的电流逻辑、电压摆幅和共模关系理清楚:
电流模式逻辑的本质
CML和LVPECL最大的区别在哪?你想想看,LVPECL输出级有个射极跟随器(Emitter Follower),所以它输出阻抗低得吓人。但CML呢?它的输出级就是一个共源(或共射)差分管对,下拉电阻直接接电源。电流源永远在尾巴上吸电流,管子要么导通要么截止,没有中间的线性区。
为什么叫“电流模式”?因为它的逻辑状态是靠电流流向决定的,而不是电压。左边的管子通,电流走左边,右边输出高阻态(实际为电源电压减去IR压降);右边通,则反过来。我当年做16Gbps时钟分配时,第一次用CML缓冲器,发现功耗远低于同速率的LVPECL——一个恒流源16mA,两个50Ω电阻,简单粗暴。
| 特性 | CML | LVPECL |
|---|---|---|
| 输出级结构 | 差分管对 + 下拉电阻到电源 | 差分管对 + 射极跟随器 |
| 静态电流 | 约16mA(50Ω负载) | 约14-20mA |
| 输出阻抗 | ≈50Ω(无缓冲) | ≈7-10Ω(低阻抗) |
| 摆幅 | 固定400mV(峰峰值) | 约800-1000mV |
| 共模电压 | VCC - 0.6V | VCC - 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输出通常有两种端接结构:
- 片上端接式:RC集成在芯片内部,共模电压为VCC - 0.6V(因为恒流源是18mA或20mA,具体看规格)。
- 外部端接式:输出端经过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设计中,你可能会看到两种做法:
| 方案 | 示意图 | 适用场景 |
|---|---|---|
| 差分直接耦合 | 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上。正确做法:端接电阻必须拉到
好了,这节把CML的电流逻辑、摆幅、共模都捋了一遍。你在设计时钟树时,如果遇到高速点对点应用(比如10Gbps以上),CML通常是最省心的选择——不需要像LVPECL那样操心偏置电流路径,也不像NECL需要负电源。只要记住端接拉VCC,共模误差控制住,基本上不会出大问题。