LVPECL 与 CML 基础:这两个家伙到底从哪来的?
各位工程师朋友,咱们这门课聊的是 LVPECL 和 CML 的误码排查。但你别一上来就盯着眼图和抖动看,先把这两个信号标准是什么东西搞清楚,心里才有底。
我在这个行业干了十几年,说实话,很多人连 LVPECL 和 CML 的本质区别都说不清楚。上来就抄参考设计,最后板子调不通,眼图一塌糊涂。这种事我见得太多了。
1.1 什么是 LVPECL?
LVPECL,全称 Low-Voltage Positive Emitter-Coupled Logic。它的老祖宗是 ECL,上世纪六七十年代的东西。那时候 ECL 以速度快著称,但功耗大得吓人,而且电源电压还要负的,用起来很麻烦。
后来大家觉得,能不能把电压降下来,改成正电源?嗯,LVPECL 就诞生了。它把电源电压从原来的 -5.2V 调整到 3.3V 或 2.5V,功耗降了不少,速度却基本保留了。你想想看,这简直是高速信号领域的一大步。
我个人习惯把 LVPECL 理解成一个“差分电流开关”。输出级就是两个三极管,谁通谁断,完全由输入决定。电流源恒定在约 14mA,输出共模电压大概在 VCC - 1.3V 左右。这些参数你最好记住,因为后面算端接的时候会反复用到。
核心要点:LVPECL 是靠恒定电流在电阻上产生差分电压来传输数据的。它的摆幅典型值在 800mV 左右,但由于速度快,电路对端接匹配非常敏感。
1.2 LVPECL 的典型应用场景
LVPECL 在我职业生涯里用得最多的场景是什么?第一是时钟分配。比如你要把一个 1GHz 的参考时钟分给好几个芯片,LVPECL 是首选。它的驱动能力强,抗噪性能好,长距离传输也不易失真。
第二是高速串行总线。像一些早期的 SONET 接口、10Gbps 以下的 SerDes,用的就是 LVPECL。不过现在很多新设计已经换了 CML,原因后面我会讲。
- 时钟缓冲/分配:LVPECL 扇出能力强,适合多负载场景。
- 高速背板互联:几 Gbps 到 10Gbps 的背板链路,LVPECL 曾经是主流。
- 光纤通信模块:早期的 SFP、SFP+ 模块里,LVPECL 很常见。
1.3 什么是 CML?
CML 的全称是 Current-Mode Logic。说白了,它比 LVPECL 更“现代”一些。你想想看,LVPECL 虽然快,但它的输出共模电压高,直流功耗也不小。CML 就不一样了,它把电流导向外部电阻,自己只管开关。
CML 的典型结构是两个 NMOS 管组成差分对,漏极接上拉电阻到 VCC。输出摆幅完全由这个电阻和电流决定。比如你用 50Ω 上拉、电流 16mA,那差分摆幅就是 16mA * 50Ω = 800mV,两边分摊一下,单端摆幅 400mV。
我最早接触 CML 是在做 XAUI 接口的时候。那时候发现 LVPECL 的共模电压和主流芯片的电源域不匹配,CML 就更合适。后来发现,不光是 XAUI,PCIe、SATA、USB 3.0,这些高速接口全部转向了 CML。为什么呢?因为它简单、低功耗、容易集成。
一个小技巧:判断一个高速信号是 LVPECL 还是 CML,最直接的办法是量一下共模电压。LVPECL 的共模大概在 VCC - 1.3V,CML 的共模在 VCC - 0.4V 左右。用万用表一量,基本八九不离十。
1.4 CML 的典型应用场景
CML 今天几乎是所有高速串行接口的标准输出级。它已经成了事实上的工业标准。我前几年做一个 25Gbps 的项目,从 FPGA 到光模块,全是 CML。这玩意儿省电,而且端接简单,直接对 VCC 上拉 50Ω 就行了。
再比如光模块电接口,CML 占据统治地位。我以前调过一个 28Gbps 的 SFP+ 模块,眼图问题排查了三天,最后发现是 CML 输出级的交流耦合电容选小了。你想想看,一个细节不注意,整个链路就废了。
- 高速 SerDes:PCIe Gen3/Gen4/Gen5,USB 3.x,SATA,全部是 CML。
- 以太网物理层:10GBASE-KR,25GBASE-KR,100G 以上,CML 是标配。
- 光模块电接口:SFP+、QSFP、CFP 等模块的 HOST 端几乎都是 CML。
1.5 LVPECL 与 CML 的核心差异
我把这两个标准的核心差异给你列个表,你一看就明白。记住,这个表格你可以在做方案选型时作为快速参考。
| 对比项 | LVPECL | CML |
|---|---|---|
| 输出结构 | 差分对 + 恒流源 | 差分对 + 上拉电阻 |
| 输出共模 | VCC - 1.3V | VCC - I*R/2 (约 VCC - 0.4V) |
| 差分摆幅 | 典型 800mV | 典型 400~800mV |
| 直流功耗 | 较高,恒定约 40mW(3.3V) | 较低,依赖负载 |
| 端接方式 | 需要特殊端接网络 | 简单,对 VCC 上拉 50Ω |
| 交流耦合兼容性 | 好,需注意共模恢复 | 极好,广泛使用 |
| 应用趋势 | 时钟、早期高速接口 | 现代高速串行接口 |
1.6 从历史看选择:为什么 CML 成了主流?
说到底,CML 的胜出是个“妥协优化”的结果。LVPECL 出现得早,性能也不错,但它有三个天生的问题:第一,功耗高,现代芯片对功耗越来越敏感;第二,端接麻烦,需要偏置电阻网络,占板面积大;第三,共模电压高,和低电压工艺不匹配。
CML 就不同了。它采用共源极结构,电压裕量要求低,可以在更低的电源电压下工作。随着工艺节点从 65nm 到 28nm 再到 7nm,芯片的电源越来越低。LVPECL 的 VCC - 1.3V 共模,在 1.8V 或 1.2V 的 I/O 电压下完全无法工作。CML 却游刃有余。
我印象很深,有一年我在做一个 40nm 芯片的接口定义,就因为电源域的问题,最后把整个时钟路径全部改成了 CML。虽然增加了几个电容和电阻,但规避了共模电压不兼容的坑。这件事让我深深意识到,选型不是看谁参数好看,而是看谁能在系统里正常工作。
当然,LVPECL 在时钟分配领域到今天还有一席之地,因为它抖动性能确实好。但如果你做的是纯数据链路,比如 10Gbps 以上的串行通信,CML 是毫无疑问的首选。
1.7 误码从哪里来?
好了,现在你知道了 LVPECL 和 CML 是什么。但为什么在实际项目中它们会产生误码?
我个人总结,误码的来源无非就这几种:
- 阻抗不连续:端接没做好,反射造成码间干扰。
- 电源噪声:特别对 LVPECL,电源噪声会直接耦合到输出上。
- 共模电压失配:这在我职业生涯中踩过好多次。交流耦合之后,接收端的偏置不对,眼图直接合不拢。
- 信号完整性恶化:损耗、串扰、抖动,三点加起来,误码率蹭蹭往上涨。
我曾经在一个 6Gbps 背板项目上,就是因为一个 PCB 走线的过孔残桩没处理好,导致误码率总是下不来。排查了整整一个星期,最后用 TDR 一测,发现了那个 2mm 的残桩。嗯,这种坑,你遇到了就知道有多痛。
特别提醒:LVPECL 和 CML 的端接不能互换。LVPECL 需要特殊端接网络(比如 Thevenin 等效 50Ω 到 VCC - 2V),CML 直接对 VCC 上拉就可以。曾有人把 CML 的端接照搬到 LVPECL 上,结果整个系统不工作。别问我怎么知道的。