CPU 地址空间分配原理分析

本文参考了 主存与CPU的连接(字扩展,位扩展,芯片的地址分配)文章中的部分文字和图片,这里向作者致敬。

前言

对于硬件开发工程师来说,尤其是初学者,地址空间分配原理是比较难以理解的,起码对于我来说,是比较抽象的,可能是我比较笨吧。我们在编程时,芯片手册会直接告诉我们外设的起始地址,比如STM32(cortex-M3)的SRAM的起始地址为0x20000000,其他外围的寄存器也有相关的地址,尤其是对于扩展的RAM芯片,其分配的地址不是0,而是0x68000000,所以这里就会有个疑问,CPU的地址空间分配是什么原理?难道外围芯片的地址就默认不是0吗?等等。

概念1:外围设备的地址都是从0开始

前面讲到,CPU访问外设的地址不是从0开始,这并不意味着外围设备自己的物理地址也不是从0开始的,这样说可能不太严谨,但是从方便理解的角度看,确实是这样的,因为外围设备种类有太多,规定一个非0的起始地址,远没有规定从0开始方便,所以我们有个结论:
外围设备、硬件的物理地址都是从0开始的。包括内存条、显卡、串口等等。

概念2:CPU与外围设备的链路

之所以想不到**“外围设备地址都是从0开始”**的原因,是因为在相关的教材学习中,使用了CPU-外围链路简化模型,如下图所示:

简化链路

在这里插入图片描述
从上图中,我们很容易会联想到,CPU的地址空间是按照约定来分配的。设备的地址之和为CPU的地址范围。这样的模型,只是在应用层面来看的,反而会对原理的理解会有混淆。

标准链路

在这里插入图片描述
该图的地址分配电路可能不太严谨,但是对于我们理解是很有帮助的,CPU中也确实有相应功能的硬件,标准图与简化图相比有两点区别:

  • 1、外围设备的物理地址的起始都是从0开始的。
  • 2、在CPU地址总线和外围设备之间,增加了地址分配电路,地址分配电路负责将CPU的规划分段地址,转换为相应类型的外围设备地址。

地址映射举例

我们以Cortex-M3架构的地址分配为例,STM32F系列就是Cortex-M3架构,该架构在单片机领域中应用非常广泛:
在这里插入图片描述
图中的地址分配,显然跟前面讲到的简化链路对应的,比如SRAM的起始地址为0x20000000,我们在编写应用程序时,只需要知道,对于内存的读写,起始地址为0x20000000,CPU会自动的去读写SRAM的,并不会考虑那个地址分配器的工作。

地址分配原理

前面的讲述偏理论,可能还不太容易理解,我们以真实的设备来分析,假如我们现在需要扩展存储器容量,为了降低理解的难度,我们假设CPU为扩展存储器分配的起始地址从0开始。
存储扩展连接方法:

  • 1、将个存储器芯片的地址线、片选线、读/写线并联。
  • 2、将个存储器芯片的数据线分别接到数据总线的对应位上。

如下图所示:
在这里插入图片描述
扩展需求:
假如我们需要扩展64Kx8位存储器,而单片存储器的容量为16Kx8位,则:

  • 1、64Kx8 bit需要16位地址线A15-A0, 而16Kx8 bit的片内地址线为A13-A0.
  • 2、所以16位地址线的低14位A13~A0作为片内寻址,高两位A15、A14用于片选。
  • 3、外围存储器从0x0000开始连续编址,则4块芯片的地址分配为:
  • (1) 第1片地址范围:0x0000~0x3FFF
  • (2) 第2片地址范围:0x4000~0x7FFF
  • (3) 第3片地址范围:0x8000~0xBFFF
  • (3) 第3片地址范围:0xC000~0xFFFF
    在这里插入图片描述
    从上图中,我们可以看到:每片芯片的物理访问地址是不同的,但是对于A0~A13来说,都是从0开始的。

硬件电路原理图:
在这里插入图片描述
从图中我们可以看到,地址的分段,其实是通过片选实现的,而片选本质上是开关,控制芯片的选通和断开,只不过在地址的角度看,是分段了,但是对于各自芯片来讲,地址还是从0开始的。

小结

1、地址空间的分配是通过地址分配电路来实现的。
2、外围设备的物理地址,一定是从0开始的。
3、应用编程时,外围设备的访问地址非0,这是给程序员用的,但是最后给外围芯片的物理地址一定是从0开始的。

  • 20
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值