PCIe总线详解

一、PCIe简介

        PCI Express (peripheral component interconnect express) 简称PCIe,是一种高速、串行、全双工、计算机扩展总线标准采用高速差分总线,并采用点到点的连接方式用于两个设备之间的通信。多个PCI Express设备通过使用Switch互连,因此可以在一个系统中将大量设备连接在一起。相对于PCI引入了一些新特性,如流量控制机制、服务质量管理(QoS)、热插拔支持、数据完整性和新型错误处理机制等。

1.1 PCIe链路

        所谓全双工就是允许在同一时刻,同时进行发送和接收数据。将两个设备连接在一起的 PCI Express互连称为链路(Link)。 链路由每个方向上的x1、x2、x4、x8、x12、x16或x32信号对组成,这些信号称为通道(Lane)。链路内通道的数量称为链路宽度。一条x1的链路有一条通道,即每个方向都有一对差分信号,共4个信号。由于是串行总线,因此所有的数据(包括配置信息等)都是以数据包(Packet)为单位进行发送的。

1.2 基于数据包的协议

        PCI Express使用基于数据包的协议对事务进行编码,数据包通过串行方式传输和接收,并在链路的可用通道上进行字节分割。链路上实现的通道越多,数据包传输速度越快,链路的带宽也越大。数据包用于支持非Posted事务的分割事务协议,定义了各种类型的数据包,如内存读取和写入请求、I/O读取和写入请求、配置读取和写入请求、消息请求和完成。

        传输/接收速率为每通道每方向2.5Gbits/秒。 为了在数据传输和接收过程中支持更高的稳健性,传输的每个数据字节都被转换为10位数据(通过发送设备中的8b/10b编码器)。 比如要传输的一个字节(8位)的数据,实际上传输了10位的编码数据,多余的2bit用来校验。(PCie Gen3以及之后的版本采用了128b/130b的编码方式)

二、PCIe拓扑结构

        PCIe是一个协议,描述了具有相同接口的不同设备的沟通方法。PCIe拓扑结构是一个树结构,该拓扑结构的最大特点就是点对点互联,层次结构的顶层是一个CPU,一般包含一根组件RC(Root Complex),交换器switch,终端设备EP(endpoint)等类型的PCIe设备组成。它们在PCIe所规定的协议下扮演着各自的角色,承担着各自的任务。

2.1 Root Complex

        Root Complex:根复合体,简称RC,CPU和PCle总线之间的接口,代表CPU与系统的其余部分进行通信,可以理解为系统CPU和PCle拓扑之间的接口,主要功能是完成存储器域到PCIe总线域的地址转换,RC把来自CPU的request转化成PCIe的4种不同的requests(configuration, Memory,I/O,Message)并发送给接在它下面的设备

        简单来说RC是CPU与PCIe上组件各个通信的媒介,比如CPU要读取某个组件信息,告知RC,剩下的任务均由RC进行处理,负责初始化和管理PCIe总线上的所有设备,也可以理解为PCIe总线的主控制器。

2.2 PCIE-PCI Bridge

        PCIE-PCI Bridge提供了与其他总线(如PCI、PCI- x,或另一个PCle总线)的接口,它允许旧的PCI或PCIX卡通过桥接入系统中。

2.3 Switch

        PCIe总线采用点到点的连接方式,,因此在每一条PCIe链路中两端只能各连接一个设备, 如果需要挂载更多的PCIe设备,那就需要用到Switch转接器。

        Switch内部可以视为多个虚拟的PCI到PCI的桥,实现扩展功能,允许更多的设备连接到一个PCle端口。该组件会根据事务类型将数据送到不同的通道,对数据包没有处理的功能只有转发功能。在软件层面可以看到switch的上行口(upstream port, 靠近RC的那一侧) 和下行口(downstream port)。一般而言,一个switch 只有一个upstream port, 可以有多个downstream port。

2.4 Endpoint

        Endpoint是PCIe总线上的终端设备,负责提供各种服务和数据传输功能,也就是RC命令最终要到达的地方。Endpoint只能接受来自上级拓扑的数据包或者向上级拓扑发送数据包。例如声卡、网卡,还有应用到PCIe的些功能设备,均是端点。

        Endpoint可分为Lagacy PCIe Endpoint和Native PCIe Endpoint,Lagacy PCIe Endpoint是指那些原本准备设计为PCI-X总线接口的设备,但是却被改为PCIe接口的设备。Native PCIe Endpoint则是标准的PCIe设备。其中,Lagacy PCIe Endpoint可以使用一些在Native PCIe Endpoint禁止使用的操作,如IO Space和Locked Request等。Native PCIe Endpoint则全部通过Memory Map来进行操作,因此,Native PCIe Endpoint也被称为Memory Mapped Devices(MMIO Devices)

三、PCIe分层结构

        PCIe总线架构是一种分层协议架构,分为事务层(Transaction Layer)、数据链路层(Data Link Layer) 和物理层(Physical Layer)。这些层中的每一层都分为两部分:一部分处理出站 (要发送的) 信息,另一部分处理入站 (接收的) 信息
        在PCIe结构中使用数据包在设备之间传递信息,数据包在事务层和数据链路层中形成,以将信息从发送设备传送到接收设备。

3.1 事务层

        事务层是PCIe协议的对外接口层,用户对数据进行组帧和解析是在事务层进行,事务层产生的数据包称之为事务层数据包或事务层报文),即Transaction Layer Packets,TLP)。事务层的主要责任是事务层包TLP的组装和拆卸。事务层接收来自PCIe设备核的数据,并将其封装为TLP。TLP用于传达事务,例如读取和写入,以及确定事件的类型。事务层还可以从数据链路层中接收数据报文,然后转发至PCIe设备核。

3.2 数据链路层

        数据链路层的主要职责包括链路管理和数据完整性,包括错误检测和错误纠正。数据链路层在传输链路上接受事务层组装的TLP,检查接收到的TLP的完整性。在检测到TLP错误时,数据链路层负责请求重发TLP,直到正确接收信息或确定链路失败为止。数据链路层还生成并使用用于链路管理功能的数据包,称为数据链路层数据包(Data Link Layer Packet,DLLP),DLLP产生于数据链路层,终止于数据链路层,主要实现的功能有流量控制、电源管理、应答机制和虚拟通道。

        TLP在经过数据链路层时被加上Sequence Number前缀和CRC后缀,然后发向物理层。

3.3 物理层

        物理层负责将从数据链路层接收的信息转换为适当的序列化格式,并以与链路另一端的设备兼容的频率和通道宽度在PCI Express链路上传输该信息。PCIe总线的物理层定义了 LTSSM(Link Training and Status State Machine)状态机,PCIe链路使用该状态机管理链路状态,并进行链路训练、链路恢复和电源管理。

        PCIe总线使用端到端的连接方式,在一条PCIe链路的两端只能各连接一个设备,这两个设备互为数据发送端和数据接收端。由于PCIe是支持全双工通信的,所以发送端和接收端中都含有TX(发送逻辑)和RX(按收逻辑)。在PCIe总线的物理链路的一个数据通路(Lane)中,有两组差分信号,共4根信号线组成。其中发送端的TX与接收端的RX使用一组差分信号连接,该链路也被称为发送端的发送链路,也是接收端的接收链路;而发送端的RX与接收端的TX使用另一组差分信号连接,该链路也被称为发送端的接收链路,也是接收端的发送链路。

        一个PCIe链路可以由多个Lane组成。目前PCIe链路可以支持1、2、4、8、12、16和32个Lane,即xl、x2、x4、x8、x12、x16和x32宽度的PCIe链路。每一个Lane上使用的总线频率与PCIe总线使用的版本相关。

四、PCIe的事务类型

        PCIe协议总共规定了Memory、I/O、Configuration和Message四种事务类型(TLP请求),其中前三种是从PCI继承过来的,消息是PCIE所扩展的。前三种分别用于访问内存空间、IO空间、配置空间,Message用于传输中断信息、错误信息等。这四种TLP请求,如果需要对方回应(对方返回一个Completion TLP),称之为Non-Posted TLP;不需要对方回应,称之为Posted TLP。

参考文献:

PCI Express System Architecture

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PCIe总线是一种高速串行接口协议,用于连接计算机内部的各种设备,如显卡、声卡、存储设备等。学习PCIe总线需要掌握以下几个方面的知识。 首先,应该了解PCIe总线的基本概念和工作原理。PCIe总线的传输速度非常快,具有高带宽和低延迟的特点。它采用点对点(Point-to-Point)连接方式,每个设备都有独立的通信通道,能够实现高效的数据传输。 其次,需要掌握PCIe总线的电气特性和信号传输方式。PCIe总线使用差分信号进行数据传输,可以有效抵抗噪声和干扰,提高传输质量。此外,还需要学习常用的PCIe接口类型和插槽规格,以便选择合适的设备和扩展卡进行扩展。 另外,了解PCIe总线的配置空间和寄存器编程也是很重要的。PCIe设备内部有一片配置空间,包含了设备的基本信息和寄存器,可以通过编程来访问和配置设备。掌握寄存器的编程方法可以实现对设备的控制和管理。 最后,需要了解PCIe总线在操作系统中的驱动程序开发。学习如何编写PCIe设备的驱动程序,可以实现与设备的交互和数据传输。对于开发人员而言,掌握PCIe总线的驱动开发技术,对于实现硬件设备的功能和性能优化至关重要。 总之,学习PCIe总线需要掌握其基本概念、工作原理、电气特性和信号传输方式、配置空间和寄存器编程,以及在操作系统中的驱动程序开发。这些知识将帮助我们了解和应用PCIe总线,提高计算机系统的性能和扩展能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值