2. 差分信号基础:驱动、接收与终端匹配
好,我们正式开始第二章。差分信号这东西,说白了就是两根线传一个信号。一根传正,一根传反。接收端看的是它们之间的差值。我刚开始做高速设计时,总觉得这玩意儿有点“浪费”——明明一根线能干的事,干嘛要用两根?后来被项目教训了几次,才彻底明白——
核心认知:差分信号不是为了传得更快,而是为了传得更稳。抗共模噪声、抑制 EMI、降低串扰——这些才是它的真正价值。
2.1 差分信号的基本原理
先看一个最简单的图。一个驱动器,两根传输线,一个接收器。驱动器输出 Vp 和 Vn,接收器检测 Vp - Vn。
为什么用差分?我举一个真实场景。有一次测一块板子,单端时钟线串扰特别大,导致相邻数据线误码。换成差分对之后,同一个板子,同样的噪声环境,误码全消失了。原因很简单:噪声同时加到 Vp 和 Vn 上,接收端做减法时,共模噪声被抵消了。
说几个关键指标吧:
- 差分摆幅 (VOD): Vp − Vn 的峰值。CML 一般 400mV,LVPECL 典型 800mV。
- 共模电压 (VCM): (Vp + Vn)/2。CML 靠 VCC,LVPECL 靠 VCC − 1.3V。
- 差分阻抗 (Zdiff): 一对线之间的阻抗。我们常用 100Ω。
- 共模阻抗 (Zcm): 每根线对地的阻抗。一般 25Ω ~ 50Ω。
我的个人习惯: 新手总盯着 VOD 看,忘了 VCM 才是匹配的关键。VCM 不对,接收器直接饱和或截止,信号根本没法用。我见过有人用了漂亮的 LVPECL 驱动器,但接收器输入范围只有 0~1V,结果整个链路废了。
2.2 差分驱动器的常见类型
目前在高速时钟接口里,用得最多的就两种:CML 和 LVPECL。它们各有脾气。我列个表,你一看就明白。
| 参数 | CML | LVPECL |
|---|---|---|
| 输出摆幅 (VOD) | ~400 mV | ~800 mV |
| 共模电压 (VCM) | VCC − 0.2V | VCC − 1.3V |
| 功耗 | 低 (约 20 mW) | 较高 (约 100 mW) |
| 速度上限 | ~40 Gbps | ~10 Gbps |
| 终端方式 | 上拉到 VCC | 戴维南分压等效 |
CML(电流模式逻辑)
CML 的驱动器就是个电流源。电流流到 50Ω 上拉电阻,产生 400mV 摆幅。我做过一个 25Gbps 的串行链路,CML 直接驱动,信号干净得像教科书。但要注意:CML 的输出必须外接 50Ω 上拉到 VCC。如果不接,输出摆幅会翻倍,接收器可能被烧掉。嗯,这点我吃过亏,后面会细说。
LVPECL(低压正发射极耦合逻辑)
LVPECL 摆幅大,噪声容限高。但功耗也大。我记得有一次在 FPGA 上跑 LVPECL 输出,芯片温度直接飙了 15°C。所以现在能不选 LVPECL 我就不选,除非是低频但要求极高抗干扰的场景。
为什么 LVPECL 需要终端?它的输出级是射极跟随器,必须有一个直流通路到地。没有终端,输出直接饱和,信号全废。
2.3 差分接收器的关键特性
接收器就三个事:共模范围、输入灵敏度、迟滞。
- 共模输入范围: 驱动器的 VCM 必须落在接收器 specs 内。CML 的 VCM 接近 VCC,LVPECL 是 VCC − 1.3V。用错了接收器,信号就被削波。
- 输入灵敏度: 接收器能识别的最小差分电压。CML 的 400mV 摆幅大多能轻松满足,但如果经过长线衰减,可能只剩 100mV。灵敏度不够,误码率暴增。
- 迟滞: 防止信号抖动引起多次翻转。高速接收器一般自带,但有些老芯片没有。我用过一个老款 FPGA 差分输入,没有迟滞,时钟边沿抖动不停,最后加了个施密特触发器才搞定。
2.4 终端匹配:为什么是硬要求
反射!差分信号也是信号,不匹配就有反射。反射造成过冲、振铃、抖动,甚至误码。
CML 终端匹配
CML 最简单。驱动器内部已经有 50Ω 上拉(新版器件常见),外部只需要在接收端并一个 100Ω 跨接电阻。如果是老器件没有内部上拉,那就麻烦了——需要每个输出脚外接 50Ω 到 VCC。布线空间紧张的时候,我宁愿选新器件。
// CML 终端(接收端)
// 在差分对末端,跨接一只 100Ω 电阻
// 若驱动器无内部上拉,每根线还需 50Ω 到 VCC
// 推荐贴片 0603,紧贴接收器引脚
// 最终网络:
// Vp ────┬── 100Ω ──── Vn
// │
// └── 50Ω (到 VCC,可选)
LVPECL 终端匹配
LVPECL 的终端就是戴维南等效。标准做法:每根线分别用 50Ω 拉到 VCC−2V(对 3.3V 就是 1.3V)。这个电压不常用?那就用分压电阻:一个 130Ω 到 GND,一个 82Ω 到 VCC。
// LVPECL 戴维南终端(3.3V 供电)
// Vp ──┬── 82Ω (到 VCC=3.3V)
// └── 130Ω (到 GND)
// Vn ──┬── 82Ω (到 VCC=3.3V)
// └── 130Ω (到 GND)
// 也可以直接用:每根线 50Ω 到 1.3V 电源
// 但多一个电源就多一层麻烦
重要提醒: 终端电阻必须尽可能靠近接收器引脚。我曾经在项目里把终端电阻放在了板子边缘,离接收器 2cm 远,结果 5GHz 时钟的边沿反射得一塌糊涂。后来我把电阻贴到了接收器背面焊盘上,问题才解决。
AC 耦合与终端
如果链路中有 AC 耦合电容,终端电阻必须放在电容的接收器侧。驱动器侧放电阻会把共模点拉偏。我见过好几次设计,把终端放在了驱动器侧,结果 VCM 完全不对,信号直流电平漂移,接收器直接不工作。
2.5 总结几个实践要点
- 阻抗匹配: 差分走线严格按 100Ω 差分阻抗控制。层叠结构、线宽、线间距都要算好。
- 等长: Vp 和 Vn 时延差越小越好。我一般控制在 5ps 以内,也就是线长差小于 1mm。
- 终端位置: 电阻紧挨接收器。走线越短,反射越小。
- 共模电压检查: 连接前先算好 VCM 匹配。不匹配就别往下做。
最后想说一句:差分信号不难,细节都在终端匹配和共模电压上。你把这个基础打牢了,后面 LVPECL 和 CML 的具体设计就水到渠成。