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

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

3天内不再提示

PCI总线地址空间与系统地址空间的关系

FPGA设计论坛 来源:未知 2023-01-06 08:30 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1、PCI地址空间

PCI总线具有32位数据/地址复用总线,所以其存储地址空间为2的32次方=4GB。也就是PCI上的所有设备共同映射到这4GB上,每个PCI设备占用唯一的一段PCI地址,以便于PCI总线统一寻址。每个PCI设备通过PCI寄存器中的基地址寄存器来指定映射的首地址。PCI地址空间对应于计算机系统结构中的PCI总线。

3f58cd06-8d59-11ed-bfe3-dac502259ad0.png

2、系统地址空间

如果处理器具有32位的地址总线,其理论可寻址空间为2的32次方=4GB。但这并不意味着内存就可以4GB大小,其实XP系统最大内存大约为2GB,这与CPU访问系统中其它设备的存储器方式有关(比如CPU访问PCI总线上的存储器)。

计算机系统中在不同的物理位置上存在着不同设备,不同的设备又各自具有存储器,那么CPU如何访问这些存储器呢?CPU把系统中各个设备的存储空间映射到一个统一的存储空间上,称为系统存储空间共4GB,这样CPU就可以访问到所有的存储器。比如PCI存储器映射到从0xFFF80000开始的地址空间,显卡映射到0XFFF00000,再加上操作系统会占用一些空间,就只剩下不到2G能真正分配给物理内存了。(具体数值是为解释需要取的任意值,不代表真实情况)

系统地址空间对应于计算机系统结构中的前端总线(FSB)。

3f5e88ea-8d59-11ed-bfe3-dac502259ad0.png3、PCI总线地址与系统存储空间转换映射

我们假设在一个32位处理器中,其存储器域的0xF000-0000~0xF7FF-FFFF(128MB)这段物理地址空间与PCI总线的地址空间存在映射关系。

当处理器访问这段存储器地址空间时,HOST主桥将会认领这个存储器访问,并将这个存储器访问使用的物理地址空间转换为PCI总线地址空间,并与0x7000-0000~0x77FF-FFFF这段PCI总线地址空间对应。

为简化起见,我们假定在存储器域中只映射了PCI设备的存储器地址空间,而不映射PCI设备的I/O地址空间。而PCI设备的BAR空间使用0x7000-0000~0x77FF-FFFF这段PCI总线域的存储器地址空间。

3f6e0e1e-8d59-11ed-bfe3-dac502259ad0.png

PCI桥的Base、Limit寄存器保存“该桥所管理的PCI子树”的存储器或者I/O空间的基地址和长度。值得注意的是,PCI桥也是PCI总线上的一个设备,在其配置空间中也有BAR寄存器,本节不对PCI桥BAR寄存器进行说明,因为在多数情况下透明桥并不使用其内部的BAR寄存器。下文以图3‑2所示的处理器系统为例说明上述寄存器的初始化过程,该处理器系统使用的存储器域与PCI总线域的映射关系如图3‑1所示。

3f8071b2-8d59-11ed-bfe3-dac502259ad0.png

注意观察上图中PCI设备的BAR0寄存器值,如果PCI设备向下级联了(相当于PCI桥),BAR0是不变的,而且LIMIT寄存器受PCI未继续级联(而是直接接了PCI设备)的BAR0影响。

PCI设备的BAR寄存器中,包含该设备使用的PCI总线域的地址范围。在PCI设备的配置空间中共有6BAR寄存器,因此一个PCI设备最多可以使用632位的PCI总线地址空间,或者364位的PCI总线地址空间。这些BAR空间可以保存PCI总线域的存储器地址空间或者I/O地址空间,目前多数PCI设备仅使用存储器地址空间。而在通常情况下,一个PCI设备使用23BAR寄存器就足够了。

为简化起见,我们首先假定在图3‑2中所示的PCI总线树中,所有PCI Agent设备只使用了BAR0寄存器,其申请的数据空间大小为16M字节(即0x1000000字节)而且不可预读,而且PCI桥不占用PCI总线地址空间,即PCI桥不含有BAR空间。并且假定当前HOST主桥已经完成了对PCI总线树的编号。

根据以上假设,系统软件该PCI总线树的遍历过程如下所示。

(1)系统软件根据DFS算法,系统软件率先寻找到第一组PCI设备,分别为PCI设备31和PCI设备32[1],并根据这两个PCI设备需要的PCI空间大小,从PCI总线地址空间中(0x7000-0000~0x77FF-FFFF)为这两个PCI设备的BAR0寄存器分配基地址,分别为0x7000-0000和0x7100-0000。

(2)当系统软件完成PCI总线3下所有设备的BAR空间的分配后,将初始化PCI桥3的配置空间。这个桥片的Memory Base寄存器保存其下所有PCI设备使用的“PCI总线域地址空间的基地址”,而Memory Limit寄存器保存其下PCI设备使用的“PCI总线域地址空间的大小”。系统软件将Memory Base寄存器赋值为0x7000-0000,而将Memory Limit寄存器赋值为0x200-0000。

(3)系统软件回朔到PCI总线2,并找到PCI总线2上的PCI设备21,并将PCI设备21的BAR0寄存器赋值为0x7200-0000。

(4)完成PCI总线2的遍历后,系统软件初始化PCI桥2的配置寄存器,将Memory Base寄存器赋值为0x7000-0000,Memory Limit寄存器赋值为0x300-0000。

(5)系统软件回朔到PCI总线1,并找到PCI设备11,并将这个设备的BAR0寄存器赋值为0x7300-0000。并将PCI桥1的Memory Base寄存器赋值为0x7000-0000,Memory Limit寄存器赋值为0x400-0000。

(6)系统软件回朔到PCI总线0,并在这条总线上发现另外一个PCI桥,即PCI桥4。并使用DFS算法继续遍历PCI桥4。首先系统软件将遍历PCI总线4,并发现PCI设备41和PCI设备42,并将这两个PCI设备的BAR0寄存器分别赋值为0x7400-0000和0x7500-0000。

(7)系统软件初始化PCI桥4的配置寄存器,将Memory Base寄存器赋值为0x7400-0000,Memory Limit寄存器赋值为0x200-0000。系统软件再次回到PCI总线0,这一次系统软件没有发现新的PCI桥,于是将初始化这条总线上的所有PCI设备。

(8) PCI总线0上只有一个PCI设备,PCI设备01。系统软件将这个设备的BAR0寄存器赋值为0x7600-0000,并结束整个DFS遍历过程。

3f947338-8d59-11ed-bfe3-dac502259ad0.jpg

精彩推荐 至芯科技12年不忘初心、再度起航12月17日北京中心FPGA工程师就业班开课、线上线下多维教学、欢迎咨询! 至芯科技精品寒假班来袭,1月7号线上授课,欢迎广大学子,电子爱好者前来学习! FPGA学习-IO延迟的约束方法 关于数字信号处理中的降采样扫码加微信邀请您加入FPGA学习交流群

3f9a7490-8d59-11ed-bfe3-dac502259ad0.jpg3fa1d74e-8d59-11ed-bfe3-dac502259ad0.png

欢迎加入至芯科技FPGA微信学习交流群,这里有一群优秀的FPGA工程师、学生、老师、这里FPGA技术交流学习氛围浓厚、相互分享、相互帮助、叫上小伙伴一起加入吧!

点个在看你最好看


原文标题:PCI总线地址空间与系统地址空间的关系

文章出处:【微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。


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

    关注

    1656

    文章

    22292

    浏览量

    630405

原文标题:PCI总线地址空间与系统地址空间的关系

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    请问e203定义的地址空间是虚拟地址还是物理地址

    蜂鸟e203实现的是物理地址,硬件端与软件端的地址分配相同,从而确定软件开发过程中能操作底层寄存器。 硬件端:在总线分发模块sirv_icb1to16_bus定义好各个端口寄存器的地址
    发表于 11-11 06:20

    通过sysmem接口扩展内存空间

    存储器的访问接口,在e203_subsys_mems.v文件中可以找到: 同时在这个源文件中实现了一主多从的总线系统,可以看到sysmem被分配到0x80000000到0xFFFFFFFF的地址
    发表于 10-24 08:12

    唯品会:利用订单地址API校验收货信息,降低因地址错误导致的退货率

    ​  在电子商务领域,退货率高是许多平台面临的挑战,其中地址错误导致的退货占比不小。唯品会作为国内领先的时尚电商平台,通过集成订单地址API(Application Programming
    的头像 发表于 09-11 15:47 382次阅读

    从零开始学IP地址

    IP地址是一种网络编码,用来唯一标识网络中的设备,以确保主机间正常通信。IP地址由32位二进制(32-bit)组成。
    的头像 发表于 07-08 09:29 1415次阅读
    从零开始学IP<b class='flag-5'>地址</b>

    nvme IP开发之PCIe下

    配置空间 管理PCIe总线PCI配置空间头分为Type0和Type1两种类型,Type0类型配置空间 头在PCIe
    发表于 05-18 00:48

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-内核空间与用户空间的数据拷贝之数据拷贝介绍

    本帖最后由 jf_13411809 于 2025-3-20 14:10 编辑 在Linux系统中,内核空间和用户空间是两个独立的地址空间
    发表于 03-20 11:50

    飞凌嵌入式ElfBoard ELF 1板卡-内核空间与用户空间的数据拷贝之数据拷贝介绍

    在Linux系统中,内核空间和用户空间是两个独立的地址空间,它们有不同的访问权限和内存保护机制。在内核
    发表于 03-19 08:55

    NAT网络地址转换的技术原理

    由全球IP地址分配机构,IANA (Internet Assigned Numbers Authority)管理的IPv4地址,于2011年完全用尽。但是需要连接互联网必须要IP地址,但是公网
    的头像 发表于 02-17 10:30 2494次阅读
    NAT网络<b class='flag-5'>地址</b>转换的技术原理

    I2C总线设备地址设置方法

    I2C总线是一种广泛使用的串行通信协议,它允许多个设备在两条线上(数据线SDA和时钟线SCL)进行通信。每个设备都有一个唯一的地址,以确保数据能够正确地发送到目标设备。 I2C地址概述 I2C
    的头像 发表于 01-17 15:17 7008次阅读

    ISP与IP地址

    ISP可以为用户提供互联网接入、信息内容、应用服务以及其他增值业务。 要知道,在ISP的网络中,IP地址池几乎可以说不可或缺。IP地址池是指一定范围内可供分配的IP地址的集合。通过分配IP地址
    的头像 发表于 12-27 10:41 928次阅读

    CIDR的IP地址分配与管理

    传统IP地址分类,也就是ABC类等。但是,有一种情况,“如果一个公司可能被分配了一个C类网络地址,但是实际上,它仅需少量的IP地址。”而CIDR的出现解决了这类问题,它提供了一种更灵活的IP
    的头像 发表于 12-26 10:01 951次阅读

    IP地址伪造和反伪造技术

    IP地址伪造简而言之就是网络攻击的一种手段。攻击者通过伪装成合法的IP地址,绕过访问控制、进行恶意攻击或窃取敏感信息。 IP地址伪造的基本原理主要是攻击者通过修改数据包中的源IP地址
    的头像 发表于 12-20 10:12 988次阅读

    MAC地址的作用范围,MAC地址怎么申请?

    MAC地址(MediaAccessControlAddress),也称为局域网地址(LANAddress)、以太网地址(EthernetAddress)、硬件地址(HardwareAd
    的头像 发表于 12-19 17:44 2615次阅读
    MAC<b class='flag-5'>地址</b>的作用范围,MAC<b class='flag-5'>地址</b>怎么申请?

    通过安卓手机查找IP地址步骤

    我们在使用安卓手机的时候,可以在设备上通过一些方法来查到IP地址,而IP地址也分为公网IP地址和私网IP地址,具体怎么查找可以看下面步骤。 一、如何在手机上查找私网IP
    的头像 发表于 12-12 13:53 4523次阅读
    通过安卓手机查找IP<b class='flag-5'>地址</b>步骤

    如何在Linux系统上设置站群服务器IP地址

    在Linux系统上设置站群服务器的IP地址,可以通过以下步骤进行,主机推荐小编为您整理发布如何在Linux系统上设置站群服务器IP地址
    的头像 发表于 12-11 10:05 863次阅读