差分信号与电气层基础

咱们搞PCIe的,要是搞不清楚差分信号,那链路训练基本上就是听天书。我个人觉得,弄懂电气层是理解LTSSM怎么干活的前提。

信号在高速线路上跑来跑去,不是简单的高高低低。PCIe用的是差分信号,而不是传统单端信号。为什么?说白了就是为了抗干扰。你想想看,一根线传数据,旁边再来个电磁干扰,信号就变样了。

为什么要用差分信号?

差分信号用两根线传,一根叫P(Positive),一根叫N(Negative)。传“1”的时候,P比N高;传“0”的时候,P比N低。接收端只看两根线的差值,不看电平。

举个例子,我在调试一个项目时,板子布局很挤,电源噪声也大。同样的信号,单端方式根本扛不住,眼图是闭的。换成差分对,立马解了问题。因为共模噪声(两线同时被干扰的部分)会被接收端直接滤掉——这不就是“共模抑制比”吗?

小技巧: 看差分信号好坏,不要只盯着单根线的波形。我建议直接用示波器测“P - N”的差值波形,那个才是接收芯片真正看到的东西。

差分信号的电气参数

这里有几个你必须搞熟的参数,它们直接影响链路能不能起来。

参数 含义 典型值(PCIe Gen3)
差分电压摆幅 两根线之间的电压差最大值 800~1200 mV(Tx端)
共模电压 两根线的平均电平 约0V(交流耦合后)
上升时间/下降时间 信号从20%到80%的时间 约30~50 ps
预加重/去加重 发端主动调整信号幅度,补偿高频损耗 根据链路长度调节

嗯,这里要注意一点——交流耦合电容。PCIe链路在发送端和接收端之间会串一个电容,通常100nF到220nF。它的作用是把共模电压彻底弄干净,让发送端和接收端自己各用各的偏置。我以前见过有人把电容省掉,结果链路根本训练不过去,因为两端的共模电平打架了。

电气层的关键指标:抖动与眼图

在LTSSM开始Recovery或者Polling之前,电气层得先做一个基础的质量检测——看信号质量能不能保证最基本的通信。这里就引出了两个核心概念:抖动和眼图。

抖动,就是信号跳变的边沿不在它该在的时间点上。说白了,就是时钟或数据信号的相位在乱变。抖动大了,接收端采集数据就会采错位。

  • 确定性抖动(DJ): 有固定来源,比如串扰、电源纹波。这种抖动是“有规律”的。
  • 随机抖动(RJ): 来源是热噪声、散粒噪声这种随机过程,没有规律,但可以用高斯分布描述。
  • 总抖动(TJ): 一般取10^-12误码率下的峰值。

眼图呢?把很多个信号周期叠在一起,看上去就像个眼睛。这个“眼睛”张开的大小直接告诉你能用的采样窗口有多宽。

重点记住: 链路训练的第一步,其实是电气层自己先“开眼”。如果眼图差到让接收端抖得连8b/10b编码的K码都找不到,那LTSSM就会傻在Detect状态,永远进不去Polling。

我记得有一次在实验室,眼图看起来是开的,但抖动很大。链路能进Polling,但Recovery老失败。最后查出来是参考时钟的PLL相噪超标。那之后,我养成一个习惯——先看眼图,再看时钟,最后才怼训练状态机。

PCIe差分对的规范要求

PCIe对差分对的要求其实很严格。下面是几个你设计PCB时必须记牢的硬指标:

  1. 阻抗控制: 差分阻抗必须是100Ω ± 15%(单端对地阻抗50Ω)。我见过很多刚入行的工程师,做差分对时把线宽和间距搞错了,阻抗偏到80Ω或120Ω,反射直接让信号完蛋。
  2. 等长匹配: P和N两条线长度差不能超过5 mil(0.127 mm)。不等长的话,差分信号会变成共模信号,接收端就分不清1和0了。
  3. 过孔控制: 不建议在差分对上打过孔,如果必须打过孔,每个过孔的寄生电容最好降到0.3pF以下。我之前有个板子,差分对过了两个孔,结果8Gbps的眼图直接闭合,后来改成表层走线+不换层,搞定。
  4. AC耦合电容位置: 电容尽量靠近发送端放置,电容本体宽度不要超过差分对间距的2倍,避免阻抗不连续。
避坑提醒: 差分对不能跨分割平面!我吃过这个亏——板子地平面被挖了个槽,差分对从槽上面跨过去,结果共模噪声暴增,链路根本训练不起来。后来重新改板,绕开那个槽,好了。珍爱生命,远离跨分割。

电气层与LTSSM的关系

到这里,我们应该把电气层的核心内容串起来。下面的SVG图把这几个关键概念的关系展示出来:差分信号→电气参数→眼图/抖动→LTSSM状态机。我的理解是:电气层就像是一层地基,LTSSM是在这个地基上跑的逻辑。地基不稳,上层的训练就没戏。

电气层基础与LTSSM的关系框架 差分信号 电气参数 抖动与眼图 阻抗与等长 LTSSM状态机 电气层质量决定眼图开度 眼图决定接收端能否找到训练序列

理解了这个图,你再看LTSSM就不会抓瞎。链路训练的第一步——Recovery阶段里,接收端要测量信号的眼图。如果眼高或眼宽不达标,接收端会给发送端发信号,要求调整去加重或者摆幅。这就是电气层向上影响到状态机逻辑的典型场景。

说白了,电气层好不好,直接决定了你的链路训练能不能走到L0。许多工程师只盯着状态机流程,却忽略了最基础的东西——信号质量。我自己的习惯是:不管调试什么高速链路,先从眼图开刀,眼图不过,一切都免谈。