第2章 PCIe电气层基础:差分信号、眼图、抖动

这一章,咱们来聊聊PCIe物理层最核心的三个东西:差分信号、眼图和抖动。你第一次看到PCIe高速信号的眼图时,是不是以为屏幕坏了?怎么一片模糊的“眼睛”还闭着?别急,看完这章你就全明白了。

2.1 差分信号——为什么不用单端?

PCIe从Gen1到Gen6,一直坚持用差分信号传输。为什么?说白了,就两个理由:抗干扰强、信号干净。

差分信号说白了就是“一正一反”两根线(D+和D-),传的是它们的电压差。外界噪声来了,两根线上同时叠加同样的噪声,一减就没了。我个人觉得,这是模拟电路最巧妙的设计之一。

差分信号三大优势:
  • 共模抑制:外界噪声在两根线上“同向”出现,差分抵消
  • 辐射更小:两根线上电流方向相反,电磁场互相抵消
  • 电压摆幅小:可以用更低的电压(如800mV)跑更高频率

我在项目中遇到过一件事:有一次调试Gen3链路,发现误码率总是降不下来。示波器一测,单端信号波形还行啊。换成差分探针一看——问题出来了,D+和D-的压摆率不一样,导致差分转换点偏移。从那以后,我每次看信号都要提醒自己:别只看单端,差分才是王道。

对比项 单端信号 差分信号
抗干扰能力 弱 强(共模抑制)
EMI辐射 高 低
电压摆幅 大(1.8V-3.3V) 小(0.8V-1.2V)
PCB占用 1根线/信号 2根线/信号
PCIe适用性 不推荐 必须
避坑指南:我曾经见过一个团队,layout时为了省空间,把差分对的间距拉得太宽。结果呢?共模抑制效果大打折扣,眼图直接闭合。差分对的等长、等间距、同层走线,一条都不能省。

你想想看,PCIe Gen4的速率已经到16 GT/s,一个UI(单位间隔)才62.5 ps。这么短的时间里,信号的上升沿和下降沿必须精确到皮秒级。差分信号的共模抑制特性,在这时候就是救星。

2.2 眼图——信号质量的“心电图”

眼图是什么?其实很简单:把很多bits的波形叠在一起显示,就能看到一个个“眼睛”。眼睛张开越大,信号质量越好。我个人习惯,每次拿到一块新板子,第一件事就是看眼图——它就像医生的心电图,一眼就能看出信号有没有毛病。

2.2.1 眼图怎么看?

我刚开始做SI仿真时,以为眼图就是看“眼睛是不是睁着”。后来被老师傅骂了一顿:眼图里藏着的信息太多了。关键看四个参数:

  1. 眼高:代表电压裕量。太小说明噪声太大或信号衰减严重
  2. 眼宽:代表时间裕量。太小说明抖动或数据相关干扰严重
  3. 抖动:看眼睛闭合的位置是否“模糊”。模糊越宽,抖动越大
  4. 上升/下降时间:眼图边缘的斜率控制
参数 典型PCIe Gen4要求 常见问题
眼高 ≥ 300 mV(差分) 直流阻容、衰减
眼宽 ≥ 0.4 UI 抖动、ISI
抖动(TJ) ≤ 0.6 UI 电源噪声、串扰
上升时间 30 ps ~ 50 ps 驱动能力、负载
实战技巧:仿真时如果发现眼高不够,别急着怀疑芯片。先看看你的通道损耗——PCIe Gen4在16 dB损耗以下还能撑住,超过20 dB基本就别想了。我一般先用S参数扫一下插损,心里有个底再跑眼图。

2.2.2 眼图闭合的原因

为什么眼图会闭合?我遇到过的情况无外乎以下几种:

  • 通道损耗:PCB走线太长或过孔太多,高频分量被衰减——眼高变小
  • 反射:阻抗不连续,回波损耗大了——眼图出现“重影”
  • 串扰:相邻信号互相干扰——眼图上下出现毛刺
  • 抖动:时钟不干净或电源噪声——眼图横向变模糊

有一回我仿真一个Gen5链路,眼图怎么调都不行。折腾了两天,最后发现是DC阻断电容选错了——容值偏小导致低频分量损失太多。换了电容后,眼高从200 mV跳到450 mV。嗯,这种坑你遇到了就会记得很牢。

2.3 抖动——信号的时间“晃动”

抖动的概念,说白了就是信号的边沿不在它应该在的位置。你想想看,理想的时钟边沿应该在T=0、T=1UI、T=2UI……整整齐齐。但实际中,由于各种噪声和干扰,边沿会提前或延后一点点。这个“一点点”就是抖动。

2.3.1 抖动的分类

抖动可以分为两大类,理解这个分类非常重要——因为处理方法完全不同:

  • 随机抖动(RJ):高斯分布,没办法完全消除。来自热噪声、散弹噪声等
  • 确定性抖动(DJ):有界的,可以定位和优化。下面还能细分:

确定性抖动又分为:周期性抖动(PJ,来自电源纹波或时钟串扰)、数据相关抖动(DDJ,也叫码间干扰ISI)、占空比失真(DCD,上升/下降时间不对称)。

抖动类型 分布特征 来源 可消除?
RJ 高斯、无界 热噪声、散弹噪声 不能,只能控制
PJ 周期、离散 电源纹波、时钟串扰 可以
DDJ 码型相关 通道带宽不足、ISI 可以
DCD 占空比偏移 驱动不对称、偏置问题 可以
核心公式:总抖动 TJ = 14.069 × RJrms + DJ(BER=1e-12时)。为什么要乘14.069?因为误码率1e-12对应的高斯分布的峰值因子就是这个数。说白了,你要看到足够多的数据,才能算清楚抖动。

2.3.2 抖动怎么测?

抖动测量的方法有三种:

  • 时间间隔分析(TIA):用高精度计时器直接测边沿位置。精度高但慢
  • 示波器眼图法:从眼图中提取抖动,适合工程快速判断
  • 误码率扫描(BERT Scan):扫出浴盆曲线,精确评估裕量

我个人做仿真时,最喜欢用BERT Scan看浴盆曲线。它直接把Bit Error Rate画出来,可以一目了然地看到眼图中间那片“安全区域”有多宽。如果浴盆曲线两边陡峭下降后中间还有余量,说明抖动控制得不错。

避坑指南:我曾经犯过一个低级错误——仿真时忽略了PLL的抖动传递特性。结果仿真出来抖动只有0.3 UI,但实际测试达到了0.7 UI。后来才发现,参考时钟的抖动经过PLL放大后把信号毁了。仿真一定要把时钟树和PLL一起建模,不能只看通道。

2.4 本章知识框架

下面我用一张图总结下本章的核心逻辑。你顺着这张图走,就能理解差分信号、眼图和抖动之间的关联:

PCIe电气层基础——知识框架 PCIe电气层基础 差分信号 眼图 抖动 共模抑制 EMI辐射 电压摆幅/等长 眼高/眼宽 上升/下降时间 闭合原因分析 随机抖动RJ 确定抖动DJ PJ / DDJ / DCD 差分信号 → 眼图(采集) → 抖动分析(评估) → 一致性测试

这一章的内容就是这样。差分信号是基础,打好这个基础才能看懂眼图;眼图是“信号质量窗口”,从中你能识别抖动问题;抖动则是“元凶”,理解了它才能对症下药。记住,在PCIe仿真和测试中,这三个概念永远是绑在一起的——你没法只看其中一个就判断链路的健康状况。