2.6 ARM存储器结构 ARM架构的处理器的存储器寻址空间有232=4G字节,该存储空间可以分为可快存/可缓冲(Cacheable /Bufferable)区域和不可快存/不可缓冲区域。 ARM架构的处理器,有的带有指令快存(I-Cache)和数据快存(D-Cache);但是,片内都不带有片内RAM和片内ROM。系统所需的RAM和ROM(包括闪存FLASH)都通过总线处接;故有的片内还带有存储器管理单元MMU(Memory Management Unit)。ARM架构处理器还允许外接PCMCIA。
2.6.1 ARM Cache结构 Cache是一种小容量,高速度的存储器,用于处理器与主存储器之间,存放当前被使用的主存部分内容,以减少访问主存的等待时间。
表2-4 Cache 性能 Cache结构 性能 无Cache 1 I-Cache(only) 1.95 D-Cache(only) 1.13 I-Cache和 D-Cache 2.5
1. Cache的分类和结构 常用的Cache有两类:指令和数据统一的Cache;以及指令和数据分离的I-Cache与D-Cache。新型的ARM架构处理器较多采用了I-Cache与D-Cache的独立块存结构,如Intel公司的SA1110处理器内含16K字节I-Cache和8K字节D-Cache。
图2-19 统一Cache的结构示意图
图2-18 分离Cache的结构示意图
2. Cache的放置安排 快存Cache的放置是主存地址与快存Cache单元之间的映像机制。常用的方法有直接映像(Direct-mapped)、组相联(set-associative)和全相联(Fully associative)等。
a) 直接映射 直接映像的方式是给定的内存块仅能放在一个特定的Cache块中。可用若干低位地址直接访问Cache项,其余的高位地址与Cache项中的地址标识(tag)进行比较。若比较相等且有效位为“1”,则为“命中(hit)”,这是最简单的放置算法。未命中则为“失效(miss)”。
直接映像
图2-21 直接映像的Cache机制 data RAM tag RAM compare mux data hit address Index 4 9 19 16byte 图中的Cache为8K字节(data RAM),每行为16字节,即有512行。32位地址中的低4位作为行内的字节选择,9位索引(index)来选择行,其余的高19位作为地址标识(tag)。 图2-21 直接映像的Cache机制
优点: 实现简单 访问Cache速度快 缺点: 某些情况下命中率很低
b) 组相联映像 组相联映像也使用低位地址直接访问Cache项,但它选中的是一个组,组内包含有两块或多个块。给定的内存块可以放在选中组中的任意一块内。一组内的块数,一般称为相联度或相连路数(way)。选中一组后,组内所有项的标识同时进行比较,如果有一个匹配,则“命中”。与组相联映像实际上是靠比较器的个数据及增宽Cache位来降低Cache块的冲突。
组相联映像
图2-22二路组相联的示意图 data RAM tag RAM compare mux address data hit Tag Index 8 20 图中的Cache为8K字节,每行16字节,分为二个组直接映像Cache,每个为256行。32位地址中的4位作为行内的字节选择,索引(index)只需8位,其余的高20位作为地址标识。组相联是通过“单体多字存储器”来并行查询,二路组相联即通过单体双字存储器来查询,有2个比较器。 在Intel 公司的SA-1110处理器中,512字节的微型数据快存采用了二路组相联的方式,其每行为32字节,共有16行。 图2-22二路组相联的示意图
c) 全相联 全相联映像方式是给定的主存块可以放在Cache的任意一块中,用内容寻址存储器CAM(Content Addressed Memory,或称为相联存储器)来实现,送来的地址与Cache所有项中的地址标识作比较,以判断是否“命中”。
全相联映像
图2-23 全相联的示意图
优点: 命中率高 缺点: CAM访问速度慢; 结构复杂,占用芯片资源多。
3. Cache的替换算法 当发生Cache不命中时,必须选择被替换的项。常用的算法有随机法、近期最少使用LRU(Least Recently Used)法、循环(Round-robin)法和锁操作法。
a) 随机法 从Cache中的各行中随机选取一行进行淘汰,可选择一随机事件作为替换的依据,如可用系统实时时钟的低几位。
b) 近期最少使用LRU法 Cache控制器设置访问标识,以记录数据在某一段时间内被访问的次数,当需要淘汰时,则淘汰近期最少使用的那一行。
c) 循环法 此方法类似于先进先出FIFO法,Cache 控制器设置特殊的时间标识,以记录数据在Cache中存放时间,当需要淘汰时,则淘汰进入Cache时间最长的那一行。 循环法结构简单,速度快,ARM架构的处理器大多采用该淘汰算法。
c) 锁操作 循环法对Cache中代码或数据不分常用还是非常用的,都一样地参与循环淘汰,很明显该淘汰替代算法的效率不及LRU法。为了弥补其不足,ARM架构中许多高性能处理器核采用了锁操作。 在一些常用的代码或数据加上锁放入指令Cache或数据Cache中,可免于频繁地淘汰替代,从而可提高系统的效率。但是,锁操作也会给Cache带来了一些缺陷,无形之中缩小了相应Cache的容量;故需及时对已上锁的目前不常用的代码或数据进行解锁。
4. 存储器写策略 产生的结果数据要写到存储器中,有多种方式进行处理。一般分为:写直达(Write-through)、通过缓存写和写回(Write-back)三种方式。
a) 写直达 当要写Cache时,数据同时写回主存储器。 优点是简单易实现;缺点是写存储器的速度较慢,影响处理器的效率。
b) 通过缓存写 可先高速把数据写至缓存,在下一个操作时再把数据送至主存储器。 优点是在写操作不是很频繁的时候,提高处理器效率。但是如果有连续的写操作发生时,处理器仍然要等待。
c) 写回 写回(有时也称Copy-back)是当处理器更新Cache的某一行后,相应间数据并不立即写回主存储器单元,而当该行被从Cache淘汰时,才把数据写回主存储器中。
5. ARM的Cache设计 图2-24 Cache关联度的系统性能及带宽 从中可以看出:从1路的直接映像到4路的组相联,系统的性能可能增加很多;而32/64路则得到显著的改进,且32/64路与256路(全相连)的系统性能已无明显差别。这样,可以把CAM切成4/8部分,既能降低功耗,又能不损失系统性能。 另外,Cache也可以减少与主存储器访问的带宽,而主存储器访问的功耗也要比Cache访问的功耗来得大,故Cache的关联度提高,也能进一步降低功耗。 ARM7处理器核采用了4路组相联映像;SA1110、ARM9与ARM10则采用了分段的32/64路全相联。 图2-24 Cache关联度的系统性能及带宽
Cache性能改进的途径: 降低失效率 减少失效开销 减少命中时间
增加Cache中行/块的大小来减少强制性失效。 提高相联度来减少冲突失效。 硬件预取技术 产生Cache失效原因有强制性失效(需从主存储器调入Cache)、容量失效(所需的块/行不能全部调至Cache)和冲突失效(某块/行被替换,后又被重新访问)。 改进方法: 增加Cache中行/块的大小来减少强制性失效。 提高相联度来减少冲突失效。 硬件预取技术 l 增加Cache中行(块)的大小来减少强制性失效。 据统计分析,对于16K字节以下Cache,每行32/64字节失效率最低;大于16K字节的Cache,每行64/128字节,失效率最低。增加每行的容量,有时反而会增加访问Cache时间。因此,ARM架构较多采用每行32字节。 l 提高相联度来减少冲突失效。 ARM架构处理器大多数都采用全相连的映像机制,即使是最简单的ARM720T处理器核也采用了4路组相联映像。 l 硬件预取技术 预取建立可利用存储器的空闲频带(若不使用,也是浪费),指令/数据的预取,可以大大提高Cache命中率。
b) 减少失效开销 ARM架构采用了非阻塞(nonblocking)Cache技术。Cache在失效时,仍然允许处理器进行其他命中的访问。这种“失效下命中”(hit under miss)不是完全拒绝处理器的访问,而是能处理部分访问,从而减少了实际的Cache失效开销。 此外,还可以采用“让读失效优于写”和二级Cache技术来减少Cache失效开销
b) 减少命中时间 Cache命中时间会影响到处理器的时钟频率。在许多处理器设计中,往往是Cache的访问时间限制了处理器的时钟频率。因此,减少Cache命中时间,不但可提高Cache性能,还能提高系统运行速度。
图2-25给出了早期的ARM3所采用Cache结构。4K字节Cache,每行4个字,每个字32位;采用全相连的Cache放置方式,在CAM分式4段,每段为64路。32位虚拟地址的最低2位为字的节寻址,接下来2位作为每行的4个字的选择,再接下来2位来选择4个CAM,其余的作为地址标识用来检验Cache是否被“命中”。 图2-25 ARM3的Cache结构
2.7 ARM存储器管理单元MMU 图2-26 二级页表存储器寻址示意图 对于32位地址4G字节寻址的架构ARM处理器一般都采用页式寻址的方式。若页面大小为4K字节,直接用页表来寻址,那未,该页表应为220×20位,即为2.5M字节,很明显这样的开销太大了。故对于4K字节的小页面,常采用二级页表的方式,如图2-26所示,32位逻辑地址中,最高10位作为页的目录索引,接下来10位作为页表项索引,余下的作偏移量。 图中的页目录为4K字节,页表也为4K字节,这样页的表开销只需8K字节;不过,需查2次表,查表的时间要增加一倍。 图2-26 二级页表存储器寻址示意图
ARM架构处理器中的存储粒度(memory granularity)根据不同的应用方式,可有大页(64K字节)、小页(4K字节)和微小页(Tiny Pages, 1K字节)和段(Sections,1M字节)。常用的是4K字节小页面。至于大页和段则用于大数据领域,64K字节的大页可以分成4个16K子页。
位[31:14]提供了18位地址变换表的基址,基定位界限为16K字节。 1. CP15 MMU寄存器 R0:ID寄存器(只读) R1: 控制寄存器(V3版:只写;V4版可读/写) R2:地址变换表基址(V3版,只写;V4版,可读/写) 31 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 00000000000000000 RR V I Z F R S B L D P W C A M M(位0):允许MMU A(位1):允许定位故障检验 C(位2):允许数据Cache或统一Cache W(位3):允许写缓冲 P(位4):从26至32位异常处理 D(位5):从26至32位地址区域 L(位6):至上一次中止时序 B(位7):从小端到大端 S(位8):修改MMU系统 R(位9):ROM保护状态 F(位10):控制外协处理器通信速度 Z(位11):允许分支预测 I(位12):允许指令Cache V(位13):异常向量基址从0×00000000至0×ffff0000 RR(位14):控制Cache置换算法(随机法和循环法) 位[31:15]作为保留位,如位[31:30]用作为ARM920/ARM940的时钟控制。 31 14 13 0 Translation table base address 00000000000000 位[31:14]提供了18位地址变换表的基址,基定位界限为16K字节。
4)R3:域访问控制寄存器(V3版,只写;V4版,可读/写) 5)R5:故障状态寄存器(V3版,只读;V4版,可读/写) 7)R7:快存Cache操作(V3版,只读;V4版,可读/写) 8) R8:变换后备缓冲器TLB操作(V4版有效) 9) R9:读缓冲操作 10)R10:变换后备缓冲器TLB锁住 11)R13:进程ID映像 12)R14:调试支持 13)R15:测试和时钟控制 R13寄存器用来重新映像虚拟地址,该机制有二个作用,可以支持快速文本切换的进程ID与跟踪处理标识;也可支持虚拟Cache(Virtual Cache)的进程标识PID。若虚拟地址的位[31:25]为零,则用该寄存器的位[31:25]来替代。
2.第一级描述符(first-level descriptors) 存储器管理的段/页寻址中的段表/页表都放在存储器中。第一级描述符表示的是表的基址、域、访问权限以及有关特性。第一级描述符也放在存储器中,该变换表(translation table)由CP15协处理器的寄存器给出,而表格索引则由虚拟地址[31:20]给出 。
图2-28 第一级描述符 第一级描述符按位[1:0]可以有4种情况: 00:无效 01:粗调页的描述符 10:段的描述符 11:细调页的描述符(支持某些ARM处理器核) 图2-28 第一级描述符
3.段寻址(Section addressing) 如图2-29所示,32位虚拟地址(即逻辑地址)分成高12位段表项索引(table index)和20位段索引(Section index)。12位段表索引与CP15的R2中的18位变换表基址(translation table base address)合并成存储器存取地址(最后2位为00)。查段表找出相应的段描述符,位[31:20]为段基址(section bass address),位[19:12]为零,位[11:10]为AP存储器存取权限,位[9]为0,位[8:5]为域,位[4]不确定,位[3]为C: Cache允许,位[2]为B:缓冲器允许,最低2位为10表示段描述符。然后,段基址与段索引(32位虚拟地址中提供)合并成真正的存储器存取地址(物理地址),读出相应的数据。 图2-29段式寻址示意图
4. 二级页式寻址 二级页式寻址就是要进行两次页查表:第一次查出第一级描述符,然后根据组合的地址再进行第二次查表得到第二级描述符,最后形成真正的存储器物理地址进行数据的读写。
图2-30是二级页式寻址示意图。32位虚拟地址分成为位[31:20]:12位为第一级表索引(有的称目录项索引),位[19:12]:8位页表索引(page table index),位[11:0]:12位页偏移值(page offset)。12位第一级表索引与CP15的R2中的18位变换表基址合并成存储器存取地址(最后2位为00)。查第一级表,取出相应第一级描述符,位[31:10]为页表的基址(page table base address),位[8:5]为域,最后2位为01表示第二级粗调页表指针(10为段指针,11为第二级细调指针)。22位的页表基址与页表索引(32位虚拟地址提供)再次形成存储取地址(最后2位为00),查第二级表(页表),找出相应表描述符,位[31:12]为该页基址,AP3、AP2、AP1、AP0为4个子页(16K字节)的存取权限,描述符中C和B定义同段描述符中的C和B定义,后2位10表示为小页(01为大页,11为微小页,00变换故障),20位页基址与页偏移值(32位虚拟地址提供)形成真正存储器存取地址(物理地址),读出相应数据。 图2-30 二级页式寻址示意图
二级页描述符格式
5. 存取权限 域(Domain)是一组具有特定访问权限的段/页。这样可以允许多个不同过程使用同一个转换表执行,同时不同程序之间又有一些保护。这是一种比较方便的过程切换机制,不必使每个过程都有自己的转换表。 每个段和子页的存取权限AP位与域信息一起用于第一级描述符中,域控制信息在CP15的R3寄存器中,CP15的R1寄存器中的S和R位与处理器的用户/管理者状态来决定是否允许对所寻址单元进行读/写。
6. Virtual Cache 一般的Cache采用物理地址(实地址),即Cache的标志(tag)是物理地址的高位部分,访问Cache块的地址索引也是物理地址。故需先访问地址变换后备缓冲器TLB,得到物理地址后再访问Cache 。 虚拟地址由处理器给出,并由TLB变换为物理地址。若TLB命中,则由物理地址访问Cache;若TLB未命中,则查段表或页表找出相应的物理地址,并修改TLB;如果在段表或页表中仍找不到,则不得不去访问后备存储器,找出相应的物理地址,并修改页表或段表。 图2-32 物理地址Cache与TLB
虚拟Cache中,处理机所给出的虚拟地址,既作为TLB的虚拟地址转换成物理地址变换的虚拟地址,也直接Cache访问的地址。这样Cache的访问可以省去了TLB的变换,可以提高执行的速度;若Cache访问未命中,那么,仍需象物理Cache那样,进行TLB变换(访问快表),以及段/页访问(访问慢表)找出相应的物理地址。 图2-34 虚拟Cache示意图
2.8 地址变换后备缓冲器TLB 由于目录项和页表都存放在主存中,从逻辑地址变换至真正物理地址需读2次主存。因此,在逻辑地址与物理地址之间插入了一个地址变换后备缓冲器TLB(Translation Look-aside Buffer)
地址变换后备缓冲器TLB中每项由逻辑页号与相对应的物理页号所组成。为了减少地址变换后备缓冲器TLB的开销,它也采用了类似于快存Cache的结构,只存放最近使用过的页表项,故地址变换后备缓冲器TLB也称为快表。而页表/段表则称为慢表。同样,TLB快表的淘汰替代算法也采用循环法;故也增加了相应的锁操作。 图2-27 地址变换后备缓冲器TLB
2.9 ARM的I/O结构 ARM架构中的处理器核和处理器内核一般都没有直接的I/O部件和模块,构成ARM架构的处理器中的I/O可通过AMBA总线来扩充。 存储器映像I/O 直接存储器存取DMA 中断IRQ和快速中断FIQ
2.10 ARM协处理器接口 ARM为了便于片上系统SOC的设计,ARM处理器内核尽可能精简,要增加系统的功能,可以通过协处理器来实现。协处理器接口可以看作ARM内部总线的扩展,ARM处理器内核能通过协处理器指令对协处理器进行操作。 在逻辑上,ARM可以扩展16个协处理器,每个协处理器可有16个寄存器。
表2-6协处理器 协处理器号 功能 15 系统控制 14 调试控制器 13-8 保留 7-4 用户 3-0
ARM处理器内核与协处理器接口信号有以下4类: 时钟和时钟控制信号:MCLK、nWAIT、nRESET 流水线跟随信号:nMREQ、SEQ、nTRANS、nOPC、TBIT 应答信号:nCPI、CPA、CPB 数据信号:D[31:0]、DIN[31:0]、DOUT[31:0]
2.11 ARM AMBA接口 ARM处理器内核可以通过先进微控制器总线架构AMBA(Advanced Microcontroller Bus Architecture)来扩展不同体系架构的宏单元及I/O部件。 AMBA有先进高性能总线AHB(Advanced High-performance Bus)、先进系统总线ASB(Advanced System Bus)和先进外围总线APB(Advanced Peripheral Bus)等三类总线。
图2-35 典型的基于AMBA的系统
1.先进系统总线ASB ASB是目前ARM常用的系统总线,用来连接高性能系统模块,它支持突发(burst)方式数据传送。可支持多主机。
1. 先进系统总线ASB ASB是目前ARM常用的系统总线,用来连接高性能系统模块,它支持突发(burst)方式数据传送。总线宽度为32bits,可支持多主机系统。
2.先进高性能总线AHB 先进高性能总线AHB不但支持突发方式的数据传送;还支持分离式总线事务处理,以进一步提高总线的利用效率。 与ASB相比,先进高性能总线AHB有以下不同: 在分离式总线处理中,在数据传输时,从设备即使响应很慢,也不会一直占用总线,从而可进一步提高总线利用率。 AHB用单时钟边沿来控制所有的操作、辅助综合和设计验证(通过静态时态分析仪及类似工具)。 AHB采用三态器件实现中央多路复用总线,它与双向总线相比,可很方便插入中继器(repeater)来扩展系统。 AHB可支持64位或128位高数据带宽传输。
3. 先进外围总线APB 先进外围总线APS为外围宏单元提供了简单的接口。也可以把APS看作为先进系统总线ASB的余部,为外围宏单元提供了最简易的接口。
2.12 ARM JTAG 调试接口 由测试访问端口TAP(Test Access Port)控制器、旁路(Bypass)寄存器、指令寄存器和数据寄存器,以及与JTAG接口兼容的ARM架构处理器组成。
图2-37 JTAG 调试接口示意图 TAP控制器 指令寄存器 边界扫描寄存器 旁路寄存器 ID寄存器 专用数据寄存器 TDI TDO TMS TCK TRST 处理器的每个引脚都有一个移位寄存单元,称为边界扫描单元BSC(Boundary Scan Cell),它将JTAG电路与处理器核逻辑电路联系起来,同时,隔离了处理器核逻辑电路与芯片引脚;把所有的边界扫描单元构成了边界扫描寄存器BSR,该寄存器电路仅在进行JTAG测试时有效,在处理器核正常工作时无效。 图2-37 JTAG 调试接口示意图
引脚名 类型 定义 TCK 输入 测试时钟,在TCK时钟的同步作用下,通过TDI和TDO引脚串行移入/移出数据或指令;同时,也为测试访问端口TAP控制器的状态机提供时钟。 TMS 测试模式选择信号,控制测试接口状态机的操作。 TDI 测试数据输入线,其串行输入数据送至边界扫描寄存器或指令寄存器(由TAP控制器的当前状态及已保存在指令寄存器中的指令来控制)。 TDO 输出 测试数据输出线,把从边界扫描链采样的数据传播至串行测试电路中的下一个芯片。 TRST 测试复位输入信号,测试接口初始化。
ARM处理器核嵌入了Embedded-ICE模块,该模块包含了2个观察点(Watch point)寄存器和控制与状态寄存器。当观察点寄存器的值与地址、数据和控制信号匹配时,观察点寄存器能中止ARM处理器运行。当指令在ROM或RAM中执行时,可以把观察点寄存器配置为断点寄存器,从而能暂停处理器运行。
图2-40 实时调试的结构图
2.13 ARM架构产品 ARM架构的处理器内核有ARM7TDMI、ARM8、ARM9TDMI、ARM10TDMI及StrongARM(SA-1)等。
1. 处理器内核ARM7TDMI 图2-41 ARM7TDMI体系结构图 处理器核采用了3级流水线结构,指令执行分为取指、译码和执行等3个阶段。运算器能实现32位整数运算;采用了高效的乘法器,用32×8位乘法器实现32×32位乘法(结果为64位)。 ARM7TDMI采用V4T版指令,同时,还支持16位Thumb指令集,使得ARM7TDMI能灵活高效地工作。 嵌入式ICE(Embedded ICE)模块为ARM7TDMI提供了片内调试功能;同时,通过JTAG接口可以很方便地用PC主机对ARM7TDMI进行开发和调试。 图2-41 ARM7TDMI体系结构图
图2-42 ARM7TDMI核接口信号图
2. 处理器核ARM720T 在最基本的ARM处理器内核其础上,可增加了Cache、存储器管理单元MMU、协处理器CP15、AMBA接口以及EMT宏单元等,构成了ARM处理器核。
ARM720T处理器核是在ARM7TDMI处理器内核基础上,增加8K字节的数据与指令Cache,支持段式和页式存储的MMU、写缓冲器及AMBA接口构成
4路组机联映象 图2-48 ARM720T Cache结构图
2. 处理器核StrongARM SA-110 StrongARM处理器核SA-110是基于StrongARM处理器内核SA-1,增加了可至16K字节的指令Cache (I-Cache),可至16K字节的数据Cache (D-Cache)及相应的存储器管理单元I-MMU/D-MMU,同时,还有JTAG测试,写缓冲器和时钟/控制等逻辑。
SA-110处理器核的16K字节指令Cache分成512行,每行32字节(即8条指令),采用了分段的32路全相联的CAM-RAM映像机制,循环法的置换淘汰算法。相应的主存储器每块大小也为32字节,与Cache中每一行相对应。Cache的允许、禁止和排空通过存储器管理表格的软件控制下进行。 SA-110处理核的数据Cache可至16K字节(在Intel的SA-1110处理器芯片中,数据Cache为8K字节)。与指令Cache一样,也分成512行,每行32字节(8个字);也采用了分段的32路全相联的CAM-RAM映像机制,循环法的置换淘汰算法。同样,主存储器的每块容量也为32字节 图2-54 StongARM SA-110系统结构图