PCIE研究-2

news2024/11/22 22:38:56

PCIe是一种高速串行总线,用于连接计算机内部的各种设备。在PCIe中,有四种不同的设备类型:Switch、Bridge、Root Complex和EndPoint。本篇文章将介绍这四种设备类型的基础知识。

1. Switch

Switch是PCIe中最常见的设备类型之一,它可以将一个PCIe总线分成多个子总线。Switch可以将数据从一个端点设备传输到另一个端点设备,同时还可以控制数据的流向和速度。Switch通常用于连接多个设备,以便它们可以共享PCIe总线的带宽。

2. Bridge

Bridge是另一种常见的PCIe设备类型,它可以连接两个不同的PCIe总线。Bridge可以将数据从一个PCIe总线传输到另一个PCIe总线,同时还可以控制数据的流向和速度。Bridge通常用于连接不同类型的设备,例如将PCIe总线连接到PCI总线或其他类型的总线。

3. Root Complex

Root Complex是PCIe总线的起点,它通常是计算机主板上的芯片组。Root Complex负责控制PCIe总线上的所有设备,包括Switch和EndPoint。Root Complex还负责初始化PCIe总线上的所有设备,并为它们分配资源,例如内存地址和中断。

4. EndPoint

EndPoint是PCIe总线上的最终设备,它通常是计算机内部的各种设备,例如显卡、网卡、声卡等。EndPoint负责接收和发送数据,并将数据传输到其他设备或主机内存中。EndPoint还可以向Root Complex请求资源,例如内存地址和中断。

总之,Switch、Bridge、Root Complex和EndPoint是PCIe总线中的四种不同设备类型,它们各自扮演着不同的角色,共同构成了PCIe总线的基础架构。了解这些设备类型的基础知识,有助于我们更好地理解PCIe总线的工作原理和应用场景。

link & lane:

lane:指pcie设备物理层传输线的一对差分线(差分对),是一个纯粹的、准确的物理实现(Physical);

link:指pcie设备的传输通道,是一个概括的概念(比如AXI总线可以指整个AXI传输通道),pcie设备间的link可以包含多个lane;

Link初始化以及link建立过程(或者称之为链路训练,Link Training)是在设备上电或者链路重新建立链接是发生的。

Region:

在PCIe控制器中,把PCIe的地址等分成32块regions (Regions 0 to 31),cpu以及外部DMA可以通过region映射向PCIE link发出写请求,可用配置(conguration space),以及数据传输(memory space)

PCI总线规定访问配置空间总线事务,使用ID号进行寻址。PCI设备ID号由总线号(Bus Number)、设备号(Device Number)和功能号(Function Number)。其中总线号在HOST主桥遍历PCI总线树时确定,在一颗PCI总线树上,总线号由系统软件决定,通常与HOST主桥直接相连接的PCI总线编号为0,系统软件使用DFS(Depth-First Search)算法扫描PCI总线树上的所有PCI总线,并依次编号。一条PCI总线的设备号由PCI设备的IDSEL信号与PCI总线地址线的连接关系确定,功能号与PCI设备的具体设计有关。一个PCIe系统最多有256条Bus,每条Bus上最多可以挂在32个设备,每个PCIe设备最多有8个功能设备。

从cpu角度理解PCIe-云社区-华为云

在XX处理器中的HOST主桥中,与PCIE设备配置相关的寄存器由CFG_ADDR、CFG_DATA等组成。系统软件使用CFG_ADDR(CFG_ADDR寄存器结构如图 2所示)和CFG_DATA寄存器访问PCIe设备的配置空间,这些寄存器都是采取同一编址(所有内存寄存器都使用存储器映射方式进行寻址)。当处理器访问PCIe配置空间时,首先需要在CFG_ADD寄存器中设置这个PCIe设备对应的总线号、设备号、功能号和寄存器偏移,然后使能Enable位,之后当处理器对CFG_DATA读写访问时,HOST主桥将这个存储器读写访问转换成PCIe配置读写请求,并且发送到PCIe总线上。如果Enable位没有使能,那么CPU对寄存器的访问也就是一个普通IO的访问,而不能让HOST转换成总线请求访问,访问PCIe配置空间时按照PCIe总线标准配置TLP请求,CFG_DATA是读取的数据或者待写入的数据。

既然CPU能够直接通过寄存器访问配置空间,为啥还会出现配置空间在存储域地址的映射这一说法呢?下面给出详细解答。

Intel(Intel是PCIe龙头老大,最新的PCIe的规范总是它最先尝试的)实现的PCI规范使用IO空间的CF8h和CFCh来分别作为索引和数据寄存器,这种方法可以访问所有PCI设备的255 bytes配置寄存器。Intel Chipsets目前仍然支持这种访PCI配置空间的方法。

        PCIe规范在PCI规范的基础上,将配置空间扩展到4K bytes,至于为什么扩展到4K,具体可以参考PCIe规范,这些配置CFG_ADDR和CFG_DATA寄存器方法仍然可以访问所有PCIe设备配置空间的头255 bytes,但是该方法访问不了剩下的(255B~4K)配置空间。

        Intel Chipset通过将配置空间映射到内存地址空间,PCIe配置空间可以像对映射范围内的内存进行read/write来访问了。这种映射是由北桥芯片来完成的,但是不同芯片的映射方式也是不同的。目前我查看了ARM芯片的datasheet,确实是这样的方式。

PCIe规范为每个PCIe设备添加了更多的配置寄存器,空间为4K,尽管CFG_ADDR和CFG_DATA寄存器方法仍然能够访问lower 255 bytes,但是必须提供另外一种方法来访问剩下的(255B~4K)range寄存器。Intel的解决方案是使用了预留256MB内存地址空间,对这段内存的任何访问都会发起PCIe 配置cycle。由于4K的配置空间是directly mapped to memory的,那么PCIe规范必须保证所有的PCIe设备的配置空间占用不同的内存地址,按照PCIe规范,支持最多256个bus,每个Bus支持最多32个PCIe devices,每个device支持最多8个function,也就是说:占用内存的最大值为:256 * 32 * 8 * 4K = 256MB。图 3是ARM Cortex-A9 datasheet内存地址分配局部图。被PCIe配置空间占用的256M内存空间会屏蔽掉DRAM使用该段内存区,这些地址都由CPU出厂时已经固化好了。

有些CPU没有直接指定PCIe配置空间的地址范围,需要读取某个寄存器的值BaseAddr,这个值就说PCIe配置寄存器在内存区域映射的基地址。访问PCIe设备配置空间时候需要手动计算访问PCIe配置空间的地址。计算发放如下:

SIZE_PER_FUNC = 4K = 1000h

SIZE_PER_DEVICE = 4K * 8 = 8000h

SIZE_PER_BUS = 4K *8* 32 = 100000h

访问总线号为busNo,设备号为DevNo,功能号为funcNo的offset寄存器的计算公式是:

Memory Address = BaseAddr+ busNo * SIZE_PER_BUS+ devNo * SIZE_PER_DEVICE+ funcNo * SIZE_PER_FUNC+ offset

访问PCIe配置空间就需要通过总线号、设备号、功能号、寄存器偏移进行转换成内存地址。转换函数如图 2所示。

4.JPG

前256Bytes可以通过寄存器方式访问,后面的256B~4k必须通过映射才能访问,映射无非就是把配置空间映射到存储地址空间,或者把PCIe设备空间映射到存储地址空间。下面开始讨论映射关系。

地址映射关系

PCIe在存储域地址空间分为三部分,PCIe控制器本身的寄存器、PCIe设备的配置空间、PCIe设备空间。寄存器和配置空间由处理器本身决定存储地址范围,本款处理器地址范围如图5所示,配置空间地址、寄存器地址、内存地址都已经确定。PCIe设备空间需要编程人员去配置Outbound和Inbound寄存器组,确定映射关系

Outbound在PCIe控制器中扮演的角色是将存储地址翻译到PCIe域的PCIe地址,Inbound是将PCIe地址翻译成存储地址,图6是一个完整的RC和EP模型地址翻译模型,图中的地址数字仅仅代表一种形态,具体地址应该是什么在后文中讲解。当cpu需要访问EP的内存空间时,首先应该将存储地址转换成PCIe地址,在根据TLP到达指定的EP,进而将PCIe地址转换成EP端的存储地址。

PCIe地址到存储地址之间的映射关系由三个寄存器决定(有两个寄存器组应该是32个寄存器)OB_SIZE、OB_OFFSET_INDEXn、OB_OFFSETn_HI,n的范围是0~31。在PCIe控制器中是把PCIe地址等分成32块regions (Regions 0 to 31),每个regions的大小是可以通过编程设置OB_SIZE寄存器确定大小,大小有1, 2, 4, or 8 MB,那么通过Outbound能够翻译的地址最大为8M*32=256M。存储域地址中有5位作为识别32个regions的index,OB_SIZE的大小决定这5位在32位地址上的位置。当OB_SIZE等于0,1,2,3时,index在存储地址中对应的位置是Bits[24:20], bits[25:21], bits[26:22], and bits[27:23],每个regions翻倍,是不是对应的地址应该按翻倍对齐呢,翻倍就是左移一位数据。

     扫描PCIe

扫描树的流程如下:

1)         建立存储地址到PCIe地址映射 (映射方式上面段落已经讲解了,固定的PCIe配置空间映射)

2)         分配PCIe总线号

3)         分配设备号

4)         访问配置空间 (这里有一个原则读者需要注意,对PCIe设备配置空间访问时,一定要确定总线号、设备号、功能号、寄存器,不然无法找到设备)

5)         读写BAR0确定PCIe设备1空间大小

6)         分配PCIe地址

PCIE典型结构拓扑

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

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

相关文章

【LeetCode热题100】--11.盛最多水的容器

11.盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 **说明:*…

【线下培训】上海临港: RT-Thread × 瑞萨 工业监视器 RA6M3 HMI Board解决方案

注册RT-Thread官方论坛,即可第一时间获得最新消息!更有大量活动赚取积分,免费兑换开发板! 注册地址:https://www.rt-thread.org/account/user/register.html RT-Thread 与瑞萨将于10月14日在上海临港举行一场线下培训…

java_web的框架分析

文章目录 本阶段技术体系用项目理解原理controllersClassPathXmlApplicationContextDispatcherServletFruitServiceImplFilter 本阶段技术体系 用项目理解原理 项目的目录 首先设置一个参数,这里里面用反射机制,获取方法的时候如果不设置会获取到arg[0…

AI绘画关键词:小龙女

a lady dressed in a white gown stand beside a dragon, in the style of peter gric, traditional essence, kazuki takamatsu, andreas rocha, life-like avian illustrations, serene faces, aurorapunk,3D --ar 9:16 --s 250 --v 5.2

浅述数据中心供配电系统解决方案及产品选型

安科瑞 华楠 【摘 要】现如今,社会主要领域已从对单个设备的关注转化为对于系统解决方案的关注,数据中心的供应商们也想尽办法去满足所面对的各方面需求。基于此,主要提出了云计算数据中心供配电解决方案,同时还对数据中心供配电…

中小型教育机构这样做,让你轻松抓住受众注意力

教育一直都是家长对于孩子最关心的事情,对于部分家庭来说,教育支出占整个家庭支出的50%左右。 而软文作为目前效果比较明显而且性价高的推广方式,也很适合教育培训行业,因为它能让潜在客户可以清楚地了解产品的特性,感…

乐观善良的属马人,这几年的运势怎么样?

生肖马的人是一个乐观向上,拥有对生活的热情态度,更是个实打实过日子的人, 品性善良,对朋友尽心尽力,在朋友的面前没有丝毫的不真诚, 且乐于助人,因此朋友多,贵人也多。 属马人精力充…

LED智能家居灯 开关调光 台灯落地灯控制驱动 降压恒流IC AP5191

产品描述 AP5191是一款PWM工作模式,高效率、外围简单、内置功率MOS管,适用于4.5-150V输入的高精度降压LED恒流驱动芯片。输出最大功率150W,最大电流6A。AP5191可实现线性调光和PWM调光,线性调光脚有效电压范围0.55-2.6V.AP5191 工作频率可以…

热烈祝贺金伯帆集团成功入选航天系统采购供应商库

经过航天系统采购平台的严审,上海金伯帆信息科技集团有限公司成功入选中国航天系统采购供应商库。航天系统采购平台是航天系统内企业采购专用平台,服务航天全球范围千亿采购需求,目前,已有华为、三一重工、格力电器、科大讯飞等企…

景联文科技:数据供应商在新一轮AI热潮中的重要性

景联文科技是AI基础行业的头部数据供应商,可协助人工智能企业解决整个人工智能链条中数据标注环节的相对应问题。 随着全球新一轮AI热潮来袭,大量训练数据已成为推动AI算法模型进步和演化的不可或缺的重要因素。数据的质量和数量直接影响了模型训练和性能…

C++QT 作业8

#include "mywind.h" #include "ui_mywind.h" #include <iostream> #include <QIcon> #include <QLabel> #include <QLineEdit> #include <QDebug>//信息调试类 用于输出数据 Mywind::Mywind(QWidget *parent): QWidget(pa…

Sectigo https证书

Sectigo&#xff08;前身为ComodoCA&#xff09;是全球在线安全解决方案提供商和全球最大的证书颁发机构。Sectigo为全球超过300万客户提供服务&#xff0c;并稳居SSL市场份额榜首。 其成功建立在两个关键要素之上&#xff1a;灵活的SSL产品范围和实惠的价格。Sectigo是第一家…

测试域: 流量回放-介绍篇

建设背景 测试人员回归耗时长&#xff0c;成本大。公司很多测试都进行手工测试&#xff0c;在集成测试中需要耗费一周时间进行全量测试&#xff0c;在各个环境(用户测试环境和预发布环境)回归测试时需要耗费三天左右。加上编写测试用例时间&#xff0c;理解需求时间等其他&…

学习vue3源码

&#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 1. 为什么要学习源码 阅读优秀的代码的目的是让我们能够写出优秀的代码 不给自己设限&#xff0c;不要让你周围人…

C++——模板,template

函数模板 我们经常会遇到一种情况&#xff1a;用相同的方法处理不同的数据。对于是函数&#xff0c;我们可以用函数重载来解决。虽然重载可以解决这种情况&#xff0c;但还是很繁琐。如果函数重载10次&#xff0c;有一天你突然发现有新的需求&#xff0c;函数需要修改&#xf…

Linux CentOS7 tree命令

tree就是树&#xff0c;是文件或文件名输出到控制台的一种显示形式。 tree命令作用&#xff1a;以树状图列出目录的内容&#xff0c;包括文件、子目录及子目录中的文件和目录等。 我们使用ll命令显示只能显示一个层级的普通文件和目录的名称。而使用tree则可以树的形式将指定…

管理类联考——数学——汇总篇——知识点突破——代数——等比数列——性质

下标和定理 在等比数列中&#xff0c;若 m &#xff0b; n p q ( m &#xff0c; n &#xff0c; p &#xff0c; q ∈ N &#xff0b; ) m&#xff0b;npq(m&#xff0c;n&#xff0c;p&#xff0c;q∈N_&#xff0b;) m&#xff0b;npq(m&#xff0c;n&#xff0c;p&#x…

面经学习三

目录 Java 与 C 的区别 面向对象和面向过程的区别 面向对象特性 Java的基本数据类型 深拷贝和浅拷贝 Java创建对象的几种方式 final, finally, finalize 的区别 Java 与 C 的区别 Java 是纯粹的面向对象语言&#xff0c;所有的对象都继承自 java.lang.Object&#xff0c…

mybatis学习记录(三)-----关于SQL Mapper的namespace

关于SQL Mapper的namespace 视频总结笔记&#xff1a; 在SQL Mapper配置文件中<mapper>标签的namespace属性可以翻译为命名空间&#xff0c;这个命名空间主要是为了防止SQL id 冲突的。 创建CarMapper2.xml文件&#xff0c;代码如下&#xff1a; CarMapper2.xml: <?…

天机学堂项目微服务架构实战

1.学习背景 各位同学大家好&#xff0c;经过前面的学习我们已经掌握了《微服务架构》的核心技术栈。相信大家也体会到了微服务架构相对于项目一的单体架构要复杂很多&#xff0c;你的脑袋里也会有很多的问号&#xff1a; 微服务架构该如何拆分&#xff1f;到了公司中我需要自己…