PCIe标准体系:从Gen1到Gen6的演进
做PCIe合规测试这些年,我最大的感悟就是——你得先搞清楚这条“高速公路”到底跑多快、怎么跑的。PCIe从第一代走到第六代,每次迭代都不是简单地翻倍提速。编码方式变了,信令技术变了,就连物理层的设计思路都翻新了好几轮。这一章,我就带你拆解一下各代的“硬核参数”,顺便聊几个我当年踩过的坑。
关键参数速览:一张表看懂六代差异
我习惯把各代参数做成一张对照表,方便调试时快速翻看。下面这张表涵盖了从Gen1到Gen6的速率、编码、单通道带宽以及典型x16配置的总带宽。
| 代际 | 单通道速率 (GT/s) | 编码方式 | 编码效率 | 每通道有效带宽 (GB/s) | x16总带宽 (GB/s) |
|---|---|---|---|---|---|
| Gen1 | 2.5 | 8b/10b | 80% | 0.250 | 4.0 |
| Gen2 | 5.0 | 8b/10b | 80% | 0.500 | 8.0 |
| Gen3 | 8.0 | 128b/130b | ≈98.5% | 0.985 | 15.8 |
| Gen4 | 16.0 | 128b/130b | ≈98.5% | 1.969 | 31.5 |
| Gen5 | 32.0 | 128b/130b | ≈98.5% | 3.938 | 63.0 |
| Gen6 | 64.0 | 1b/1b (PAM4 + FEC) | ≈97.7% (含FEC开销) | 7.81* | 125.0* |
你看,Gen1到Gen2,速率翻倍但编码没变,带宽自然翻倍。Gen3开始换了128b/130b编码,一下子把开销从20%降到了1.5%左右。说白了,之前浪费在“校验位”上的带宽被解放出来了。到了Gen6,PCIe干脆改用PAM4,一个符号传2个比特,速率直接飙到64GT/s。嗯,这里要注意:Gen6的64GT/s是“符号率”,不是比特率,因为每个符号携带2bit,所以等效数据速率是128Gbps,再扣掉FEC和训练开销。
编码演进的背后:为什么非换不可?
我遇到过不少工程师觉得编码就是个“算法细节”,不影响测试。其实大错特错。编码决定了你的测试仪器、信号质量要求、乃至PCB走线长度。
- 8b/10b(Gen1/2):每8个数据比特要用10个符号传输,多了不少冗余。好处是直流平衡好,内嵌时钟,接收端不需要单独的时钟恢复。坏处就是浪费带宽。我记得第一次测Gen2合规时,信号眼图睁得很大,因为速率低、抖动裕量大。
- 128b/130b(Gen3/4/5):这玩意儿本质是一个加扰器方案,用伪随机码对数据做加扰,保证信号的转换密度,然后每130个符号只塞2个同步头。效率一下就上来了。但付出的代价是:接收端需要更强的时钟数据恢复(CDR)能力,因为加扰后的码型不是固定直流平衡的。我曾经在Gen3的EQ调试中栽过跟头——如果加扰种子没对齐,链路训练直接跑飞。
- 1b/1b + PAM4(Gen6):严格说不是传统编码,而是把2个比特映射成一个PAM4电平。配合前置FEC(比如RS(544,514)),可以说是用算力换带宽。做Gen6测试的时候,我发现眼图不再是“一只眼”,而是三个上下来回叠的眼图,那感觉就像从看黑白文字突然变成看调色板。
演进路线图:从2.5GT/s到64GT/s
下面这张图梳理了各代之间的相对速度和关键升级点。我特意把编码变更、信令方式和标志性年份标出来,方便你在头脑里建立一张“时间轴”。
实战避坑:合规测试中的“代际陷阱”
讲参数看着简单,但实际跑测试时,每一代都有自己的脾气。我挑几个典型问题说说。
Gen3 链路训练中的“EQ协商”
我记得刚接触Gen3时,发现很多板卡在上电后链路能跑到Gen3,但跑几分钟后自动降回Gen2。排查了很久,最后发现是Preset(预加重)协商没通过。PCIe Gen3的发送端会根据接收端的反馈调整均衡强度,如果接收端上报的系数超出发送端能力,就会训练失败。解决办法是:先强制Gen2建立链路,再用协议分析仪抓取EQ系数,比对双方支持的系数列表。