首页 > 其他分享 >PCIe扫盲——Base & Limit寄存器详解

PCIe扫盲——Base & Limit寄存器详解

时间:2025-01-05 12:32:58浏览次数:1  
标签:Header MMIO PCIe Base Limit IO 寄存器

上一篇文章介绍了Type0型配置空间Header中的BAR的作用和用法,但是PCIe中的桥设备(Switch和Root中的P2P)又是如何判断某一请求(Request)是否属于自己或者自己的分支下的设备的呢?(定义范围)

这实际上是通过Type1型配置空间Header中的Base和Limit寄存器来实现的,这篇文章来进行简单地介绍一下。

Base和Limit寄存器在Type1 Header中的位置如下图所示:

image

Base和Limit寄存器分别确定了其所有分支下设备(The device that live beneath this bridge)的地址的起始和结束地址。根据请求类型的不同,分别对应不同的Limit&Base组合:

  • Prefetchable Memory Space(P-MMIO)

  • Non- Prefetchable Memory Space(NP-MMIO)

  • IO Space(IO)

一旦该桥分支下面的任意设备的BAR发生改变,该桥的Base&Limit寄存器也需要做出对应的改变。

下面以一个简单的例子,来分析一下:

image

如上图所示,连接到Switch的PortB上的PCIe Endpoint分别配置了NP-MMIO、P-MMIO和IO空间。下面来简单地分析一下PortB的Header中的Base & Limit 寄存器。

P-MMIO Base & Limit

image

NP-MMIO Base & Limit

image

需要注意的是,Endpoint的需要的NP-MMIO的大小明明只有4KB,PortB的Header却给其1MB的空间(最小1MB),也就是说剩余的空间都将会被浪费掉,并且其他的Endpoint都将无法使用这一空间。

IO Base & Limit

image

注:IO空间可分配的最小值为4KB,最大值则取决于操作系统和BIOS。

Unused Base and Limit Registers

很多情况下,我们并不需要所有的地址空间类型,比如所在某一个Endpoint中没有使用IO Space。此时,其对应的桥的Header会把Base的地址设置为大于Limit的地址,也就是把地址范围设置为无效。

一个完整的例子如下图所示:

image

标签:Header,MMIO,PCIe,Base,Limit,IO,寄存器
From: https://www.cnblogs.com/linhaostudy/p/18653263

相关文章

  • ORB-SLAM3源码学习: KeyFrameDatabase.cc: KeyFrameDatabase::DetectNBestCandidates找
    前言ORB-SLAM3支持多地图系统,因此引进了地图融合线程。地图融合线程会检测活跃地图和整个地图集是否存在共同区域,如果检测到共同区域发生在当前关键帧和活跃地图中,则执行闭环操作,如果检测到共同区域发生在当前帧和非活跃地图中,则执行地图融合操作。如果同时检测到闭环和地图......
  • C# execute store procedure with in parameter,connection timeout 0 indicates no l
    //spusemydb;CREATEPROCEDUREInsertIntoMtSpInStarEnd@StartIdint=1,@EndIdint=2021474638ASBEGINWHILE@StartId<=@EndIdBEGINDECLARE@Authorvarchar(100)='Author'+CAST(@StartIdASVARCHAR(10));DECLARE@Co......
  • 【base64算法】实战
    可以以ASCII码表示二进制数据,base64可以将二进制数据用64个字符表示,编码后的字符主要是64个字符位数不足用=补齐使用base64加密cmd.exe#include<winsock2.h>#include<stdio.h>#include<string.h>#include<stdlib.h>#include<wchar.h>#include<wincrypt.h>#pragmac......
  • 如何使用建筑物变化检测算法的Baseline工程 ,使用PyTorch框架,并选择U-Net来进行二分类
    建筑物变化检测算法baseline工程使用PyTorch框架,并选择U-Net来进行二分类任务(变化/不变)Baseline工程将基于深度学习方法来检测建筑物的变化备注:博客所有文章代码仅供参考!如何使用建筑物变化检测算法的Baseline工程,一个详细的步骤和代码示例。这个Baseline工程将基于深......
  • 使用学生优惠创建 Azure Database for MySQL 数据库
    前言在此之前,你需要拥有一个已通过学生认证的Azure账户。关于通过Azure学生认证,网上已有大量教程,此处不再赘述。前些日子认证通过了Azure的学生认证,在部署此网站时发现Azure的B1s服务器用来部署网站同时部署数据库会出现内存不足的情况,同时想到Azure还为学生用户提......
  • PCIe扫盲——基地址寄存器(BAR)详解
    基地址寄存器(BAR)在配置空间(ConfigurationSpace)中的位置如下图所示:其中Type0Header最多有6个BAR,而Type1Header最多有两个BAR。这就意味着,对于Endpoint来说,最多可以拥有6个不同的地址空间。但是实际应用中基本上不会用到6个,通常1~3个BAR比较常见。主要注意的是,如果某个设备的B......
  • MySQL索引优化-Count优化、limit优化、Update优化
    一、limit优化这里我有一张表tb_sku里面有400w条数据,以这个表作为案例对象在数据量比较大时,如果进行 limit 分页查询,在查询时,越往后,分页查询效率越低。我们一起来看看执行 limit 分页查询耗时对比:1. 未优化案例(1)查询起始索引0后面10条记录select*fromtb_skuli......
  • Supabase 和 pgvector 的集成使用指南
    老铁们,今天咱们来聊聊使用Supabase和pgvector搭建自己的向量存储,这个技术点其实不难。Supabase是一个开放源码的Firebase替代品,构建在PostgreSQL之上。PostgreSQL,或称Postgres,是一个强调可扩展性和SQL合规的免费开源关系数据库管理系统(RDBMS)。在这个教程中,我......
  • 【YashanDB知识库】YAS-02507 base incremental backup set does not exist
    本文内容来自YashanDB官网,原文内容请见https://www.yashandb.com/newsinfo/7849016.html?templateId=1718516【标题】错误码处理【问题分类】执行数据库备份命令时报错【关键字】YAS-02507【问题描述】执行BACKUPDATABASEINCREMENTALLEVEL1format'/data/yasdb_back/bac......
  • NocoBase 本周更新汇总:优化及缺陷修复
    汇总一周产品更新日志,最新发布可以前往我们的博客查看。NocoBase目前更新包括的版本更新包括三个分支:main,next和develop。main:截止目前最稳定的版本,推荐安装此版本。next:包含即将发布的新功能,经过初步测试的版本,可能存在部分已知或未知问题。主要面向测试用户,用于收集反......