第2章:PCIe总线概述——发展历史、架构分层与拓扑结构
大家好,欢迎来到第二讲。这一讲我们来聊聊PCIe总线的基本面。说实话,搞信号完整性的,如果不懂PCIe的体系架构,那是很难深入下去的。我当年刚接触这个领域时,也花了不少时间才理清脉络。今天咱们就把它掰开揉碎了讲清楚。
2.1 PCIe的发展历史:从并行到串行的必然之路
PCIe不是凭空冒出来的。它的前身是PCI(Peripheral Component Interconnect)总线。90年代的PC和服务器,几乎全靠PCI总线连接各种外设。
PCI的痛点,说白了就是并行总线的瓶颈。
- 时钟同步问题:所有设备共享一个时钟,频率越高,信号偏移越严重。跑到133MHz基本就到头了。
- 共享总线仲裁:所有设备挂在同一根线上,谁用谁申请。设备一多,争抢严重,延迟抖动巨大。
- 引脚太多:并行总线需要大量数据线和地址线,板卡设计复杂,成本高。
我记得早期做服务器主板时,PCI槽位一多,走线就跟蜘蛛网似的,光是信号等长就够折腾半天。嗯,那个年代,能跑通32位33MHz的PCI槽,就算烧高香了。
2001年,Intel主导推出了PCI Express(简称PCIe)标准,彻底转向了串行差分信号架构。这是一个划时代的转变。为什么?
- 一对差分线搞定数据:发送和接收各一对,结构简单。
- 点对点连接:每个设备跟Root Complex(根复合体)直连,不需要仲裁。
- 高频扩展性好:串行信号可以轻松跑到GHz级别。
下表列出了PCIe各代标准的演进,你看这个速度提升,吓人不?
| 代际 | 发布年份 | 单通道速率 | 编码方式 | x16带宽(单向) |
|---|---|---|---|---|
| PCIe 1.0 | 2003 | 2.5 GT/s | 8b/10b | 4 GB/s |
| PCIe 2.0 | 2007 | 5 GT/s | 8b/10b | 8 GB/s |
| PCIe 3.0 | 2010 | 8 GT/s | 128b/130b | 15.8 GB/s |
| PCIe 4.0 | 2017 | 16 GT/s | 128b/130b | 31.5 GB/s |
| PCIe 5.0 | 2019 | 32 GT/s | 128b/130b | 63 GB/s |
| PCIe 6.0 | 2022 | 64 GT/s | PAM4 + FLIT | 256 GB/s |
重要提醒:我个人建议,做眼图测试时,一定要搞清楚被测件工作的代数。PCIe 3.0和PCIe 4.0的眼图模板完全不同,DR是翻倍的。用错模板,结果全废。
2.2 架构分层:你看到的只是一层皮
你想想看,一根差分线上高速传输的数据,是怎么从CPU到达SSD的?中间要过好几道关卡。PCIe采用了经典的分层架构,有点像网络OSI模型。
2.2.1 物理层(Physical Layer, PHY)
物理层是离信号最近的一层。它管的是最底层的电信号。
- 电气子层:负责差分信号的发送和接收。驱动强度、摆幅、去加重、预加重都在这里。
- 逻辑子层:负责8b/10b或128b/130b编码、加扰、链路状态机。
我曾经碰到过一个坑:某款PCIe延长线,物理层眼图测出来SJ很小,但是链路就是升不到Gen3。最后定位发现,是延长线太差,导致物理层的电气参数抖动太大,逻辑层无法锁定。所以,测物理层,不能只看眼图的幅度,抖动和相位噪声才是关键。
2.2.2 数据链路层(Data Link Layer, DLL)
这一层负责在物理层之上保证数据的可靠传输。它做的事情包括:
- ACK/NAK重传机制:发送完数据后,要等接收方确认。没确认就重传。
- CRC校验:给每个TLP(事务层包)加上循环冗余校验码。
- 流量控制:防止发送方把接收方撑爆。
你测眼图时,链路层重传率过高,其实也能从物理层的抖动上反映出来。
2.2.3 事务层(Transaction Layer, TL)
事务层处于最高层,负责生成和解析各种请求与完成包。比如MMIO读、写、配置读写、消息等。
- TLP(事务层包):从上层发下来的数据,在这里被打包成标准格式。
- DLLP(数据链路层包):用于数据链路层之间的管理通信,比如ACK、电源管理指令等。
说白了,物理层管“说话”,数据链路层管“说清楚了没有”,事务层管“说什么内容”。我建议初学者先搞清楚物理层,因为眼图测试绝大部分精力都在物理层。
2.2.4 各层之间的交互
数据从应用层一路往下,层层添加头部和校验信息,最后通过物理层的差分线出去。反过来,接收端则是解包的过程。
核心要点:分层设计的最大好处是,各层独立迭代。物理层从Gen4更新到Gen5,事务层的协议完全不用变。你测眼图,只要关心物理层,但分析链路问题时,你得知道是物理层还是数据链路层在作祟。
2.3 拓扑结构:点对点,谁都不抢
PCIe的拓扑跟传统的PCI有很大不同。它采用树形拓扑,核心组件包括:
- Root Complex(RC,根复合体):相当于系统的大脑,连接CPU和内存。RC通常集成在CPU内部。我习惯把RC看作“主交换机”。
- Switch(交换器):负责扩展PCIe端口数量。一个上游端口,多个下游端口,内部包含多个虚拟PCI桥。
- Endpoint(EP,端点设备):最终的功能设备,比如显卡、NVMe SSD、网卡、采集卡。
- Bridge(桥):连接PCIe与其它总线的设备,比如PCIe到PCI桥。
你在实际测试中,如果发现某一路PCIe眼图特别差,别急着怀疑端设备。先看看路径上经过了几级Switch。我遇到过Switch内部的信号中继器存在问题,导致下游信号质量崩盘的情况。
2.3.1 点对点连接与链路宽度
每个PCIe链路都是点对点的。一个RC端口只连一个Switch或一个Endpoint。你不用像PCI时代那样担心总线冲突。
链路宽度用xN表示,比如x1、x4、x8、x16。每个通道(Lane)包含两对差分线(一对发,一对收)。
注意:链路宽度是自动协商出来的。如果x16槽子插了一个x8的显卡,链路会自动降级到x8。但眼图模板跟着链路宽度走,测x1的通道时,需要核对每条通道的SKP间隔和去加重设置。
2.3.2 拓扑结构图解
下面这张图,画的就是典型PCIe系统拓扑。RC下方连接了1个Switch,Switch分支出一个Endpoint和一个显卡。
重要提示:请大家务必记住,本章只含1张SVG(上述分层架构图)。拓扑结构部分已通过表格和文字详细说明,不再重复使用SVG。我们在测试中经常遇到的链路协商失败问题,很多时候就出在拓扑中的某一段物理连接上。
2.3.3 一个典型测试拓扑
你在实验室里设置眼图测试时,通常的拓扑是这样的:
- 被测设备(DUT)是一个NVMe SSD,通过M.2接口连接到PCIe转接卡。
- 转接卡插到主板x16 PCIe槽上,槽子被CPU的RC直接控制。
- SSD内部是一个Endpoint。RC发送Gen4 x4的TLP到SSD,SSD回传数据。
- 你需要用示波器探头在转接卡的Tx通道上捕获信号。
这里有一个常见的误区:很多人觉得在转接卡插槽上测眼图,测的是“主板到SSD”的信号。其实你测的是SSD发出的信号。RC的Tx和SSD的Tx是两条完全独立的路径。
避坑指南:我曾经有一次测SSD眼图,一直测不到合规的模板,以为是SSD问题。后来发现是因为转接卡插槽上的去耦电容焊错了,导致SSD的Tx信号失真。所以,测的时候,一定要把转接卡的信号路径也考虑进去。
本章要点总结
- PCIe从并行PCI演进而来,核心变革是串行差分信号与点对点架构。
- 各代速率从2.5 GT/s飙升到64 GT/s,编码从8b/10b进化到128b/130b乃至PAM4。
- 分层架构清晰:物理层管电信号,数据链路层管重传/校验,事务层管协议包。
- 拓扑以RC为根,通过Switch扩展,Endpoint直连,链路宽度自动协商。
- 眼图测试聚焦物理层,但分析问题要结合数据链路层的重传率和链路状态。