处理器系统中可能包含多种类型的存储期间,如Flash、SRAM、SDRAM、ROM以及用于提高系统性能的Cache等。
一、存储部件分类
1、RAM(random access memory)-随机存取存储器
RAM在任何时候都可以被读写,常作为操作系统或其他正在运行程序的临时存储介质(内存、掉电后RAM不能保留数据。RSM有SRAM、DRAM两大类。)
2、ROM(Read Only Memory)-只读存储器
3、FLASH存储器-闪存
4、SD/MMC
二、ARM架构上的内存和内存管理部件
嵌入式开发中常常使用多种类型的组合实现低成本、提高效率。例如Rom+RAM+Nand Flash的组合,基本的引导代码放在ROM中,系统加电即自动从ROM初始地址开始执行,而后分阶段(一阶段或二阶段)将bootloader代码、RTOS和应用程序代码复制至RAM中执行。程序代码之类一定是放在一种可以掉电不失数据的存储设备中,笼统的将之称为ROM。传统的嵌入式开发中,由于代码量和数据量很少,一般内部EEROM即够用。后来由于代码量、数据量太大,EEROM太大,EEROM存不下来,就出现了Flash。由于Flash不能直接与CPU交换数据或者交换很慢,所以在程序运行后,需要将Flash内部的某一要运行的程序,搬移到能够和处理器直接交换数据的RAM中去执行,当程序被搬运(也许只是部分搬运)到RAM中后就开始从RAM的首地址开始运行程序。为了提高利用率,一般会将向量表之类的需要快速响应的部分放到RAM中,当然如果RAM够大,也可以将所有的代码放到RAM中。芯片中,存储部件间程序和数据的搬移、CPU core与主存间通信就是通过处理器的各种内存管理单元来实现。
芯片上所有的片内、片外存储都统一管理,存在一个系统存储器分配映射,其不仅是存储器块可用地址和I/O设备可使用地址的反映,也是系统中硬件存储器和I/O设备描述的反映。它反映了不同存储单元ROM、RAM、Flash和I/O设备等的存在性,每种存储不见有各自的开始和结束地址;也反映了定位器对程序、数据、I/O操作的存储器分配。不同的存储单元之间存在着空间间隔以方便扩展,扩展时只需改动软件程序即可。
1、寄存器
对于寄存器,它不是RAM,可以理解为RAM,寄存器的速度是最快的,是处理器运算的临时空间,内存的数据和信息都是经过他来参加CPU内逻辑运算单元或算数运算单元的。
2、cache
高速缓存存储器是一个硬件部件,SRAM,对于用户来说是透明的。cache与主存以cache line为单位交换数据。cache的地址映像和变换方法有三种:直接相联、全相联和组相相联映像。cache与一些写回、写通数据技术结合来提高系统效率的同时保持cache和主存数据的一致性。
在ARM920T有16K的数据cache和16K的cache,这两个cache是基本相同的,数据cache多了一些写回内存的机制,后面我们以数据cache为例来介绍cache的基本原理。cache的存储单位是cache line,ARM920T的一个cache line是32字节,因此16K的cahce由512条cache line组成。
多核心的架构下,每个处理器都会有自己的L1 cache,并共享一个L2 cache。ARM 采用CacheCoherence机制保证cache的同步。
3、MMU(memory management unit)-内存管理单元
MMU负责虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查。MMU使得每个用户进程拥有自己独立的地址空间,并通过内存访问权限的检查保护每个进程所用的内存不被其他进程破坏。
ARM CPU地址转换设计三种地址:虚拟地址(VA,virtual address)、转换后的虚拟地址(MVA,modified virtual address)、物理地址(PA,physical address)。MMU没有使能时,CPU核心、cache、MMU、外设等所有部件使用的都是物理地址。启动MMU后,CPU对外发出虚拟地址VA,VA被转换为MVA供cache、MMU使用,在MMU里MVA被转换为PA,最后使用PA读取实际设备。
从MVA到PA的转换需要访问多次内存,转译查找缓存(Translation Lookaside Buffers,TLB)用来改进CPU访问内存的性能。由此通过这样一个高速、容量较小的存储器来存储近期用到的页表条目(段、大页、小页、极小页描述符),避免每次地址转换都到主存中查找,这样就能大幅提高性能。这个存储器用来帮助快速地进行地址转换,成为当CPU发出一个虚拟地址时,MMU首先访问TLB。如果TLB中含有能转换这个虚拟地址的描述符,则直接利用此描述符进行地址转换和权限检查,否则MMU访问页表找到描述符后再进行地址转换和权限检查,并将这个描述符填入TLB中,下次再使用这个虚拟地址时就直接使用TLB中的描述符。
4、协处理器CP15
在基于ARM的嵌入式系统中,存储器常用协处理器CP15完成存储单元的大部分管理工作。例如通过专用指令写CP15控制寄存器相应位来使能和控制内存管理单元MMU和cache
5、Nand flash controller和flash
操作NAND flash时,先传输命令,然后传输地址,最后读写数据,这个期间要检查flash的状态。
6、DMA(direct memory access)-直接存储器存取
DMA用来提供在外设和存储器之间或存储器和存储器之间的高速数据传输。无需CPU干预,数据可以通过DMA快速地移动,这就节省的CPU的资源。
7、ROM(内部rom和外部rom),用于存放系统启动和初始化代码、RTOS等。
8、RAM(分内部IRAM和外部IRAM),相当于PC的主存,用于任务执行过程中的临时数据,代码存储和堆栈。执行频率高的代码、数据存于IRAM。系统启动后ROM中的影像端copy至RAM并执行。
9、I/O端口和设备地址空间:该地址由处理器根据硬件配置分配,包括控制/数据/状态寄存器。
三、智能机应用处理器AP和无线路由器CP的存储部件配置
来源:https://www.nepconchina.com/news_center/hyxw/ARM/