PCIe 从入门到精通之五:PCIe 分层结构
0. 引言
PCIe 是硬件工程师跨不过去的坎。我刚开始工作就接触 PCIe,工作中遇到的所有产品都有 PCIe 总线。在此想把自己学习 PCIe 的一些经历和感悟,以及踩过的坑分享在这里。
所有 PCIe 主题的文章都会收录在《深入浅出聊 PCIe》合集里,每篇文章涵盖一个 PCIe 的主题,预计会有几十篇文章,我会尽量用通俗的语言和大家介绍 PCIe 设备内部的奥妙。
在上一篇文章《PCIe 从入门到精通之四:PCIe 总线的拓扑结构》中,我们对 PCIe 总线的拓扑结构有了一定的了解。在这一篇文章中我们继续介绍 PCIe 分层结构。
需要下载 PCIe 学习资料标准的朋友(pdf 格式),请关注本微信公众号“硬件工程师宝典”,在对话框内回复“PCIe”,将获取标准下载链接。
1. PCIe 为什么要分层
我们之前说过 PCIe 体系相当于一个庞大的集团公司:
- CPU:是这个集团的 CEO
- Root Complex:是 CPU 的秘书团队
- Switch:是大区域的分总公司
- Endpoint:则是子公司或办事处
俗话说得好,有人的地方就有江湖,有江湖的地方就会有阶级分层,美其名曰分工合作。PCIe 体系的总公司和每个子公司要实现的功能非常强大,因此也要分工合作。
一个完整的 PCIe 体系结构包括:
| 层次 | 名称 |
|---|---|
| 顶层 | 应用层(Application Layer) |
| 第二层 | 事务层(Transaction Layer) |
| 第三层 | 数据链路层(Data Link Layer) |
| 底层 | 物理层(Physical Layer) |
分层特点:
- 层与层相互独立,下层为上层服务
- 每层只负责本层内的事务
- 层与层之间定义标准的接口
- 某一层的改变对其他层不产生影响
就像总公司和每个子公司下面都有很多部门,每个部门有不同的职能,大家配合运行。
2. PCIe 怎么分层
如下图所示,从上到下:
- 灰色:应用层
- 红色:事务层
- 蓝色:数据链路层
- 绿色:物理层

2.1 应用层(Application Layer)
它并非 PCIe 规范中明确定义的层,而是由用户根据自身需求进行设计和实现的。
2.2 事务层(Transaction Layer)
这是 PCIe 协议的最高层。它负责:
- 创建和解析事务层包(TLP,Transaction Layer Packet)
- 处理流量控制
- 服务质量(QoS,Quality of Service)
- 事务排序等功能
事务层还负责将数据封装成 PCIe 事务包进行传输。
2.3 数据链路层(Data Link Layer)
位于事务层和物理层之间。数据链路层的主要职责是确保数据包在链路上的可靠传输,包括错误检测和恢复。它通过添加序列号和循环冗余校验(CRC),并使用 ACK/NAK 协议来保证报文的可靠传递。
2.4 物理层(Physical Layer)
这是 PCIe 协议的最底层。它负责实际的信号传输,包括:
- 数据编码(如 8b/10b 或 128b/130b 或 Flit)
- 扰码
- 字节条带化
- 链路训练和初始化
物理层提供了 PCIe 设备之间数据通信的传输介质,并管理链路状态。
3. PCIe 设备内的分层
如图是一个 Root Complex 和 Endpoint 的分层互联图:
- 两者绿色的物理层相互连接,直接通信
- 向内部分别到达蓝色的数据链路层和红色的事务层
Switch 内部有 PCI-PCI Bridge,如下图所示,每个 PCI-PCI Bridge 都可以看作是一个独立的 PCIe device,它们都有各自的事务层、数据链路层和物理层。
如下图所示,所有的 PCI-PCI Bridge 的 Port 最外层是物理层,中间是数据链路层,内部通过事务层将各个 PCI-PCI Bridge 互联。

4. PCIe 体系内的分层
我们将 Root Complex、Switch 和 Endpoint 整合到一个体系内,如下图所示。
PCIe 总线传输的是数据包(Packet),如下图中黄色的箭头。Root Complex 要想和 SSD0 通信,数据包(Packet)的传输路径为:
- 穿过 Downstream Port 三层
- 到达 Switch 的 Upstream 三层
- Switch 将数据包处理后通过内部的 PCIe Bus 传输到 Downstream Port
- 穿过 Downstream Port 三层
- 最终到达 Endpoint SSD0

5. 总结
- 这种分层结构实现了职责的分离,使得每一层都专注于特定的功能,从而简化了设计和实现。
- 各层之间通过明确定义的接口进行通信,上层依赖下层提供的服务,而下层则为上层提供支持。这种紧密的协作确保了 PCIe 链路能够高效、可靠地完成从高层软件请求到低层物理传输的整个数据通信过程。
简而言之:
- 物理层是数据的 “管道”
- 数据链路层是 “管道的守护者”,确保数据安全无误地通过管道
- 事务层则是 “数据的管理者”,负责数据的生成、解析和传递给应用程序
它们共同构成了一个强大而灵活的通信协议栈。
这篇文章就聊到这里,敬请关注下一篇:
《PCIe 从入门到精通之六:PCIe 数据包 packet 的传奇之旅》
参考文献
- PCI Express® Base Specification Revision 5.0 Version 1.0
- PCI Express® Base Specification Revision 6.4
- PCI Express® Base Specification Revision 7.0
PCIe从入门到精通





