PCIe物理层基础:差分信号、码型、预加重与去加重
做PCIe链路均衡故障排查,你绕不开物理层。说白了,链路能跑多快、稳不稳,根子都在这三层基础上:差分信号、编码码型、预加重与去加重。我当年刚接手PCIe Gen3项目时,被眼图闭合搞得焦头烂额,最后发现是对去加重理解不够透。这一节咱们就把这几个坑填上。
1. 差分信号——PCIe的“铁路”
PCIe用差分对传输,就是两根线一起走,信号互为反向。好处很明显:共模噪声被抵消,抗干扰能力强。你想想看,一根线受干扰往上跳,另一根也往上跳,差值是零,对接收端来说等于没跳。这跟单端信号比,简直就是降维打击。
PCIe的差分信号电压摆幅很小,Gen3只有800~1200mV峰峰值。这么小的幅度加上高频损耗,没点均衡手段根本传不远。这就引出了后面的预加重和去加重。
2. 码型——数据怎么编码
PCIe用两种编码:老一点的是8b/10b,新一点的是128b/130b。我习惯把8b/10b叫“冗余换稳定”,128b/130b叫“效率换复杂”。
| 特性 | 8b/10b编码 | 128b/130b编码 |
|---|---|---|
| 使用代际 | Gen1, Gen2 | Gen3, Gen4, Gen5 |
| 编码效率 | 80% | 98.46% |
| DC平衡 | 完美保证 | 通过加扰近似保证 |
| 时钟恢复 | 自带足够跳变 | 依赖加扰+SSP(有序集) |
| 主要用途 | 低速、成熟、可靠 | 高速、高带宽、低误码 |
8b/10b每个字节编码成10位,多了2个bit来做DC平衡和保证过零点。而128b/130b只多了2位同步头,效率高出一大截,但对链路均衡和加扰算法要求更高。我在一次Gen3板卡测试中,发现加扰种子匹配出了问题,导致连续长0,接收端PLL失锁。这就是128b/130b的一个坑——必须保证加扰后的数据有足够的跳变。
3. 预加重与去加重——信号“整形术”
高频信号在传输线上会衰减,而且不同频率衰减不一样。低频分量(长连续位)传得远,高频分量(快速跳变)衰减厉害。结果呢?到了接收端,高频跳变幅度变小,低频幅度相对变大,眼图就塌了。
解决方案就是:发送端“预强调”高频,或者在接收端“去加重”低频。我更喜欢从物理意义上去理解:预加重就是发送时主动把跳变沿的幅度抬高,让它在信道里衰减后正好平衡;而去加重则是把连续同符号位(低频)的幅度压低,相对突出了高频跳变。
去加重通常用两个参数来描述:主游标(Post-cursor)和预游标(Pre-cursor)。主游标决定跳变后的下一个符号幅度,预游标决定跳变前的符号幅度。这个在PCIe CTLE(连续时间线性均衡)和DFE(判决反馈均衡)里都要配合使用。
知识体系结构图
下面这张图帮你看清物理层基础在整条链路中的位置和作用:
看到没有?信号从发送端差分对出发,先经过码型编码,然后预加重,再穿越信道,最后在接收端通过去加重(含CTLE+DFE)、时钟恢复、解码,回到接收端差分对。任何一个环节出了问题,轻则眼图闭合,重则链路训练失败。
4. 实战中的直观感受
我建议你在做链路均衡调试时,手边放一份PCIe Base Spec的物理层章节。但别只看书,要用示波器测实际波形。我就养成了习惯:先测发送端去加重后的波形摆幅,再测经过不同长度信道的接收端眼图。摆幅差超过30%就要调系数了。
这一节讲完了差分对、码型、预加重和去加重,为你拆解后续的均衡故障案例打了底。下次我们聊真正的故障排查流程——你会看到这些基础知识怎么一步步变成debug工具。