0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

分析一下PortB的Header中的Base & Limit寄存器

SwM2_ChinaAET 来源:未知 作者:李倩 2018-05-11 09:42 次阅读

上一篇文章介绍了Type0型配置空间Header中的BAR的作用和用法,但是PCIe中的桥设备(Switch和Root中的P2P)又是如何判断某一请求(Request)是否属于自己或者自己的分支下的设备的呢?这实际上是通过Type1型配置空间Header中的Base和Limit寄存器来实现的,这篇文章来进行简单地介绍一下。

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

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寄存器也需要做出对应的改变。

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

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

P-MMIO Base & Limit

NP-MMIO Base & Limit

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

IO Base & Limit

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

Unused Base and Limit Registers

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

注:Mindshare的书这个地方似乎写错了,以PCIe Spec为准。

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    30

    文章

    5020

    浏览量

    117628
  • PCIe
    +关注

    关注

    13

    文章

    1079

    浏览量

    80740

原文标题:【博文连载】PCIe扫盲——Base & Limit寄存器详解

文章出处:【微信号:ChinaAET,微信公众号:电子技术应用ChinaAET】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    MDK寄存器地址名称映射分析

    之所以要讲解这部分知识,是因为经常会遇到客户提到不明白MDK那些结构体是怎么与寄存器地址对应起来的。这里我们就做个简要的分析吧。 首先我们看看51
    发表于 01-26 14:39

    MDK寄存器地址名称映射分析

    寄存器地址映像表可以查到。 那么在结构体里面这些寄存器又是怎么与地址一一对应的呢?这里涉及到结构体成员变量地址对齐方式方面的知识,这方面的知识大家可以在网上查看相关资料复习一下,这
    发表于 04-17 11:51

    请问GPIOB_BASE指的是GPIOB端口寄存器的“基础地址”吗?

    请教一下,STM32指南里在介绍GPIOx_ODR时,提到的地址偏移是啥意思呢?GPIOB_BASE指的是GPIOB端口寄存器的“基础地址”吗?求解释
    发表于 10-23 04:35

    MDK寄存器地址名称映射分析

    文章目录.MDK 寄存器地址名称映射分析二.定时1.1.MDK
    发表于 08-20 08:16

    各位大神,请教一下,怎么清空移位寄存器的数据

    各位大神,请教一下,怎么清空移位寄存器的数据,我想点击一下清空,然后清空输出数组,现在不知道怎么清空移位寄存器里的数据
    发表于 10-08 17:08

    分析一下STM32相应的寄存器

    解析上报,辅助我们进行诊断故障的来源,可能是程序到死循环,可能是程序hardfault,也可能硬件电源不稳定导致的复位。综合上面的要求,我们分析一下STM32相应的寄存器,以及讲解相关函数使用方法...
    发表于 11-26 08:00

    寄存器是怎么封装的呢

    最近对嵌入式的地址有了更深入的认识,简单记录一下。以STM32F103为例,在寄存器模板我们都知道只要对寄存器简单地进行赋值就可以完成流
    发表于 01-20 07:06

    探讨一下ARM处理的CPSR寄存器

    ARM处理,有寄存器,叫CPSR,保存了当前的处理状态。但在ARMv8,AArch64(以下简称A64)和AArch32(以下简称
    发表于 04-01 15:17

    分享一下ARM接口寄存器的配置步骤

    串口使用1、会看电路图2、分析电路结构//清楚器件和控制的工作原理3、查芯片手册,操作寄存器uartrx -》 GPA1_0tx -》 GPA1_1 CH2寄存器配置1、配置GPIO
    发表于 04-26 14:24

    简单研究一下Armv8-A的AArch64寄存器

    的指令系统主要是寄存器-寄存器型。说了这么多,就是想强调一下在Armv8-A寄存器的重要性。在AArch64应用级角度,
    发表于 09-20 14:54

    如何在裸机层设置寄存器

    = period[flag]; HAL_TIM_Base_Init(&htim1);因为通过所有宏来重新初始化寄存器似乎很愚蠢。有人能告诉我更新寄存器本身的语法是什么吗?
    发表于 01-04 08:43

    寄存器,寄存器是什么意思

    寄存器,寄存器是什么意思 寄存器定义  寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用
    发表于 03-08 14:26 2.1w次阅读

    如何使用寄存器级读&写控制基于PXI平台的FPGA

    如何使用寄存器级读&写控制基于PXI平台的FPGA
    发表于 10-19 08:48 12次下载

    寄存器位操作记录

    num &= ~(1
    发表于 01-13 13:55 3次下载
    <b class='flag-5'>寄存器</b>位操作记录

    寄存器reg &amp;= ~1 位与操作的问题

    ~1的值为 1111 1110此时与一个寄存器 &amp; ,确实可以将第 0 位清零,且确保[7:1]位不变。但是如果该寄存器超过8位,比如16位,``那么在做位与操作时 ~1 会被在前自动补0,此时 ~...
    发表于 01-13 14:06 0次下载
    <b class='flag-5'>寄存器</b>reg &<b class='flag-5'>amp</b>;= ~1 位与操作的问题