天天看点

PCIE学习笔记(二)PCIe总线的拓扑结构,协议层,数据传输流程PCIe总线的拓扑结构PCI Express协议分层数据传输时候的流程

目录

PCIe总线的拓扑结构

PCI Express协议分层

物理层(Physical Layer)

数据链路层(Link Layer)

处理层(Transaction Layer)

软件层(Software Layer)

数据传输时候的流程

TLP和DLLP报文格式

PCIe总线的拓扑结构

PCIe采用的是树形拓扑结构, 一般由根组件(Root Complex),交换设备(Switch),终端设备(Endpoint)等类型的PCIe设备组成

Root Complex: 根桥设备,是PCIe最重要的一个组成部件; Root Complex主要负责PCIe报文的解析和生成。RC接受来自CPU的IO指令,生成对应的PCIe报文,或者接受来自设备的PCIe TLP报文,解析数据传输给CPU或者内存。

Switch: PCIe的转接器设备,目的是扩展PCIe总线。和PCI并行总线不同,PCIe的总线采用了高速差分总线,并采用端到端的连接方式, 因此在每一条PCIe链路中两端只能各连接一个设备, 如果需要挂载更多的PCIe设备,那就需要用到switch转接器。switch在linux下不可见,软件层面可以看到的是switch的上行口(upstream port, 靠近RC的那一侧) 和下行口(downstream port)。

一般而言,一个switch 只有一个upstream port, 可以有多个downstream port.

PCIe endponit: PCIe终端设备,是PCIe树形结构的叶子节点。比如网卡,NVME卡,显卡都是PCIe ep设备。

PCIE学习笔记(二)PCIe总线的拓扑结构,协议层,数据传输流程PCIe总线的拓扑结构PCI Express协议分层数据传输时候的流程

图1:PCIe 体系结构拓扑图

PCI Express协议分层

PCI Express体系结构采用分层设计,就像网络通信中的七层OSI结构一样,这样利于跨平台的应用。PCI-Express体系结构如图2所示。它共分为四层,从下到上分别为:

  • 物理层(Physical Layer)
  • 数据链路层(Link Layer)
  • 处理层(Transaction Layer)
  • 软件层(Software Layer)

​​​​​​​

PCIE学习笔记(二)PCIe总线的拓扑结构,协议层,数据传输流程PCIe总线的拓扑结构PCI Express协议分层数据传输时候的流程

图2 PCIe 协议层结构

  • 物理层(Physical Layer)

物理层是最低层,它负责接口或者设备之间的链接,是物理接口之间的连接,可对应于网络中OSI七层模式中的物理层来理解。

物理层决定了PCI Express总线接口的物理特性,如点对点串行连接、微差分信号驱动、热拨插、可配置带宽等。初始的单一串行PCI Express链接包含两个低电压微分驱动信号对(4线的接收和发送对)的双向连接,即“发送”和“接受”信号。

数据时钟使用8/10b解码方式来达到相 当高的数据速率(这一技术同时也在其它串行总线技术中,如InfiniBand和RapidIO);时钟信息直接被编码成数据流,比起分离信号时钟更 好。

  • 数据链路层(Link Layer)

数据链路层的主要职责就是确保数据包可靠、正确传输。它的任务是确保数据包的完整性,并在数据包中添加序列号和发送冗余校验码到处理层。大多数数据包 是由处理层发起的,基于信任,数据流控制协议确保数据包只在终端缓存空闲时传输。排队了所有数据的重试,使得信道带宽浪费现象得到有效地约束。

  • 处理层(Transaction Layer)

处理层的作用主要是接受从软件层送来的读、写请求,并且建立一个请求包传输到链接层。所有请求都是分离执行,有些请示包将需要一个响应包。处理层同时 接受从链路层传来的响应包,并与原始的软件请求关联。处理层还整合或者拆分处理级数据包来发送请求,如数据读、写请求,并且操纵链接配置和信号控制。以确 保端到端连接通信正确,没有无效数据通过整个组织(包括源设备和目标设备,甚至包括可能通过的多个桥接器和交换器)。

在PCI Express总线技术中,数据包类型主要有两种,那就是由处理层发起的“处理层数据包”(Transaction Layer Packet,TLP)和“数据链路层数据包”(Data Link Layer Packet,DLLP)。每个数据包都有一个可以使响应包定向于正确发起者的唯一标识符,包的格式支持32位内存地址和扩展64位内存地址。包同时还有 如“非窥探”、“无严格排序”和“优先权”等属性,这些属性将应用于优化路由I/O子系统的数据包。

处理层包括4个地址空间,其中3个是PCI接口原有的,如内存、I/O和配置地址空间,另一外新PCI-Express接口新加的,它就是“信息空 间”。PCI2.2标准中介绍不断变化的系统中断宣传的方法称之为 “信息信号中断”(Message Signaled Interrupt,MSI)。这里特殊规格格式的内存写事物代替无边信号硬写,如中断、电源管理请求、复位等等有关信息方面。这几个地址空间类型的用途如下表所示:

地址空间 处理类型 基本用途
内存 读/写 处理来自或发送到内存中的数据
I/O 读/写 处理来自或发送到I/O节点中的数据
配置 读/写 设备配置或者设置
信息 基线/供应商定义/先进交换 处理从事件信号机制到通用目信息的所有信息

表1:PCIe地址空间

  • 软件层(Software Layer)

软件层被称为最重要的部分,因为它是保持与PCI总线兼容的关键。其目的在于使系统在使用PCI Express启动时,像在PCI下的初始化和运行那样,无论是在系统中发现的硬件设备,还是在系统中的资源,如内存、I/O空间和中断等,它可以创建非 常优化的系统环境,而不需要进行任何改动。在PCI-Express体系结构中保持这些配置空间和I/O设备连接的规范稳定是非常关键的。事实上,在 PCI-Express平台中所有操作系统在引导时都不需要进行任何编辑,也就是说在软件方面完全可以实现从PCI总线平稳过渡。

数据传输时候的流程

PCIE协议传输数据是以数据包的形式传输, 如下图所示从发送端说起。数据交到Device B 的Core层, 由Core层将数据格式转换成处理层(Transaction Layer)可以接受的报文格式,处理层产生相应的数据包,并存储再对应的Buffer中。数据继续传送到数据链路层(Data Link Layer),数据链路层将上一层传来的数据包添加Seq Num和CRC校验用来给接收端进行一些数据正确性的检查。然后在物理层(Physical Layer) 将数据进行编码,通过多条链路使用模拟信号进行传输。

在接收端,下图左侧示。物理层(Physical Layer)将接收到的数据包解码后传送到数据链路层(Data Link Layer),数据链层将接收的数据进行校验检查,没有问题就把数据传送给处理层(Transaction Layer)。处理层把数据压入buffer之后,Device A core 层将数据包转换成软件课程处理的数据。

一般来说在使用FPGA 开发时,如果调用PCIE 硬核,物理层/数据链路层/处理层,这三个层都已经集成在IP核里面了。

PCIE学习笔记(二)PCIe总线的拓扑结构,协议层,数据传输流程PCIe总线的拓扑结构PCI Express协议分层数据传输时候的流程

图3 PCIe 数据传输流程

TLP和DLLP报文格式

PCIE学习笔记(二)PCIe总线的拓扑结构,协议层,数据传输流程PCIe总线的拓扑结构PCI Express协议分层数据传输时候的流程

图4 TLP 包格式

TLP 包类型:

  • Memory Read-Unlocked
  • Memory Read-Locked
  • Memory Write
  • IO Read
  • IO Write
  • Configuration Read-Type 0
  • Configuration Write-Type 0
  • Completion -Unlocked
  • Completion-Locked
  • Completion w/data-Unlocked
  • Completion w/data-Locked
  • Message Request
  • Message Request w/data
PCIE学习笔记(二)PCIe总线的拓扑结构,协议层,数据传输流程PCIe总线的拓扑结构PCI Express协议分层数据传输时候的流程

图5 DLLP 包格式

DLLP 包类型:

  • TLP Ack/Nak
  • Power Management
  • Link Flow Control
  • Vendor-Specific

继续阅读