1. PCIe基础回顾:从架构到速率,这些你必须懂
各位同学,咱们今天先打好地基。PCIe这东西,我做了十几年,说句实话——很多人用了好几年,连它怎么传数据的都没搞明白。别笑,我见过不少老工程师,画原理图一把好手,一问PCIe分层协议,立马卡壳。
好,咱们今天就把这事儿捋清楚。
1.1 PCIe总线架构:不是并行,是串行
先纠正一个常见误区。很多人以为PCIe是PCI的升级版,只是更快。其实不是。PCI是并行总线,PCIe是串行总线,两者架构完全不同。
PCIe用的是点对点连接。什么意思?每个设备都有自己的专用通道,不像PCI那样共享一条总线。你想想看,共享总线就像一条单车道,所有车挤在一起。PCIe呢?每个设备都有独立的高速公路。
具体架构是这样的:
- 根复合体(Root Complex):CPU和内存的接口,相当于整个系统的交通枢纽
- 交换器(Switch):负责数据转发,可以连接多个端点设备
- 端点(Endpoint):就是你的显卡、SSD、网卡这些实际设备
- 桥接器(Bridge):用于PCIe与其他总线(比如PCI、USB)的转换
我在一个项目中遇到过,有人把Switch当Bridge用,结果死活不通。嗯,这两个东西功能不一样,别搞混了。
1.2 分层协议:三层架构,各司其职
PCIe的协议栈分三层。我习惯这么记:上层管业务,中层管可靠,下层管传输。
事务层(Transaction Layer)
这一层是离软件最近的。它负责把CPU发来的读写请求,打包成事务层包(TLP)。
TLP有几种类型:
- Memory Read/Write:内存读写,最常用
- I/O Read/Write:I/O空间访问,老设备用得多
- Configuration Read/Write:配置空间访问,枚举设备时用
- Message:中断、错误通知等
说白了,事务层就是翻译官——把软件的需求翻译成硬件能懂的包格式。
数据链路层(Data Link Layer)
这一层干的是脏活累活。它负责:
- 给TLP加上序列号和CRC校验
- 处理重传(万一传丢了,它负责重发)
- 流量控制(防止发送方太快,接收方来不及处理)
我刚开始做PCIe时,总觉得数据链路层可有可无。直到有一次,板子上的信号质量不好,丢包严重,要不是数据链路层自动重传,系统早就崩了。从那以后,我再也不敢小看这一层。
物理层(Physical Layer)
物理层是最底层的,负责把数据变成电信号发出去。它又分两部分:
- 电气子层:处理差分信号、时钟恢复、阻抗匹配
- 逻辑子层:处理8b/10b编码(Gen1/Gen2)或128b/130b编码(Gen3+)、加扰、去扰
这里有个坑要注意:Gen3开始编码方式变了,从8b/10b改成128b/130b。为什么?因为效率更高。8b/10b有20%的开销,128b/130b只有不到2%。
重要提示:物理层是信号完整性的重灾区。我见过太多项目,协议层调通了,结果物理层眼图不过关,最后只能降速跑。所以,PCB走线一定要按阻抗要求来,别省那点成本。
1.3 Gen1到Gen5:速率翻倍,但代价不小
好,咱们来看看各代PCIe的速率对比。这张表我建议你存下来,面试经常考。
| 代际 | 单通道速率 | 编码方式 | 有效带宽(x1) | 有效带宽(x16) | 推出年份 |
|---|---|---|---|---|---|
| Gen1 | 2.5 GT/s | 8b/10b | 约250 MB/s | 约4 GB/s | 2003 |
| Gen2 | 5 GT/s | 8b/10b | 约500 MB/s | 约8 GB/s | 2007 |
| Gen3 | 8 GT/s | 128b/130b | 约985 MB/s | 约15.75 GB/s | 2010 |
| Gen4 | 16 GT/s | 128b/130b | 约1.97 GB/s | 约31.5 GB/s | 2017 |
| Gen5 | 32 GT/s | 128b/130b | 约3.94 GB/s | 约63 GB/s | 2019 |
注意看,GT/s和GB/s不是一回事。GT/s是每秒传输的比特数(Giga Transfer per second),GB/s是每秒传输的字节数。中间要除以8,再乘以编码效率。
举个例子:Gen3单通道8 GT/s,编码效率是128/130≈0.9846,所以有效带宽是 8 × 0.9846 / 8 ≈ 0.985 GB/s。
我的经验:选型时别只看峰值速率。Gen5虽然快,但信号衰减严重,PCB走线长度受限。我做过一个Gen5的项目,走线超过10厘米就得加中继器。所以,别盲目追新,够用就好。
1.4 速率提升背后的代价
你可能想问:为什么Gen1到Gen2只翻了一倍,Gen3到Gen4也翻了一倍,但Gen3的编码效率更高?
原因很简单:速率越高,信号完整性越难做。
Gen1跑2.5 GT/s时,PCB走线随便画都能通。到了Gen5的32 GT/s,走线长度、过孔数量、连接器质量,每一个细节都能让你头疼。
我给大家列几个实际项目中踩过的坑:
- 阻抗不连续:过孔没做背钻,反射严重,眼图闭合
- 串扰:相邻通道间距不够,Gen4以上特别明显
- 时钟抖动:参考时钟的相位噪声超标,导致误码率上升
- AC耦合电容:位置放错了,或者容值不对,信号畸变
警告:Gen4和Gen5的PCB设计,必须用仿真工具提前验证。别指望打板回来再调,那成本你扛不住。我曾经有个项目,Gen4的板子打了三版才过眼图测试,教训深刻。
1.5 小结:打好基础再上路
好了,这一章的内容就这些。总结一下:
- PCIe是串行点对点架构,不是并行总线
- 三层协议各司其职:事务层管业务,数据链路层管可靠,物理层管传输
- Gen1到Gen5速率翻倍,但设计难度指数级上升
- 选型时综合考虑速率、成本、设计复杂度,别盲目追新
下一章,咱们开始讲桥接芯片的选型。我会拿几款主流芯片出来,掰开揉碎了分析。到时候你就知道,选芯片这事儿,水有多深。
好,今天就到这儿。有问题随时找我。