第2章 PCIe链路层基础:差分信号、预加重、去加重、去预加重概念
各位,咱们今天聊点实实在在的东西。PCIe的高速信号能跑在Gen5/Gen6,靠的可不是运气,而是链路层那一套精细的均衡机制。我刚入行时也觉得这些概念很抽象,直到亲手调过好几块板子,才真正体会到它们的重要。
2.1 差分信号:为什么非它不可?
先说个最简单的起点。PCIe的信号传递,用的是差分对——也就是 D+ 和 D- 两根线。接收端看的是两个引脚之间的电压差,而不是对地电压。
为什么要这么麻烦?我做过一个25Gbps的项目,用单端信号连了10cm走线,结果串扰直接把眼图打成了“一团糊”。换成差分对之后,问题基本消失了。原因很简单:外部噪声会同时叠加在D+和D-上,差模接收器一相减,噪声就被干掉了。用行话说就是“共模抑制比高”。
差分信号还带来两个额外好处:
- 电压摆幅小:典型PCIe发送端只有800 mV~1.2 V的差分摆幅,功耗更低,也更适合高频切换。
- 电磁辐射低:两根线上的电流方向始终相反,远场的磁通互相抵消,EMI自然就小了。
2.2 预加重:在发送端“提前使劲”
高速信号经过PCB走线、连接器、过孔……每经过一级损耗,高频分量就会被削弱一大截。你想想看,方波里含有丰富的高频成分,损耗后变成圆滚滚的波形,码间干扰(ISI)就开始作祟了。
怎么办呢?最简单粗暴的方法——在发送端就把信号的高频分量提前“打足”。这就是预加重。具体做法是:发送一个bit时,如果当前bit和上一个bit不同(即发生了跳变),我就让发送器在这第一个bit上多给一点幅度;如果连续发相同的bit(比如一连串的1),就不加额外幅度。这样做,高频能量被补上了,经过信道衰减后,接收端看到的波形反而更干净。
2.3 去加重:换个角度看同一件事
预加重是给跳变bit“补”能量。那么去加重呢?它是反过来——把连续相同bit(比如长串的“111111”)的幅度压低。效果上两者本质相同:高/低频分量的相对比例变了,只是执行角度不一样。
很多新手搞混这两者,我快速对比一下:
| 对比项 | 预加重 | 去加重 |
|---|---|---|
| 操作对象 | 跳变后的第一个bit | 连续相同的bit(非跳变位) |
| 幅度变化 | 该bit幅度增大 | 该bit幅度减小 |
| 相对关系 | 跳变位幅度 > 非跳变位 | 非跳变位幅度 < 跳变位 |
| 实际应用 | PCIe发送端大多使用预加重 | 部分高速串行标准(如SATA)使用去加重 |
嗯,这里要注意:预加重和去加重不能同时正交使用,因为它们是同一个调节参量的不同表述。PCIe链路训练时会协商出一组系数,这组系数就决定了每个bit的预加重/去加重深度。
2.4 去预加重:补上概念的最后一环
你可能看到过“de-emphasis”和“pre-emphasis”,那“de pre-emphasis”又是什么?说白了,就是把去加重反过来看,强调了对“前一个bit”的影响。我在一本老芯片手册里第一次见到这个说法,当时也愣了一下。
从数学上讲:发送端可以做一个三抽头的FIR滤波器(前标、主标、后标)。调整后标系数就能实现去加重,调整前标系数就是预加重。PCIe规范里更常见的是用去加重的dB值来描述(比如-3.5 dB),所以大多数人直接叫“去加重”。不过遇到老一辈文档上写“de pre-emphasis”,你心里清楚它就是指“发送均衡中的去加重部分”就行。
2.5 从概念到流程:链路均衡处理图
下面这张SVG图把整个发送端均衡处理路径画出来了。你可以对照自己的板子,看看哪个环节可能被忽略。
2.6 实操避坑清单
聊了这么多概念,我总结几条自己踩过的和看别人踩过的坑:
- 不要以为开了均衡就万事大吉:有次Gen4板卡测试,眼图一直有“双线”,查了半天发现发送端预加重系数虽然是-3.5 dB,但码型发生器配的PRBS模式太短,根本没测出真正的长ISI。后来换成PRBS31,问题立刻暴露。
- 预加重不是越大越好:过度预加重会让跳变处出现过冲,反而增加EMI和接收端过应力。建议从PCIe规范推荐值(Gen3通常-3.5 dB)开始,逐步微调。
- 差分信号走线必须等长:差分对内时延差>5 ps时,共模抑制能力急剧下降。我曾见过一根板卡D+比D-长10 mil,结果眼图歪了30%,加什么均衡都救不回来。修等长后才恢复正常。
- 去加重参数是“负收益”场景:如果信道损耗极小(比如1 cm短距),加去加重反而会降低信噪比。所以PCIe链路训练时会自动协商,不要手动把系数写死。
好,以上就是差分信号、预加重、去加重、去预加重这些基础概念的来龙去脉。别忘了,它们背后的数学本质就是一个三抽头FIR滤波器:前标(pre-cursor)控制预加重,后标(post-cursor)控制去加重。只要你理解了这一点,后面再讲CTLE和DFE就顺了。