PCIe协议基础:三层架构与眼图的“暗线”
聊眼图之前,得先把PCIe的协议栈捋一遍。很多人觉得眼图就是测波形,跟协议层没啥关系。我以前也这么想——直到有一次在Gen3项目上,眼图看着还行,但链路死活协商不到最高速率。折腾了两周,最后发现是事务层的调度把物理层给“撑死”了。嗯,那之后我再也不敢小看这中间的逻辑了。
PCIe协议分三层:物理层(Physical Layer)、数据链路层(Data Link Layer)、事务层(Transaction Layer)。你平时用逻辑分析仪抓TLP,用示波器看眼图,其实它们是一根绳子上的蚂蚱。眼图好不好,最终是这三层一起“伺候”出来的。
1. 物理层——眼图的“直接演技”
物理层就是信号的“肉身”。差分对的电压摆幅、上升时间、抖动、预加重系数,这些全在眼图上一目了然。说白了,眼图就是物理层的实时体检报告。
PCIe Gen1/Gen2用8b/10b编码,Gen3之后改用128b/130b。编码方式不同,物理层的信号特性也不一样。128b/130b的频谱更平缓,但DC平衡要求更高——你要是均衡没调好,眼图就容易“睁一只眼闭一只眼”。
2. 数据链路层——眼图的“幕后推手”
数据链路层负责可靠传输。它发DLLP包、做CRC、管理ACK/NAK重传。你会问:这跟眼图有什么关系?关系大了去了。
当链路层检测到错误,会发起重传。重传意味着同一条差分线上要多发好多次数据包。本来正常的跳变模式被打乱——连续的数据序列变成了大量重传包。这种乱序会让PLL更难锁定,进而导致眼图抖动恶化。
举个例子:我遇到过一个服务器主板,Gen3 x16链路偶尔眼图不合格。后来把数据链路层的重传计数器读出来一看,每秒重传次数高得离谱。根源是连接器接触不良导致偶发CRC错误,链路层拼命重传,物理层的信号模式被搅乱。最后换了连接器——眼图瞬间好了。这件事让我明白,眼图测的是物理层,但问题可能在上层。
| 问题现象 | 可能根因(物理层) | 可能根因(数据链路层) |
|---|---|---|
| 眼图高度不足 | 驱动幅度不够、通道损耗大 | 连续重传导致信号占空比偏移 |
| 眼图宽度窄 | 时钟抖动、码间串扰 | 重传包插入导致时序紊乱 |
| 眼图内有“鬼影” | 反射、串扰、均衡不良 | 重传导致数据模式非周期性重复 |
3. 事务层——眼图的“情绪源头”
事务层管的是TLP的生成、排序和服务质量。它决定了数据什么时候发、以什么顺序发。这似乎离物理层更远了,但影响一样不小。
试想:如果事务层调度不合理,会让物理层在某些时间片里无事可做(空闲周期),某些时间片里又拼命发。这种不均匀的流量模式,会引入低频抖动——PLL对这种低频抖动特别敏感。你示波器上看到的眼图可能会一簇一簇地晃动,就是所谓的“抖动漂移”。
4. 三层的“合力”与眼图测试的关系
你拿着示波器测眼图时,其实测的是三层协同后的最终结果。好的眼图工程师,不只是会调均衡和预加重,还得会读DLLP、会用PCIe分析仪看事务层的流量模式。
三层对眼图的影响总结一下:
- 物理层:直接影响眼图的幅度、宽度、抖动——这是硬指标,跑不掉。
- 数据链路层:通过重传机制干扰信号模式,间接恶化抖动。
- 事务层:通过流量调度注入低频噪声,影响长期稳定性。
嗯,这一章我们把PCIe三层架构跟眼图的关系理清了。下面对应着,你拿到一个坏眼图之后,就能沿着三层往上排查。后边的章节我们开始讲具体的眼图测试方法和判据,那时候你就能带着协议层视角去看波形了。