第五章 PCIe介绍 5.1-5.7

news2024/11/28 18:59:36

5.1 从PCIe的速度说起

   为什么SSD要用PCIe接口?因为它快,比SATA快。

    Lane:通道,PCIe最多可以有32个通道。

  1. PCIe的工作模式

    两个设备之间的PCIe连接,叫做一个Link。如下图,设备A和设备B是个双向连接,两个PCIe设备之间,有专门的发送和接收通道,数据可以同时往两个方向传输,PCIe Spec称这种工作模式为双单工模式(Dual-Simplex),可以理解为全双工模式

   2. SATA的工作模式

      和PCIe一样,SATA有独立的发送和接收通道。但与PCIe工作模式不一样,同一时间,SATA只有一条通道可以进行数据传输。这种工作模式称为半双工模式

    与SATA单通道不同,PCIe连接可以通过增加通道数扩展带宽。

5.2 PCIe拓扑结构

      把网络中的计算机和通信设备抽象为一个点,把传输介质抽象为一条线,由点和线组成的几何图形就是计算机网络的拓扑结构。

      计算机网络主要的拓扑结构有:总线型拓扑、环形拓扑、树形拓扑、星形拓扑、混合型拓扑以及网状拓扑。

      PCIe采用树形拓扑结构,如下

 CPU只能直接访问主机内存空间(或IO空间),不能对PCIe等外设进行直接操作。 

 

 

 

 

    小结:

        (1)PCIe采用树形拓扑结构,RC是树的根或主干,它为CPU代言,与PCIe系统的其他部分通信,一般为通信的发起者。

       (2)Switch是树枝,树枝上有叶子(Endpoint),也可节外生枝,即Switch上连Switch,归根结底,是为了连接更多的叶子Endpoint。

       (3)Switch为它下面的Endpoint或Switch提供路由转发服务。

       (4)Endpoint是树叶,诸如SSD、网卡、显卡等,实现某些特定功能(Function)。

       (5)PCIe采用点到点(Endpoint to Endpoint)的通信方式,每个设备独享通道带宽。

5.3 PCIe分层结构

     绝大多数总线或者接口都是采用分层实现的。PCIe的层次结构如下:

        PCIe定义了以下三层:事务层(Transaction Layer)、数据链路层(Data Link Layer)和物理层(Physical Layer,包括逻辑子模块和电气子模块),下层总是为上层服务。

       PCIe传输的数据从上到下,都是以数据包(Packet)的形式传输的,每层数据包都是其固定的格式。

(1)事务层

        事务层主要负责创建(发送) 或 解析(接收) TLP(Transaction Layer Packet)、流量控制、QoS、事务排序等。

(2)数据链路层

        主要负责创建(发送) 或 解析(接收) DLLP(Data Link Layer Packet)、Ack / Nak协议(链路层检错和纠错)、流控、电源管理等。

(3)物理层

        主要负责处理所有的Packet数据物理传输,发送端数据分发到各个Lane传输(Stripe),接收端把各个Lane上的数据汇总起来(De-stripe),每个Lane上加干扰(Scramble,目的是让0和1均匀分布,去除信道的电磁干扰EMI)和去扰(De-Scramble),以及8 / 10 或者 128 / 130 编码解码等。

        8 / 10:8bit的数据,实际在物理线路上是需要传输10bit的,多余的2bit用来校验。

       

    各层的细节图如下: 

 

 发送方打包TLP的过程如下:

接收方解包TLP的过程如下:

     每个Endpoint都需要实现这三层,每个Switch的Port也需要实现这三层!!如下:

         Switch的主要功能是转发数据,那么它为什么也要实现这三层呢???

        答:数据的目的地信息是包含在TLP里的,如果不实现这三层,就无法知道目的地,也就无法实现数据寻址路由。

5.4 PCIe TLP类型

     主机与PCIe设备之间,或PCIe设备与设备之间,数据传输都是以Packet形式进行的。事务层根据上层( 应用层软件层请求(Request)的类型、目的地址和其他相属性,将这些请求打包,生成TLP(事务层数据包),然后历经数据链路层、物理层,最终到达目标设备。

       根据软件层的不同请求,事务层产生四种不同的TLP请求:Memory、IO、Configuration、Message。

     

前三种分别用于访问内存空间、IO空间、配置空间,Message用于传输中断信息、错误信息等。

       一个设备的物理空间,可以通过内存映射(Memory Map)的方式映射到主机的主存。

       所有配置空间(Configuration)的访问,都是主机发起的,确切的说是RC发起的,往往只在上电枚举和配置阶段会发起对配置空间的访问,才会有Configuration TLP;

       只有在中断或有错误的情况下,才会有Message TLP;

       故而,PCIe线上主流传输的是Memory访问相关的TLP

       这四种TLP请求,如果需要对方回应(对方返回一个Completion TLP),称之为Non-Posted TLP;不需要对方回应,称之为Posted TLP。

       (1)Non-Posted TLP:Configuration、IO、 Memory Read;

       (2)Posted TLP:Memory Write、Message。

        由以上可知,PCIe里面所有的TLP = Request TLP + Completion TLP !!!

 

  以Memory Read为例,说明请求的过程:

 

5.5 PCIe TLP结构

      无论是Request TLP,还是作为回应的Completion TLP,都由以下部分组成:

        TLP主要由三部分组成:Header、Data(可选,取决具体TLP类型)和ECRC(可选)

        TLP都是始于发送端的事务层,终于接收端的事务层

(1)Header

        每个TLP都有一个Header。

        事务层根据上层请求的内容,生成TLP Header。

        Header中的内容包括发送者的相关信息、目标地址、TLP类型(如Memory Read)、数据长度等。

        一个Header的大小可以是3DW(Double Word,1DW = 4byte),也可以是4DW。

(2)Data Payload域

 

(3)ECRC(End to End CRC)域

 

下面分别介绍具体TLP的Header。

  1. Memory TLP

        对一个PCIe设备来说,它开放给主机访问的设备空间首先会映射到主机的内存空间,主机如果想访问设备的某个空间,TLP Header当中的地址应该设置为该访问空间在主机内存的映射地址。

        TLP在经过Switch的时候,Switch会根据地址信息,把该TLP转发到目标设备。

        Memory TLP的目标地址是通过内存地址告知的,来源则是由“Requester ID”告知的。

        每个PCIe设备(RC、Switch或Endpoint)在PCIe系统中,都有唯一的ID,该ID由总线(Bus)、设备(Device)、功能(Function)三者唯一确定。

   2. Configuration TLP

        Endpoint和Switch的配置(Configuration)格式不一样,分别由Type 0 和Type 1 来表示。

        配置可以认为是一个Endpoint或Switch的标准空间,这段空间在初始化时需要映射到主机的内存空间。

  3. Message TLP

        Message TLP用于传输中断、错误、电源管理等信息,它的Header大小是4DW。

        Message Code指定该Message的类型。

   4. Completion TLP

        只有Non-Posted Request TLP,才会有Completion TLP。

        从前面三个Requester TLP可知,它们的Header中都有Requester ID 和 Tag,来告知接收者和发起者是谁。那么响应者的目标地址就是发起者的源地址

 5.6 PCIe配置空间和地址空间

 

         上图中,64byte代表的是Configuration Header。下面看看它的内部(Type 0 Header是Endpoint的Configuration Header,Type 1 Header 是Switch的Configuration Header):

        上图中,比较重要的是BAR(Base Address Register),Type 0 提供了6个BAR,Type 1只有2个。BAR是做什么的呢???

        答:

 

 

        在一个PCIe拓扑结构中,一个总线下面可以挂多个设备,而每个设备可以具有几个功能,如下:

        在整个PCIe系统中,只要知道了Bus No. + Device No. + Function No. ,就能找到唯一的Function。

        寻址基本单元是功能,它的ID由Bus + Device + Function组成(BDF)。

 

        请注意:只有RC才能发起Configuration的访问请求,其他设备是不允许对别的设备进行Configuration读写的。

 

5.7 TLP的路由

      一个TLP是经历了什么后,才能顺利到达目的地的呢??? 以下图为例,讨论一个TLP是怎样从发起者到达接收者,即TLP的路由问题

        PCIe有三种路由方式:基于地址(Memory Address)路由、基于设备ID(Bus Number + Device Number + Function Number)路由、隐式(Implicit)路由 。

   1. 地址路由

        Switch负责路由和TLP的转发,而路由信息是存储在Switch的Configuration空间的。Type 1 Configuration Header如下:

 

        Switch的Configuration中的BAR0 和 BAR1 存放的是Switch内部空间在主机内存空间的映射基址。      

        Switch有一个上游端口和若干个下游端口,每个端口是一个Bridge,都有一个Configuration,每个Configuration描述了其下面连接设备的空间映射的范围,分别由Memory Base 和 Memory Limit来表示。

        根据前文可以知道,Memory Read TLP 或 Memory Write TLP 的Header里都有一个地址信息,该地址是PCIe设备内部空间在内存中的映射地址。

   (1)Endpoint收到这样的TLP

 

    (2)Switch 收到这样的TLP

 

        上面描述的是TLP从Upstream 流到 Downstream 的路由。如果TLP从下游往上游走呢??? 

 

  2. ID路由

        在一个拓扑结构中,由 ID = Bus Number + Device Number + Function Number(BDF)能唯一找到某个设备的某个功能。

        这种按设备ID号来寻址的方式叫做ID路由。Configuration TLP 和 Completion TLP(CplD)按ID路由来寻址,Message在某些情况下也是ID路由来寻址。

        使用ID路由的TLP,其TLP Header中包含BDF信息。

 

   (1)Endpoint收到这样的TLP

        当一个Endpoint收到一个这样的TLP,它用自己的 ID 和收到TLP Header 中的 Header比较,如果是给自己的,就收下TLP;否则就拒绝。

   (2)Swtich收到这样的TLP

 注意:不是一个Switch对应一个Configuration空间,而是Switch的每个Port都有一个Configuration空间

        先看看Switch的Configuration Header,如下

         看三个寄存器:Subordinate Bus Number、Secondary Bus Number 和 Primary Bus Number,如下:

 

 

   3. 隐式路由

        只有Message TLP才支持隐式路由。

        在PCIe总线中,有些Message是与RC通信的,RC是该TLP的发送者或接收者,因此没必要明明白白的指定地址或 ID ,这种方式叫做隐式路由。

        Message TLP 还支持地址路由和ID路由,但以隐式路由为主。

        Message TLP 的Header 总是 4DW。如下:

         Type字段,低3位,由 rrr 表示,指明该 Message 的路由方式。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【读书笔记】只管去做

《只管去做》是一本很容易读完的书,这本书是以故事的形式来阐述把愿景落实到每天的行动中的方法,对我们做人生规划很有帮助。

使用leaflet在html中加载天地图且去掉左上角的缩放图标以及右下角的logo

前言 我们这一节使用轻量化的javascript库leaflet来实现在html中加载天地图,实现类似高德地图、百度地图的效果。 效果图如下: 话不多说,进入主题!! 一、注册开发者权限 我们需要在天地图平台注册一个账号&#xff0…

【Qt】VS2013+QT5.6.3环境搭建

安装VS2013 略 安装Qt 安装文件:qt-opensource-windows-x86-msvc2013-5.6.3.exe(官网已经不提供下载了。) 安装步骤:安装到C盘根目录,其它略。 安装qt vs插件 1、下载地址: https://download.qt.io/a…

string常见功能模拟

学到string终于就不用像c语言一样造轮子了,接下来我们就模拟一下string方便我们更好理解string,首先我们都知道库里有个string,所以为了避免我们的string和库里的冲突,要用命名空间my_string将我们写的string包含在内。string的成…

精准医学时代:探索人工智能在DCA曲线下的临床医学应用

一、引言 在当今医学领域中,精准医学作为一种以个体差异为基础的医疗模式逐渐受到重视和应用[1]。精准医学基于个体基因组、环境和生活方式因素的综合分析,旨在实现个体化的预防、诊断和治疗方案,从而提供更好的临床结果[2]。与传统医学相比&…

MACD进阶版指标公式,提前一天判断MACD金叉

MACD是一种常用的技术分析指标,用于判断价格的趋势和动能,其原理是基于两条指数移动平均线的比较和对价格的平滑处理,MACD金叉是指MACD指标中的快线DIF从下方向上穿过慢线DEA。快线、慢线都是根据收盘价计算出来的,如果想提前一天…

STM32基础知识点总结

一、基础知识点 1、课程体系介绍 单片机概述arm体系结构STM32开发环境搭建 STM32-GPIO编程-点亮世界的那盏灯 STM32-USART串口应用SPI液晶屏 STM32-中断系统 STM32-时钟系统 STM32-ADC DMA 温湿度传感器-DHT11 2.如何学习单片机课程 多听理论、多理解、有问题及时提问 自己多…

论文阅读:基于深度学习的大尺度遥感图像建筑物分割研究

一、该网络中采用了上下文信息捕获模块。通过扩大感受野,在保留细节信息的同时,在中心部分进行多尺度特征的融合,缓解了传统算法中细节信息丢失的问题;通过自适应地融合局部语义特征,该网络在空间特征和通道特征之间建…

时间序列预测 | Matlab基于粒子群算法(PSO)优化径向基神经网络(PSO-RBF)的时间序列预测

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 时间序列预测| Matlab基于粒子群算法(PSO)优化径向基神经网络(PSO-RBF)的时间序列预测 评价指标包括:MAE、MBE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %% 清空环境变量 warni…

2023年开放式蓝牙耳机选购指南!多款热门开放式蓝牙耳机品牌盘点

前言 大家好,作为专注耳机研究多年的发烧级爱好者,毫不夸张地说我为耳机花的钱比买衣服还多,很多人都在问我开放式耳机到底有没有必要买?答案毫无疑问是有必要!开放式耳机佩戴舒适又安全的特质让它在耳机届风靡&#…

zabbix server is not running错误解决方法

1.错误:zabbix server is not running 打开zabbix server的时候,底部飘着一行黄色的警告字 2.解决方法 (1)关闭selinux (2)查看日志文件 #tail -f /var/log/zabbix/zabbix_server.log 发现内存溢出了 __zbx_mem_realloc(): out of memory 那…

vitepress使用

vitepress使用 初始化项目 pnpm init pnpm add vitepress vue 创建一个docs文件夹 在docs下新建index.js文件 # Hello VitePress在package.json中增加打包以及运行的指令 "scripts": {"docs:dev": "vitepress dev docs", // 本地运行调试&qu…

springboot高校党务系统

开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9

实力认可丨通付盾上榜《嘶吼2023网络安全产业图谱》31项细分领域

7月10日,嘶吼安全产业研究院联合国家网络安全产业园区(通州园)正式发布《嘶吼2023网络安全产业图谱》。通付盾入围本次图谱的基础技术与通用能力、网络与通信安全、安全服务、应用与产业安全、数据安全、开发与应用安全六大类别,3…

day32-Oracle+servlet

0目录 Oraclejdbcjspservlet 1.准备物料 1.1 创建Maven工程&#xff0c;导入依赖 方法1&#xff1a;在maven本地仓库repo中放入下载好的jar包 方法2&#xff1a;换版本&#xff0c;引入依赖 <dependency> <groupId>com.oracle.database.jdbc</groupId>…

x3550M5服务器,2008r2系统,关机后再开机,提示需要系统修复

问题现象&#xff1a; x3550M5服务器&#xff0c;2008r2系统&#xff0c;关机后再开机&#xff0c;提示需要修复&#xff0c;选择语言&#xff0c;点击下一步&#xff0c;选择操作系统一栏是空白的 &#xff08;加载前的图忘记拍&#xff09; 问题分析&#xff1a; 根据网上…

关于c/c++中的isdigit()函数(判断一个字符是不是数字字符)

1&#xff1a;做用&#xff1a;判断一个字符是不是数字字符&#xff08;即&#xff1a;相当于&#xff1a;s[i]>0&&s[i]<9&#xff09; 2&#xff1a;使用方式 char cA; string s"123fgv"; if(isdigit(c)); if(isdigit(s[i]))//返回bool类型 3&…

服务端⾼并发分布式结构演进之路

1.前置概念 应⽤&#xff08;Application&#xff09;/系统&#xff08;System&#xff09; 为了完成一整套服务的一个程序或相互配合的程序群 模块&#xff08;Module&#xff09;/组件&#xff08;Component&#xff09; 当应⽤较复杂时&#xff0c;为了分离职责&#xf…

我爱学QT-制作一个最简单的QT界面

1.qt基础 qt的移植性非常强&#xff0c;一套代码不用我们改太多&#xff0c;直接通用所有平台。不久的将来&#xff0c;qt会被用到MCU上&#xff0c;学习QT还是非常有意义的。 2.做一个简单的QT界面 首先新建工程 注意这个不一样 工程文件分析&#xff1a; #--------------…