2. PCIe物理层介绍:分层、电气特性与差分信号
各位同学,咱们今天聊聊PCIe物理层。嗯,这层是数据真正“上马路”的地方。你协议层讲的再花哨,最后也得靠物理层这几个引脚把0和1发出去。我经常跟团队里的小朋友说,链路不稳定,八成问题出在物理层。你搞不定物理层,后面的均衡调试就是空中楼阁。
2.1 物理层到底分几层?
很多人以为物理层就一个“铁壳子”,其实它内部有自己的一套小班子。PCIe物理层从功能上分为两个子层:电气子层(Electrical Sublayer)和逻辑子层(Logical Sublayer)。逻辑子层再往下,还能细分出一个物理编码子层(PCS,Physical Coding Sublayer)。这不像协议层那么抽象,它离硬件最近。
我们打个比方:逻辑子层负责“翻译”和“排队”,电气子层负责“喊话”。
- 逻辑子层:负责对发送数据进行编码(比如128b/130b编码),做加扰(Scrambling),然后组织成一个个有序集(Ordered Set)——比如TS1、TS2这些训练序列。
- 电气子层:负责驱动差分线对,做信号均衡(TX Equalization/RX CTLE/DFE),处理阻抗匹配。这子层直接跟PCB走线、连接器、板级寄生参数打交道。
核心理解:逻辑子层把数据变成“一串带规则的符号”,电气子层把这串符号变成“能在铜线上跑的电信号”。一个管格式,一个管力道。
我记得第一次调试Gen3链路时,发现链路只Link到Gen1。我排查了三天,最后发现是逻辑子层的加扰模块没完成初始化,导致发送的TS1有序集格式不对。接收端根本认不出来。你看,这种问题你光看眼图是看不出毛病的。
2.2 电气特性:不是你想象的那么简单
电气特性说白了就是电压、电流、时序、阻抗这四样东西。PCIe从Gen1到Gen5,电压摆幅越来越小,频率越来越高。Gen1是1.5V左右的差分摆幅,到了Gen5就只剩0.8V了。为什么?高频下你还那么大摆幅,功耗受不了,而且EMI也控制不住。
几个关键参数,我帮你梳理一下:
| 参数 | Gen1/Gen2 | Gen3 | Gen4 | Gen5 |
|---|---|---|---|---|
| 差分峰值电压 | 800-1200 mV | 800-1200 mV | 800-1200 mV | 800-1200 mV |
| 差分低电平电压 | -1200 到 -800 mV | -1200 到 -800 mV | -1200 到 -800 mV | -1200 到 -800 mV |
| 接收器差模阻抗 | 80-120 Ω (差分) | 80-120 Ω | 80-120 Ω | 80-120 Ω |
| 数据速率 | 2.5/5.0 GT/s | 8.0 GT/s | 16.0 GT/s | 32.0 GT/s |
| 编码方式 | 8b/10b | 128b/130b | 128b/130b | 128b/130b |
注意这个表里的阻抗。PCIe要求差分阻抗为100Ω,允许偏差±10%。我曾经调试一块板子,眼图死活张不开,后来切片一看,PCB走线在换层过孔处阻抗掉到了85Ω。那一点点不连续,在高频下就是个大坑。
实战技巧:设计PCB时,PCIe差分对的换层过孔要加回流地孔,且孔间距不超过信号上升沿长度的1/4。Gen5的上升沿可能只有20ps,算下来地孔距离不得大于2mm。
2.3 差分信号:PCIe的“筋骨”
差分信号是PCIe最核心的物理传输方式。每条Link由一对发送差分对(TX+ / TX-)和一对接收差分对(RX+ / RX-)组成。为什么用差分?说白了,抗干扰。
你想想看,普通单端信号,你走一根线,地平面上的噪声全部耦合进来。差分信号有两条线,一根走正信号,一根走负信号。外界噪声来袭,两根线同时受到影响,做减法(RX+ 减去 RX-)后,噪声相互抵消了。
这里有个简单的示意图(不用在意参数,看原理):
发送端: PCB走线: 接收端:
TX+ ──────────//──────────> RX+
TX- ──────────//──────────> RX-
↓
共模噪声
被抵消
差分信号还有个好处:它不需要一个干净的参考地平面。两根线自己构成一个回路,所以对地弹、电源噪声的容忍度更高。我记得有一年设计服务器主板,CPU和PCH之间跨接一个很长的走线,中间过了一个连接器。单端信号那个区域根本工作不了,但PCIe Gen3的差分对跑得稳稳的。
但要注意,差分信号对等长和间距极其敏感。你两根线长度差超过10mil,在高频下就会产生共模噪声,直接拉低眼图高度。
避坑指南:我曾经有一块Gen4板子,PCIe链路加完均衡才勉强到Gen2速率。查了半天,发现TX差分对内等长差了15mil。你以为0.5mm的差距微不足道?在16GT/s的速率下,这0.5mm能导致接收端产生几十mV的定时误差。修完等长,链路直接稳定上Gen4。
下面这张图是我画的物理层结构示意图,帮你把今天的内容串起来:
这个图你可以存下来。我经常在方案评审时拿出来讲:逻辑子层管“数字的语言”,电气子层管“模拟的力气”,而差分信号就是它们之间传递消息的那根“电话线”。三者缺一不可。
2.4 关于眼图,我想多说两句
眼图是评估PCIe物理层信号质量的最直观工具。你在示波器上看差分信号,叠加很多个UI后形成了类似“眼睛”的形状。眼图张开的宽度代表定时裕量,高度代表电压裕量。
PCIe规范对眼图有明确要求:Gen3要求眼高不低于100mV,眼宽不低于0.4UI。但实际调试中,我建议你留20%的余量。你永远不知道产线上的板子会多糟糕。
实用观点: 物理层不是“一次性交付”的东西。板子打样回来,先测眼图。链路不稳定,先看物理层参数。不要跳过这一步去分析协议层超时——很多时候是物理层丢了符号,你协议层再怎么重传都没用。