一、PCIe概述
1、PCIe速度
- PCI采用总线共享式通讯方式;PCIe采用点到点(
Endpoint to Endpoint)通讯方式,互为接收端和发送端,全双工,基于数据包传输; - 两个PCIe设备之间的连接称作一条链路(
link), 一条链路可以包含多个通道(每对接收和发送对称作一个通道(lane)),可增加通道个数来满足更高的带宽要求。
物理底层采用差分信号(PCI链路采用并行总线,而PCIe链路采用串行总线),一条Lane中有两组差分信号,共四根信号线,而PCIe Link可以由多条Lane组成,可以支持1、2、4、8、12、16、32条;
| 版本 | 编码方案 | 传输速率 | X1 吞吐量 | X4 吞吐量 | X8 吞吐量 | X16 吞吐量 |
| 1.0 | 8b/10b | 2.5GT/s | 250MB/s | 1GB/s | 2GB/s | 4GB/s |
| 2.0 | 8b/10b | 5GT/s | 500MB/s | 2GB/s | 4GB/s | 8GB/s |
| 3.0 | 128b/130b | 8GT/s | 984.6MB/s | 3.938GB/s | 7.877GB/s | 15.754GB/s |
| 4.0 | 128b/130b | 16GT/s | 1.969GB/s | 7.877GB/s | 15.754GB/s | 31.508GB/s |
| 5.0 | 128b/130b | 32 or 25GT/s | 3.9 or 3.08GB/s | 15.8 or 12.3GB/s | 31.5 or 24.6GB/s | 63.0 or 49.2GB/s |
PCIe吞吐量计算方法: 吞吐量 = 传输速率 * 编码方案
- PCIe1.0传输速率为2.5Gb/s,物理层使用8/10编码(8Bit数据在物理线路上需要10比特传输),PCIe1.0 x 1的带宽 =
2.5Gb/s*8/10bit=2Gb/s=2000Mb/s=250MB/s - PCIe2.0传输速率为5Gb/s,物理层使用8/10编码, PCIe2.0 x 1的带宽 =
5Gb/s*
8/10bit=4Gb/s=4000Mb/s=500MB/s - PCIe3.0传输速率为8Gb/s,物理层使用128/130编码进行数据传输,PCIe3.0 x 1的带宽 =
8Gb/s*128/130bit≈7.8769Gb/s=7876.9Mb/s=984.6MB/s
Mb/s: 兆比特每秒,指每秒传输的比特位数
MB/s: 兆字节每秒,指每秒传输的字节数量,1MB/s=8Mb/s
2、PCIe拓扑结构
PCIe采用树形拓扑结构, 由root complex,switch,endpoint等类型的PCIe设备组成

root complex(RC): 根桥设备,CPU和PCIe拓扑之间的接口,负责PCIe报文的解析和生成。RC会将CPU的request转换成PCIe的4种不同的请求(Configuration、Memory、I/O、Message);switch: PCIe的转接器设备(扩展PCIe端口),为挂在它上的设备(endpoint或switch)提供路由和转发服务。PCIe endponit(EP): PCIe终端设备,如网卡、显卡等。PCI Express-PCI bridge: 桥接设备,连接其他的PCI总线、PCI-X、PCIe总线。
和PCI并行总线不同,PCIe的总线采用了高速差分总线,并采用端到端的连接方式, 因此在每一条PCIe链路中两端只能各连接一个设备, 如果需要挂载更多的PCIe设备,那就需要用到switch转接器。
Switch扩展了PCIe端口,靠近RC的那个端口,我们叫上游端口(upstream port),而分出来的其他端口,我们叫下游端口(downstream port)。一个Switch只有一个上游端口,可以扩展出若干个下游端口。下游端口可以直接连接Endpoint,也可以连接 Switch,扩展出更多的PCIe端口。
3、PCIe信号定义

- PETpx、PETnx: 数据发送器差分线对;
- PERpx、PERnx: 数据接收器差分线对,x代表通道号;
- PERST#: 全局复位信号有效时(#:低电平有效),PCIe设备将对内部逻辑进行复位操作;
- REFCLK+、REFCLK-: PCIe参考时钟信号;
- WAKE#: CPU向PCIe设备提供唤醒请求后,为该PCIe设备提供主电源Vcc;
SMCLK: 系统管理总线时钟;SMDAT: 系统管理总线数据;
4、PCIe分层结构

-
Transaction Layer:【事务层】负责
TLP包(Transaction Layer Packet)的封装与解封装,此外还负责QoS,流控、排序等功能; -
Data Link Layer:【数据链路层】负责
DLLP包(Data Link Layer Packet)的封装与解封装,此外还负责链接错误检测和校正,使用Ack/Nak协议来确保传输可靠; -
Physical Layer:【物理层】 处理所有的
Packet数据物理传输,发送端数据分发到各个Lane传输(stripe),接收端把各个Lane上的数据汇总起来(De-stripe),每个Lane上加扰(Scramble,让0和1分布均匀,去除信道的电磁干扰EMI)、去扰(De-scramble),以及8/10或者128/130编码解码等。
PCIe传输的数据从上到下,都是以packet的形式传输的,每个packet都是有其固定的格式的。

-
红色部分【事物层】:
Header和Data是事务层上层给的信息,事务层给它末尾加ECRC(End-to-End CRC, 端到端CRC)字段,,就构成了一个TLP(Transaction Layer Packet); -
蓝色部分【数据链路层】: 负责在
TLP中添加一个序列号、LCRC字段(Link CRC, 链路CRC),构成了一个DLLP包(Data Link Layer Packet); -
绿色部分【物理层】:
DLLP下传到物理层,头上加个Start,末尾加个End符号,把这些数据分派到各个Lane上,然后每个Lane上加扰码,经8/10或128/130编码,最后通过物理传输介质传输给接收方。( 解析是一个逆向的过程)
二、PCIe事物层
事务层根据上层(软件层或者应用层)请求(Request)的类型、目的地址和其它相关属性,把这些请求打包,产生TLP(Transaction Layer Packet)。
TLP=Request TLP【请求】 +Completion TLP【响应】
1、TLP请求
根据软件层的不同请求,事务层产生四种不同的TLP请求:
-
Memory: 【内存空间访问】,数据在彼此的
Memory之间交互, PCIe总线上的主流传输;针对32bit寻址,支持4G的地址空间,针对64bit寻址,支持16G的地址空间; -
IO:【 IO空间访问】,新的PCIe设备设备的物理空间只支持内存映射(
Memory map)到Host主存,存在访问IO空间的TLP,是为了兼顾老设备;PCI最大支持4G的IO空间,但受限于x86处理器的IO空间(16bits带宽),很多平台将PCI的I

PCIe采用了点到点通讯方式,全双工,基于数据包传输,其速度随着版本提升而增加。PCIe设备间通过链路连接,采用树形拓扑结构,包括根桥(RootComplex)、交换机(Switch)和终端设备(Endpoint)。PCIe信号定义涉及数据发送和接收的差分线对,以及各种控制信号。事务层负责将上层请求打包成TLP,分为内存读写、配置、IO和消息请求四种类型,每个TLP包含Header、DataPayload和ECRC等字段。文章还介绍了PCIe的配置空间,包括设备ID、命令寄存器等,并阐述了PCIe设备的枚举、链路训练和配置空间分配过程。
最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



