问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

CPU 地址空间分配原理分析

创作时间:
作者:
@小白创作中心

CPU 地址空间分配原理分析

引用
CSDN
1.
https://blog.csdn.net/u012351051/article/details/116863809

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开始的。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号