2、PCIe Gen3与Gen4物理层差异

聊到均衡化系数,先得把Gen3和Gen4物理层的底子摸清楚。说白了,这两代协议在电气和编码层面差别不小,直接影响了我们怎么更新系数。

我当年从Gen3过渡到Gen4时,第一个坑就在这。以为参数照着搬就行,结果链路死活不收敛。后来才明白,物理层的差异是根本性的。

编码方式:8b/10b vs 128b/130b

这是最直观的变化。Gen3以前用8b/10b编码,每传8位数据,实际要发10位。开销大,但DC平衡好做。Gen4改用128b/130b,开销从20%降到1.5%左右。

嗯,这里要注意。128b/130b的编码效率更高,但带来的问题是抗干扰能力下降了。为什么?因为8b/10b有严格的游程长度限制,而128b/130b要靠加扰器来保证DC平衡。

关键点对比:

特性 Gen3 Gen4
编码方式 8b/10b 128b/130b
编码开销 20% 1.5%
DC平衡机制 内建 靠加扰器
游程长度约束 严格 宽松

我记得刚接手Gen4项目时,发现链路偶尔会出符号错误。折腾了很久,最后定位到是加扰器种子配错,导致DC平衡飘了。从那以后,我都反复核对加扰配置。

速率与带宽

Gen3跑8 GT/s,Gen4翻倍到16 GT/s。你想想看,速率翻倍,码间干扰也翻倍。这就是为什么Gen4必须引入强均衡化的原因。

带宽对比起来更直接:

  • Gen3 x4: 大约4 GB/s
  • Gen4 x4: 大约8 GB/s
  • Gen3 x16: 大约16 GB/s
  • Gen4 x16: 大约32 GB/s

但注意,这是理论峰值。实际跑起来,均衡化的好坏能把带宽打七八折。我在调一个Gen4 SSD时,均衡系数没设好,速率只能跑到12 GT/s,白瞎了16 GT/s的能力。

电气参数变化

Gen4的电压摆幅和时序余量都比Gen3紧。具体来说:

  • Tx眼高:Gen3要求至少400mV,Gen4提到了600mV以上
  • Rx眼高:Gen4需要更好的信号质量,眼模板更严
  • 抖动分配:Gen4的总抖动预算减少了约40%

一个经验值:我一般建议Gen4链路的Preset选择要保守一些。比如Gen3可能用P8就够,Gen4我倾向于从P7或P5开始试,逐步往系数较大的方向调。别一上来就上高系数,容易过均衡。

避坑指南:我曾经碰到过一种情况,Gen4链路跑的速率和Gen3一样——8 GT/s做downshift。这时候物理层参数该怎么配?很多工程师还在用Gen4的参数区配Gen3速率,结果眼图惨不忍睹。嗯,这样是不对的。速率降了,均衡系数也得跟着复位。

链路训练差异

训练过程在Gen3和Gen4里大致相同,但细节变了。主要差异在 均衡化系数更新时机 上。

Gen3只在TS1/TS2序列里更新系数,GEN4同样在TS阶段做,但增加了更多的系数调整阶段。说白了,Gen4的链路训练给了更多次机会去“试错”均衡参数。

  1. Generate Preset: 双方交换能力
  2. Full Swing Coeff Update: 全摆幅下更新
  3. Reduced Swing Coeff Update (可选): 降摆幅下更新
  4. 最终锁定

你可能会问,为什么Gen4要多一步降摆幅?我理解是为了兼容长链路和低功耗场景。有些场合链路太长,全摆幅顶不上去,不如降点电压,靠系数来补。

核心差异总结:Gen4的均衡化系数更新不是一次性的,而是一个迭代优化过程。实际项目中,我习惯先验证Preset匹配,再去看Full Swing阶段的系数有没有跑到限值。如果跑到限值了,就得考虑换方案,比如走Reduced Swing。

一个直观的结构对比

下面这张图把Gen3和Gen4物理层的核心差异串起来了。从编码开始,一路影响到均衡化策略。你看看就明白了。

PCIe Gen3 vs Gen4 物理层差异框架 物理层差异 编码方式 Gen3 8b/10b Gen4 128b/130b 速率翻倍 8 GT/s → 16 GT/s 均衡化策略 Gen3 单轮更新 Gen4 迭代更新 链路训练 Gen3 TS1/TS2 Gen4 TS + 多阶段 电气参数 眼高 Gen4 > Gen3 抖动预算 Gen4减少40%

我个人建议,在调试中遇到链路不稳定时,先对照这张图自查一下。是编码导致的?速率翻倍带来的?还是均衡化策略没跟上?定位清楚后再动手调系数,效率高很多。