PCIe总线详解

一、PCIe简介

        PCI Express (peripheral component interconnect express) 简称PCIe,是一种高速、串行、全双工、计算机扩展总线标准采用高速差分总线,并采用端到端的连接方式,因此在每一条PCIe链路中两端只能各连接一个设备。相对于PCI引入了一些新特性,如流量控制机制、服务质量管理(QoS)、热插拔支持、数据完整性和新型错误处理机制等。

        PCIe 总线在实际工程实践中有着良好的应用,主要应用在光纤、PCIe 数据采集卡、FPGA 加速卡、存储子系统等所有需要和主机进行高速数据交互的场所。

二、PCIe拓扑结构

        PCIe拓扑结构是一个树结构,层次结构的顶层是一个CPU,一般包含一根组件RC(Root Complex),交换器switch,终端设备EP(endpoint)等类型的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)并发送给接在它下面的设备

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的些功能设备,均是端点。

        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总线使用的数据报文首先在事务层中形成,这个数据报文也被称之为事务层数据报文,即TLP(Transaction Laver Packet),事务层的主要责任是事务层包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总线使用的版本相关。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/55371.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker安装Mysql、Redis、nginx、nacos等环境

相关系列文章: 1、DockerHarbor私有仓库快速搭建 2、DockerJenkinsHarbor 1、服务器 Ip部署内容说明192.168.88.7Docker、Mysql、redis、nacosnode1192.168.88.8Docker、Mysql、redis、nacosnode2192.168.88.9Docker、redis、nacos、nginxnode3 2、安装PXC8.0 Mys…

【C++】map和set

目录 一、容器补充1.序列式容器与关联式容器2.键值对3.树形结构的关联式容器 二、set1.set的介绍2.set的使用3.multset的介绍4.multset的使用 三、map1.map的介绍2.map的使用3.multimap的介绍4.multimap的使用 一、容器补充 1.序列式容器与关联式容器 我们已经接触过STL中的部…

postgresql之内存池-AllocsetContext

一、简介 postgresql大部分的内存分配管理都是通过MemoryContext进行操作的, 多个相关的MemoryContext构成了一个树型结构, 多个树构成了一个森林。 实现了三种MemoryContext: SlabContextGenerationContextAllocSetContext 使用全局变量CurrentMemo…

哪些情况下需要使用爬虫IP

不知道小伙伴们有没有遇到过这种场景:上网闲逛,看一些搞笑的视频或者想下载一些酷炫的文件,正点击呢,结果却发现被网站限制了,无法访问或者下载? 别急,今天我来告诉大家,如何借助使…

rust基础

这是笔者学习rust的学习笔记(如有谬误,请君轻喷) 参考视频: https://www.bilibili.com/video/BV1hp4y1k7SV参考书籍:rust程序设计语言:https://rust.bootcss.com/title-page.htmlmarkdown地址:h…

操作系统复习总结1

操作系统复习总结,仅供笔者复习使用,参考教材: 《操作系统原理》 - 何静媛编著. 西安电子科技大学出版社《操作系统考研复习指导》2024年 - 王道论坛组编. 电子工业出版社 本文主要内容为:计算机系统概述; 计算机系…

python-Excel数据模型文档转为MySQL数据库建表语句(需要连接数据库)-工作小记

将指定Excel文档转为create table 建表语句。该脚本适用于单一且简单的建表语句 呈现效果 代码 # -*- coding:utf-8 -*- # Time : 2023/8/2 17:50 # Author: 水兵没月 # File : excel_2_mysql建表语句.py import reimport pandas as pd import mysql.connectordb 库名mydb m…

【JavaSE】面向对象编程思想之多态(图文详解)

目录 1. 多态的概念 2. 多态实现条件 3. 重写 4. 向上转型和向下转型 4.1 向上转型 4.2 向下转型 5. 多态的优缺点 6. 避免在构造方法中调用重写的方法 1. 多态的概念 多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为&a…

mysql8查看执行sql历史日志、慢sql历史日志,配置开启sql历史日志general_log、慢sql历史日志slow_query_log

0.本博客sql总结 -- 1.查看参数 -- 1.1.sql日志和慢sql日志输出方式(TABLE/FILE)。global参数 SHOW GLOBAL VARIABLES LIKE log_output; -- 1.2.sql日志开关。global参数 SHOW GLOBAL VARIABLES LIKE general_log%; -- 1.3.慢sql日志开关。global参数 SHOW GLOBAL VARIABLE…

freeswitch的mod_xml_curl模块动态获取dialplan

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 mod_xml_curl模块支持从web服务获取xml配置,本文介绍如何动态获取dialplan配置。 环境 centos:CentOS release 7.0 (Final)或以上版本 freeswitch:v1.6.20 GCC:4.8.5…

召唤神龙打造自己的ChatGPT

在之前的两篇文章中,我介绍了GPT 1和2的模型,并分别用Tensorflow和Pytorch来实现了模型的训练。具体可以见以下文章链接: 1. 基于Tensorflow来重现GPT v1模型_gzroy的博客-CSDN博客 2. 花费7元训练自己的GPT 2模型_gzroy的博客-CSDN博客 有…

基于SpringBoot+Vue的地方美食分享网站设计与实现(源码+LW+部署文档等)

博主介绍: 大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…