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的链路训练给了更多次机会去“试错”均衡参数。
- Generate Preset: 双方交换能力
- Full Swing Coeff Update: 全摆幅下更新
- Reduced Swing Coeff Update (可选): 降摆幅下更新
- 最终锁定
你可能会问,为什么Gen4要多一步降摆幅?我理解是为了兼容长链路和低功耗场景。有些场合链路太长,全摆幅顶不上去,不如降点电压,靠系数来补。
核心差异总结:Gen4的均衡化系数更新不是一次性的,而是一个迭代优化过程。实际项目中,我习惯先验证Preset匹配,再去看Full Swing阶段的系数有没有跑到限值。如果跑到限值了,就得考虑换方案,比如走Reduced Swing。
一个直观的结构对比
下面这张图把Gen3和Gen4物理层的核心差异串起来了。从编码开始,一路影响到均衡化策略。你看看就明白了。
我个人建议,在调试中遇到链路不稳定时,先对照这张图自查一下。是编码导致的?速率翻倍带来的?还是均衡化策略没跟上?定位清楚后再动手调系数,效率高很多。