PCIE学习(2)PCIE配置空间详解

文章目录

  • 前言
  • 一、配置空间header
  • 二、Base Address register(BAR)
    • 2.1、BAR是干什么的
    • 2.2、具体实现过程
      • BAR示例1——32bit内存地址空间请求
      • BAR示例2——64bit内存地址空间请求

前言

图片来自:https://zhuanlan.zhihu.com/p/463518877
在这里插入图片描述

一、配置空间header

参考:http://www.ssdfans.com/?p=8210

每个PCIe设备,有这么一段空间,Host软件可以读取它获得该设备的一些信息,也可以通过它来配置该设备,这段空间就叫做PCIe的配置空间。不同于每个设备的其它空间,PCIe设备的配置空间是协议规定好的,哪个地方放什么内容,都是有定义的。PCI或者PCI-X时代就有配置空间的概念。

整个配置空间就是一系列寄存器的集合,其中Type 0是Endpoint的配置,Type 1是Bridge(PCIe时代就是Switch)的配置,都由两部分组成:64 Bytes的Header+192Bytes的Capability结构,后者是设备告诉Host它的一些特殊功能。
进入PCIe时代,PCIe能耐更大,192 Bytes不足以罗列它的内容。为了保持后向兼容,整个配置空间由256 Bytes扩展成4KB,前面256 Bytes保持不变。

着重看一下Type 1的header:
在这里插入图片描述
Device ID: 只读;设备 ID。

Vendor ID: 只读;厂商 ID。如 Intel 的为 0X8086。

Status: 16 位状态寄存器。

Command: 16 位命令寄存器

Class Code: 此字段用于区分 PCI-E 设备属于什么类型设备,如网卡,显卡等

Revision ID: 只读;程序版本号

BIST: 自测

Header type: PCI-E 头类型寄存器

  • 0bit~6bit: 0-EP;1-Switch; 2-CardBus
  • 7bit: 0-单功能设备; 1-多功能设备

Lantency Timer: PCI-E 无意义

Cache line size: PCI-E 无意义

Base Address register: 扩展空间的基址寄存器

Expansion ROM Base Address: 扩展 ROM 地址

二、Base Address register(BAR)

2.1、BAR是干什么的

对Endpoint Configuration(Type 0),提供了最多6个BAR,而对Switch(Type 1)来说,只有2个。BAR是干什么用的?

每个PCIe设备,都有自己的内部空间,这部分空间如果开放给Host(软件或者CPU)访问,那么Host怎样才能往这部分空间写入数据,或者读数据呢?CPU只能直接访问Host内存(Memory)空间(或者IO空间,我们不考虑),不能对PCIe等外设直接操作。此时就需要Root Complex,RC。RC可以为CPU分忧。

具体解决办法是:CPU如果想访问某个设备的空间,由于它不能亲自跟那些PCIe外设打交道,因此叫RC去办。比如,如果CPU想读PCIe外设的数据,先叫RC通过TLP把数据从PCIe外设读到Host内存,然后CPU从Host内存读数据;如果CPU要往外设写数据,则先把数据在内存中准备好,然后叫RC通过TLP写入到PCIe设备。

2.2、具体实现过程

具体实现就是上电的时候,系统把PCIe设备开放的空间(系统软件可见)映射到内存空间,CPU要访问该PCIe设备空间,只需访问对应的内存空间。RC检查该内存地址,如果发现该内存空间地址是某个PCIe设备空间的映射,就会触发其产生TLP,去访问对应的PCIe设备,读取或者写入PCIe设备。

一个PCIe设备,可能有若干个内部空间(属性可能不一样,比如有些可预读,有些不可预读)需要映射到内存空间,设备出厂时,这些空间的大小和属性都写在Configuration BAR寄存器里面,然后上电后,系统软件读取这些BAR,分别为其分配对应的系统内存空间,并把相应的内存基地址写回到BAR。(BAR的地址其实是PCI总线域的地址,CPU访问的是存储器域的地址,CPU访问PCIe设备时,需要把总线域地址转换成存储器域的地址。)

BAR示例1——32bit内存地址空间请求

参考:https://zhuanlan.zhihu.com/p/463518877
下图展示了设置建立一个BAR的基础步骤,在本例中,要请求一个4KB大小的不可预取内存(NP-MMIO,non-prefetchable memory)。在图中,展示了BAR在配置过程中的三个节点:

  1. 在图中的(1)当中,我们可以看到BAR处于未初始化的状态。设备的设计者已经将低位bit固定为一个数值,来指示需要的memory的大小和类型,但是高位bit(可写可读的)则仍然是用X来表示,这代表它们的值还未知。系统软件将会首先把每个BAR都通过配置写操作来将可写入的bit写为全1(当然,被固定的低位bit不会受到配置写操作的影响)。在下图的(2)中展示的BAR就是处于第二阶段的样子,除了被固定的低位bit以外,所有的bit都被写为1。
    写为全1这个操作是为了确定最低位的可写入的bit(least-significant writable bit)是哪一位,这个bit的位置指示了需要被请求的地址空间的大小。在本例中,最低位的可写入的bit为bit 12,因此这个BAR需要请求2的12次方(或者说是4KB)的地址空间。如果最低位的可写入的bit为bit 20,那么这个BAR就要请求2的20次方(1MB)的地址空间。

  2. 在软件将BARs中所有可写bit都写为1后,软件将从BAR0开始,依次读取每个BAR的数值,以此来确定各个BAR要请求的地址空间的大小和类型。下标中总结了本例中对BAR0进行配置读的结果。

  3. 这个过程中的最后一步就是系统软件为BAR 0分配一个地址范围,因为对于软件来说现在已经知道了BAR 0请求的地址空间的大小和类型。下图的(3)中展示了BAR处于第三阶段的样子,此时系统软件已经将一块地址区域的起始地址写入了BAR 0中。在本例中,这个起始地址为F900_0000h。

到这里为止,对BAR 0的配置就完成了。一旦软件启用了命令寄存器(Command register,偏移地址04h)中的内存地址译码(memory address decoding),那么这个设备就会接受所有地址在F900_0000h-F900_0FFFh(4KB大小)范围内的memory请求。
在这里插入图片描述
在这里插入图片描述

BAR示例2——64bit内存地址空间请求

在上一个例子中,我们看到了通过BAR 0来请求不可预取内存地址空间(NP-MMIO)。在当前的例子中,如图 4‑5所示,BAR 1和BAR 2被用来请求一块64MB的可预取内存地址空间。这里使用了两个连续相连的BAR是因为这个设备支持这个内存地址空间的请求使用64bit地址,这意味着如果需要的话,软件给它分配的地址空间可以超过4GB地址边界(并非必要)。由于地址可以是64bit位宽,因此必须将两个连续相连的BAR一起使用。
在这里插入图片描述

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

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

相关文章

ubuntu配置多版本cuda+cudnn环境,及版本切换方法

ubuntu配置多版本cudacudnn环境,及版本切换方法 环境如下: ubuntu 22.04cuda v11.8cudnn v8.9.7 文章目录 ubuntu配置多版本cudacudnn环境,及版本切换方法1.安装Nvidia显卡驱动1.1卸载默认的驱动nouveau1.2安装nvidia驱动 2.安装cuda3.安装…

分布式与一致性协议之MySQL XA协议

MySQL XA协议 概述 相信很多人都知道MySQL支持单机事务,那么在分布式系统中,涉及多个节点,MySQL又是怎样实现分布式事务的呢? 举个例子,一个业务系统需要接收来自外部的指令,然后访问多个内部其他系统来执…

Pycharm无法链接服务器环境(host is unresponsived)

困扰了很久的一个问题,一开始是在服务器ubuntu20.04上安装pycharm community,直接运行服务器上的pycharm community就识别不了anaconda中的环境 后来改用pycharm professional也无法远程连接上服务器的环境,识别不了服务器上的环境&#xff…

【Web后端】web后端开发简介_Servlet简介

1.web后端开发简介 Java企业级开发,也就是学习]avaEE(Enterprise Edition)版本,是一种结构和一套标准。在应用中开发的标准就是Servlet、jsp和JavaBean技术。jsp技术现在已基本处于淘汰状态,简单了解即可web后端开发,基于B/S模式的开发体系。…

雷蛇笔记本数据丢失怎么恢复?提供详细指南

在数字化时代,笔记本电脑已成为我们日常生活和工作中不可或缺的一部分。然而,尽管技术不断进步,数据丢失的风险仍然存在。雷蛇(Razer)作为一家知名的电脑硬件制造商,其笔记本电脑也难免会遇到这样的问题。当…

【数学】泰勒公式

目录 引言 一、泰勒公式 1.泰勒公式及推导 (1)推导 (2)公式 2.泰勒中值定理 (1)定理1(佩亚诺余项) (2)定理2(拉格朗日余项) …

接口自动化框架篇:使用python连接数据库 - PySQL介绍!

PySQL介绍:使用Python连接数据库的接口自动化框架 在接口自动化测试中,经常需要使用数据库来操作测试数据,验证接口返回的数据是否正确。Python是一种功能强大的编程语言,可以轻松地连接数据库,并进行各种数据库操作。…

每天五分钟深度学习:数学中的极值

本文重点 在数学领域中,极值是一个极其重要的概念,它不仅在纯数学理论研究中占据核心地位,而且在工程、物理、经济等实际应用领域也发挥着不可替代的作用。极值问题涉及函数的最大值和最小值,是微积分学中的一个基本问题。本文旨在详细介绍数学中的极值概念、性质、求解方…

【Vulhub靶场】Nginx 中间件漏洞复现

【Vulhub靶场】Nginx 中间件漏洞复现 一、Nginx 文件名逻辑漏洞(CVE-2013-4547)1. 影响版本2. 漏洞原理3. 漏洞复现 二、Nginx越界读取缓存漏洞(CVE-2017-7529)1. 漏洞详情2. 影响版本3. 漏洞复现 三、Nginx 配置错误导致漏洞&…

Spring JdbcTemplate实现自定义动态sql拼接功能

需求描述: sql 需要能满足支持动态拼接,包含 查询字段、查询表、关联表、查询条件、关联表的查询条件、排序、分组、去重等 实现步骤: 1,创建表及导入测试数据 CREATE TABLE YES_DEV.T11 (ID BINARY_BIGINT NOT NULL,NAME VARCH…

非模块化 Vue 开发的 bus 总线通信

个人感觉,JavaScript 非模块开发更适合新人上手,不需要安装配置一大堆软件环境,不需要编译,适合于中小项目开发,只需要一个代码编辑器即可开发,例如 vsCode。网页 html 文件通过 script 标签引入 JavaScrip…

使用Matplotlib绘制正弦和余弦函数曲线

前言 在数据可视化领域,Matplotlib是一个功能强大的Python库,它允许用户创建各种静态、交互式和动画图形。本文将引导您通过一个简单的示例,学习如何使用Matplotlib绘制正弦和余弦函数曲线。 第一步:导入必要的库: …

【漫画版】指挥官的排序战术:快速排序算法解密

作者介绍:10年大厂数据\经营分析经验,现任字节跳动数据部门负责人。 会一些的技术:数据分析、算法、SQL、大数据相关、python,欢迎探讨交流 欢迎加入社区:码上找工作 作者专栏每日更新: LeetCode解锁1000题…

基于自我对弈框架的偏好优化算法SPPO

传统的从人类反馈中进行强化学习(RLHF)的方法仰赖如Bradley-Terry模型等参数模型,但这样的模型难以充分捕捉人类偏好中的非递移性和非理性。最新的研究进展显示,直接使用偏好机率可以更准确地反映人类偏好,从而实现更灵活、更精确的语言模型对齐。本文提…

教你解决PUBG绝地求生登不进去 无法进入游戏 启动很慢的问题

尽管《绝地求生》(PUBG)以它那扣人心弦的战术竞技和逼真模拟的战场氛围风靡全球,揽获无数玩家的喜爱,但一些玩家在经历了一场血脉喷张的生存较量后,却不得不面对一个不那么愉悦的后续:游戏在结算阶段后出现…

YOLOv5改进 | 注意力机制 | 理解全局和局部信息的SE注意力机制

在深度学习目标检测领域,YOLOv5成为了备受关注的模型之一。本文给大家带来的是能够理解全局和局部信息的SE注意力机制。文章在介绍主要的原理后,将手把手教学如何进行模块的代码添加和修改,并将修改后的完整代码放在文章的最后,方…

C语言/数据结构——每日一题(分割链表)

一.前言 今天在LeetCode觉得很不错,想和大家们一起分享这道链表题——分割链表:https://leetcode.cn/problems/partition-list-lcci废话不多说,让我们直接进入正题吧。 二.正文 1.1题目描述 1.2题目分析 大致思路:我们可以通过…

从头开始的建材类电商小程序开发指南

在当今数字化时代,小程序已经成为了许多企业推广和销售的重要渠道。对于建筑材料行业来说,开发一个属于自己的小程序商城不仅可以提升产品曝光度,还可以提供更好的用户购物体验。下面,我们将逐步教你如何开发建筑材料行业小程序。…

文章分享:《肿瘤DNA甲基化标志物检测及临床应用专家共识(2024版)》

本文摘自于《肿瘤DNA甲基化标志物检测及临床应用专家共识(2024版)》 目录 1. DNA甲基化标志物概述 2 DNA甲基化标志物的临床检测 2.1 临床样本前处理注意事项 2.2 DNA甲基化标志物检测技术方法 2.2.1 DNA提取与纯化 2.2.2 DNA转化 2.2.3 DNA 甲基…

翻工第二次 Ant Design Pro 下载,发现问题,电脑网络配置有误,魔法了

一、相关网址链接 鱼皮的用户中心项目 (前端Ant Design Pro构建) 语雀 ## 没有选择umi版本这一步 Issue #11144 ant-design/ant-design-pro GitHub 关于umi ui图标未显示问题_umi ui不出现-CSDN博客 二、存在问题 导致下载速度慢 本人镜像代码写…