2. 高速串行链路基础:差分信号、编码方式(8b/10b、128b/130b)、预加重与均衡
各位做链路设计的同行,今天咱们聊聊高速串行链路最底层的几个核心概念。差分信号、编码方式、预加重和均衡——听起来都是基础知识,但我在项目里见过太多工程师在这上面栽跟头。说白了,这几个东西是链路能否稳定工作的地基,地基歪了,上层啥高级算法都救不回来。
2.1 差分信号:为什么非得拧成一股绳?
我记得刚入行时,有个老工程师跟我说:“你记住,高速信号永远别跑单端。” 当时我还不信,觉得差分就是多两根线、多耗点功耗。直到有一次我调试一块10Gbps背板,单端信号眼图完全是闭的,换成差分立马打开——那才真正明白差分的价值。
差分信号说白了就是用一对等长、等阻抗的线,传两个反相的信号。接收端看的是差值,不是对地电压。好处很明显:
- 抗共模噪声:外界干扰同时耦合到两条线上,差分相减后噪声抵消。你想想看,PCB上那么多开关电源、数字总线,共模噪声到处都是,差分对就像穿了防弹衣。
- 抑制EMI:两条线上电流方向相反,产生的电磁场互相抵消,往外辐射的噪声小很多。
- 更好的噪声容限:差分摆幅可以做得很小(比如200mV),但抗噪能力依然很强。这有助于降低功耗。
2.2 编码方式:8b/10b 和 128b/130b 怎么选?
原始数据直接扔到差分线上是不行的——没有足够的跳变沿,时钟恢复电路就无法锁定。所以我们需要编码,让信号本身“自带时钟信息”。
2.2.1 8b/10b 编码
8b/10b 把每8位数据映射成10位码字。多出的两位用来保证:
- DC平衡:长期来看,0和1的个数差不超过2。这样信号不会积累直流分量,能通过交流耦合。
- 足够跳变:最长连续相同位(run length)不超过5个。这保证了时钟恢复电路至少每5个UI能见到一次跳变。
8b/10b的编码效率只有80%,但实现简单、查找表成熟。我在PCIe Gen1/2、USB 3.0、SATA等接口上都见过它。它的开销是每传100个有效数据比特,实际线路上要传125个比特。
2.2.2 128b/130b 编码
随着速率越来越高,8b/10b那20%的带宽浪费让人心疼。于是有了128b/130b——每128位数据只加2位同步头,编码效率高达98.46%。同步头不是用来做DC平衡的,而是靠加扰器来避免长连0和长连1。128b/130b用在PCIe Gen3/4/5、USB 3.2、Thunderbolt等高速链路。
| 特性 | 8b/10b | 128b/130b |
|---|---|---|
| 编码效率 | 80% | ~98.5% |
| 最大run length | 5 | 取决于加扰器,通常远小于5 |
| DC平衡方式 | 有专用码表保证 | 加扰器+同步头 |
| 典型应用 | PCIe Gen1/2, USB 3.0, SATA | PCIe Gen3~5, USB 3.2, 100G以太网 |
| 实现复杂度 | 低(查找表) | 中(需要加扰/解扰器) |
2.3 预加重与均衡:跟信道损耗死磕
高速信号在PCB走线、电缆、背板上传输时,高频分量衰减比低频严重得多。结果就是眼图闭合、符号间干扰(ISI)严重。嗯,这时候就需要在发送端做预加重,在接收端做均衡来补偿。
2.3.1 预加重(Pre-Emphasis)
预加重说白了就是:发送端在信号跳变时故意“推一把”。比如从0变1时,在第一个UI灌一个大电流,然后维持阶段用正常电流。这相当于给信号的高频分量加了增益,提前补偿信道的低通特性。
常见的预加重配置有2-tap(前一个UI加上当前UI)或3-tap(再加一个后光标)。预加重的幅度和持续时间需要根据信道特性精细调节。我调试过一款25Gbps NRZ的SerDes,预加重系数写错了0.5dB,结果接收端眼图余量从15%掉到了3%。
2.3.2 均衡(Equalization)
接收端的均衡器负责把已经扭曲的信号恢复回来。主要有三种:
- CTLE(连续时间线性均衡):模拟高通滤波器,补偿信道衰减。优点是功耗低、带宽高,但只能做固定形状的补偿。
- FFE(前馈均衡):数字域或模拟域的多抽头滤波器,能灵活补偿信道响应。预加重其实就是发送端FFE。
- DFE(判决反馈均衡):利用已判决的符号来消除后续符号的ISI。它对后光标ISI效果很好,但容易误码传播。
实际链路中,CTLE + DFE是最常见的组合。CTLE先把眼图打开到一定程度,DFE再消除残余的尾巴。
2.4 差分信号+编码+预加重/均衡:一个完整链条
你看上面的结构图,整个链路从发送端编码开始,经过差分传输,到接收端均衡恢复。每个环节都是环环相扣的。我做过一个项目,初期只关注了差分信号的阻抗匹配,忽略了编码的DC平衡特性,结果链路训练时CDR老是失锁。后来发现是因为数据直流分量漂移,导致耦合电容两端电压偏移——换用8b/10b编码后问题消失。
还有一次,信道损耗很严重,我单方面加大预加重幅度,结果发现接收端DFE饱和了,反而误码率升高。后来调整策略:降低一点预加重,增大CTLE的增益,让DFE只处理残留的短回声。这种组合优化,才是链路设计真正考验经验的地方。