差分信号与电气层基础
咱们搞PCIe的,要是搞不清楚差分信号,那链路训练基本上就是听天书。我个人觉得,弄懂电气层是理解LTSSM怎么干活的前提。
信号在高速线路上跑来跑去,不是简单的高高低低。PCIe用的是差分信号,而不是传统单端信号。为什么?说白了就是为了抗干扰。你想想看,一根线传数据,旁边再来个电磁干扰,信号就变样了。
为什么要用差分信号?
差分信号用两根线传,一根叫P(Positive),一根叫N(Negative)。传“1”的时候,P比N高;传“0”的时候,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误码率下的峰值。
眼图呢?把很多个信号周期叠在一起,看上去就像个眼睛。这个“眼睛”张开的大小直接告诉你能用的采样窗口有多宽。
我记得有一次在实验室,眼图看起来是开的,但抖动很大。链路能进Polling,但Recovery老失败。最后查出来是参考时钟的PLL相噪超标。那之后,我养成一个习惯——先看眼图,再看时钟,最后才怼训练状态机。
PCIe差分对的规范要求
PCIe对差分对的要求其实很严格。下面是几个你设计PCB时必须记牢的硬指标:
- 阻抗控制: 差分阻抗必须是100Ω ± 15%(单端对地阻抗50Ω)。我见过很多刚入行的工程师,做差分对时把线宽和间距搞错了,阻抗偏到80Ω或120Ω,反射直接让信号完蛋。
- 等长匹配: P和N两条线长度差不能超过5 mil(0.127 mm)。不等长的话,差分信号会变成共模信号,接收端就分不清1和0了。
- 过孔控制: 不建议在差分对上打过孔,如果必须打过孔,每个过孔的寄生电容最好降到0.3pF以下。我之前有个板子,差分对过了两个孔,结果8Gbps的眼图直接闭合,后来改成表层走线+不换层,搞定。
- AC耦合电容位置: 电容尽量靠近发送端放置,电容本体宽度不要超过差分对间距的2倍,避免阻抗不连续。
电气层与LTSSM的关系
到这里,我们应该把电气层的核心内容串起来。下面的SVG图把这几个关键概念的关系展示出来:差分信号→电气参数→眼图/抖动→LTSSM状态机。我的理解是:电气层就像是一层地基,LTSSM是在这个地基上跑的逻辑。地基不稳,上层的训练就没戏。
理解了这个图,你再看LTSSM就不会抓瞎。链路训练的第一步——Recovery阶段里,接收端要测量信号的眼图。如果眼高或眼宽不达标,接收端会给发送端发信号,要求调整去加重或者摆幅。这就是电气层向上影响到状态机逻辑的典型场景。
说白了,电气层好不好,直接决定了你的链路训练能不能走到L0。许多工程师只盯着状态机流程,却忽略了最基础的东西——信号质量。我自己的习惯是:不管调试什么高速链路,先从眼图开刀,眼图不过,一切都免谈。