PCIe协议基础:三层架构与眼图的“暗线”

聊眼图之前,得先把PCIe的协议栈捋一遍。很多人觉得眼图就是测波形,跟协议层没啥关系。我以前也这么想——直到有一次在Gen3项目上,眼图看着还行,但链路死活协商不到最高速率。折腾了两周,最后发现是事务层的调度把物理层给“撑死”了。嗯,那之后我再也不敢小看这中间的逻辑了。

PCIe协议分三层:物理层(Physical Layer)、数据链路层(Data Link Layer)、事务层(Transaction Layer)。你平时用逻辑分析仪抓TLP,用示波器看眼图,其实它们是一根绳子上的蚂蚱。眼图好不好,最终是这三层一起“伺候”出来的。

核心认知:眼图是物理层的直接表现,但物理层的“坏”根子可能在上两层。——这是我做了几个项目后最深的体会。
PCIe 协议三层架构 & 眼图影响路径 事务层 TLP 生成/解析 QoS 排序 & 流控 虚通道管理 数据链路层 DLLP 交换 CRC 校验 & 重传 ACK/NAK 机制 物理层 8b/10b 或 128b/130b 编码 信号均衡 & 预加重 PLL 时钟恢复 眼图质量 抖动 · 幅度 · 信噪比 · 时序裕量 三层问题→眼图退化典例 • 事务层:握手机制卡死 → 连续空闲状态 → 时钟恢复失锁 → 眼图模糊 • 数据链路层:CRC 错误频繁重传 → 链路饱和 → 信号长期处于非稳态 • 物理层:阻抗不匹配或均衡不足 → 直接表现就是眼图闭合

1. 物理层——眼图的“直接演技”

物理层就是信号的“肉身”。差分对的电压摆幅、上升时间、抖动、预加重系数,这些全在眼图上一目了然。说白了,眼图就是物理层的实时体检报告。

PCIe Gen1/Gen2用8b/10b编码,Gen3之后改用128b/130b。编码方式不同,物理层的信号特性也不一样。128b/130b的频谱更平缓,但DC平衡要求更高——你要是均衡没调好,眼图就容易“睁一只眼闭一只眼”。

我的习惯:调Gen3眼图时,先看预加重系数。很多工程师上来就调驱动幅度,其实预加重不对,高频损耗补偿不了,眼图照样瞎。我记得有一次客户板子上的眼图怎么也打不开,最后发现预加重设少了2个dB——调完立刻好了。

2. 数据链路层——眼图的“幕后推手”

数据链路层负责可靠传输。它发DLLP包、做CRC、管理ACK/NAK重传。你会问:这跟眼图有什么关系?关系大了去了。

当链路层检测到错误,会发起重传。重传意味着同一条差分线上要多发好多次数据包。本来正常的跳变模式被打乱——连续的数据序列变成了大量重传包。这种乱序会让PLL更难锁定,进而导致眼图抖动恶化。

举个例子:我遇到过一个服务器主板,Gen3 x16链路偶尔眼图不合格。后来把数据链路层的重传计数器读出来一看,每秒重传次数高得离谱。根源是连接器接触不良导致偶发CRC错误,链路层拼命重传,物理层的信号模式被搅乱。最后换了连接器——眼图瞬间好了。这件事让我明白,眼图测的是物理层,但问题可能在上层。

问题现象可能根因(物理层)可能根因(数据链路层)
眼图高度不足驱动幅度不够、通道损耗大连续重传导致信号占空比偏移
眼图宽度窄时钟抖动、码间串扰重传包插入导致时序紊乱
眼图内有“鬼影”反射、串扰、均衡不良重传导致数据模式非周期性重复

3. 事务层——眼图的“情绪源头”

事务层管的是TLP的生成、排序和服务质量。它决定了数据什么时候发、以什么顺序发。这似乎离物理层更远了,但影响一样不小。

试想:如果事务层调度不合理,会让物理层在某些时间片里无事可做(空闲周期),某些时间片里又拼命发。这种不均匀的流量模式,会引入低频抖动——PLL对这种低频抖动特别敏感。你示波器上看到的眼图可能会一簇一簇地晃动,就是所谓的“抖动漂移”。

避坑指南:我曾经调试一个GPU卡,眼图在长时间测试后才出现偶发闭合。起初怀疑是电源噪声,后来发现是事务层把大部分流量压缩到几百微秒的窗口里发送,导致物理层瞬时电流过大,拉低了供电,信号幅度掉了。对策是把虚拟通道的权重调均匀——问题消失。所以,眼图不好不全是物理层的锅。

4. 三层的“合力”与眼图测试的关系

你拿着示波器测眼图时,其实测的是三层协同后的最终结果。好的眼图工程师,不只是会调均衡和预加重,还得会读DLLP、会用PCIe分析仪看事务层的流量模式。

三层对眼图的影响总结一下:

  • 物理层:直接影响眼图的幅度、宽度、抖动——这是硬指标,跑不掉。
  • 数据链路层:通过重传机制干扰信号模式,间接恶化抖动。
  • 事务层:通过流量调度注入低频噪声,影响长期稳定性。
实战口诀:眼图睁开不一定通信稳定,眼图闭合不一定物理层没救。先看重传率,再看流量曲线,最后调均衡。——这顺序是我花了两个项目才换来的教训。

嗯,这一章我们把PCIe三层架构跟眼图的关系理清了。下面对应着,你拿到一个坏眼图之后,就能沿着三层往上排查。后边的章节我们开始讲具体的眼图测试方法和判据,那时候你就能带着协议层视角去看波形了。