原创 ARM芯片的地址重映射

2008-6-19 22:56 2857 10 12 分类: MCU/ 嵌入式


ARM芯片的地址重映射





by winday



    映射就是一一对应的意思。重映射就是重新分配这种一一对应的关系。
    我们可以把存储器看成一个具有输出和输入口的黑盒子。如下图所示,输入量是地址,输出的是对应地址上存储的数据。当然这个黑盒子是由很复杂的半导体电路具现的,具体的实现的方式我们现在不管。存储单位一般是字节。这样,每个字节的存储单元对应一个地址,当一个合法地址从存储器的地址总线输入后,该地址对应的存储单元上存储的数据就会出现在数据总线上面。




1



   普通的单片机把可执行代码和数据存放到存储器中。单片机中的CPU从储器中取指令代码和数据。其中存储器中每个物理存储单元与其地址是一一对应而且是不可变的。如图1CPU读取0x00000000地址上存储单元的过程。






2



      ARM比较复杂。ARM芯片与普通单片机在存储器地址方面的不同在于:ARM芯片中有些物理存储单元的地址可以根据设置变换。就是说一个物理存储单元现在对应一个地址,经过设置以后,这个存储单元就对应了另外一个地址了。图3是随意举了个例子(不要与ARM芯片对应),旨在说明地址重映射的过程。图3表示把0x00000000地址上的存储单元映射到新的地址0x00000007上。CPU存取0x00000007就是存取0x00000000上的物理存储单元。


点击看大图




3



    图4,图5是对ARM芯片的两种地址重映射方式的图示。图3 假设我们的应用程序存放在外扩FLASH当中,那么应用程序的异常向量表就存放在0x80000000起始的64个(其中有32个存放异常向量)物理存储单元中。但是ARM核发生异常(中断)后是从0x00000000~0x0000003F地址范围取异常向量的。所以要把0x80000000~0x8000003F范围内的存储单元重新映射到0x00000000~0x0000003F地址范围上。以后CPU存取0x00000000~0x0000003F地址就是存取0x80000000~0x8000003F范围内的存储单元。图4只显示出第一个异常向量的地址重映射,整个异常向量表的地址重映射等同这个过程。

点击看大图




4



    图5图示了ARM芯片的另外一种映射方式。这个映射可以由用户决定采用还是不采用(相关代码在工程文件的startup.s中,这个文件是第三方提供,用户可以修改)。这个映射主要是为了提高应用程序异常相应得速度。当我们把应用程序存放在片内FLASH的时候,异常向量表存放在0x00000000~0x0000003F存储单元内。每次发生异常,CPU0x00000000~0x0000003F地址上取异常向量。但是对RAM的存取速度远高于对FLASH


点击看大图




5




    存取速度,所以为了提高异常相应速度我们采取以下做法:



(1)       先把0x00000000~0x0000003FFLASH)存储单元内的异常向量表复制到0x40000000~0x4000003F(片内RAM的最低端64个字节的存储单元)范围内存储单元中。



(2)       0x40000000~0x4000003F范围内存储单元地址重新映射到0x00000000~0x0000003F地址范围。



    这样做了以后,当异常发生的时候,CPU取异常向量就是从RAM区中的异常向量表中区,速度快了。比如复位中断发生,CPU从地址0x00000000取指令,但此时由于已经过地址重新映射,这个0x00000000被地址转换器转换成0x40000000CPU实际上是取的RAM区中0x400000000这个存储单元内的指令(异常向量)。



当然用户可以不进行这种映射。片内FLASH0x00000000~0x0000003F存储单元具有一模一样的异常向量表。只不过不进行这种处理,异常相应速度慢一点。但是这种速度上的差别很多情况下是不必要在意的。



    图中的地址转换器受控制寄存器MENMAP的控制,用户可以设置MENMAP实现对地址重映射的控制。这个地址转换器显然是通过内部硬件电路实现的。

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户1769355 2014-8-4 11:20

同学 留个QQ一起探讨下 高斯滤波的问题

用户1769355 2014-6-22 17:39

正在弄这方面的东西

用户363685 2014-3-20 15:22

正在弄 图像处理的高斯滤波Verilog。。。

用户412764 2011-11-24 09:57

是不是实际电路还会有毛刺呢?如何消除?

用户412764 2011-11-24 09:55

根据布局布线后的仿真结果,是不是最后下载到芯片中之后形成的电路,在处理数据时依旧会存在这样的毛刺??

用户1268540 2008-7-2 21:39

只是地址的变化而已,因为一上电都是访问0地址的,我们把它映射别的地址而已,可以把他当一个黑匣子就好了,不会影响你执行流程的。

用户1144655 2008-6-29 11:08

最近也在看这个,看的晕乎乎的,我想问一下,怎么保证映射后程序执行流程不变呢?
相关推荐阅读
用户1268540 2010-09-16 22:32
[转]使用MVTools低功耗验证经验分享
Browse > Home / 信息中心 / SNUG / 2010论文集 / 使用MVTools低功耗验证经验分享 使用MVTools低功耗验证经验分享王福君    fujun_wang@pa...
用户1268540 2009-12-16 22:56
在VMM验证环境中使用ESL模型
在VMM验证环境中使用ESL模型Using ESL model in VMM verification environment王志鹏, 徐争HiSilicon Technologies Co., Lt...
用户1268540 2009-12-16 22:54
基于VMM的寄存器抽象层验证
本文介绍了Synopsys公司推出的基于VMM的寄存器抽象层验证技术和方案,简称RAL(Register Abstraction Layer)。该技术是Synopsys针对芯片验证中如何简便、高效地完...
用户1268540 2009-03-29 20:33
VCS + Debussy 仿真的大概过程
1、调用debussy dump wave的函数;2、先加上debussy命令用VCS编译;3、再用debussy编译一遍工程;(2和3可以合在一起)4、最后自动打开工程波形。在仿真文件的顶层中加入如...
用户1268540 2009-03-18 21:59
[转]VMM验证方法在AXI总线系统中的实现
片验证越来越像是软件而不是硬件工作,这点已逐渐成为业界的共识。本文以软件工程的视角切入,分析中科院计算所某片上系统(SoC)项目的验证平台,同时也介绍当前较为流行的验证方法,即以专门的验证语言结合商用...
用户1268540 2009-01-10 23:03
串行RapidIO: 高性能嵌入式互连技术(图)
行RapidIO(SRIO)针对高性能嵌入式系统芯片间和板间互连而设计,是未来十几年中嵌入式系统互连的最佳选择之一。与传统嵌入互连方式的比较图1展示了RapidIO互连在嵌入式系统中的应用。随着高性能...
EE直播间
更多
我要评论
2
10
关闭 站长推荐上一条 /3 下一条