ARM体系结构
目录 1 总体介绍 2 ARM处理器的分类 3 流水线(pipeline) 4 模式(model)和寄存器 5 异常和异常向量表 6 存储组织 7 AMBA总线
1 总体介绍
1.1 ARM公司和ARM处理器 1)ARM是一个CPU内核。ARM公司自己并不生产或销售芯片,它采用技术授权模式,通过出售芯片技术授权,收取授权费和技术转让费。 2)基于ARM内核的处理器是目前消费类电 子市场中占有量第一的处理器,尤其是 手机行业。 3)ARM是“Advanced RISC Machine” 的缩写,最早的ARM处理器诞生于 80年代的英国。 The ARM processor core originates within a British computer company called Acorn. In the mid-1980s they were looking for replacement for the 6502 processor used in their BBC computer range, which were widely used in UK schools. None of the 16-bit architectures becoming available at that time met their requirements, so they designed their own 32-bit processor. Other companies became interested in this processor, including Apple who were looking for a processor for their PDA project (which became the Newton). After much discussion this led to Acorn’s processor design team splitting off from Acorn at the end of 1990 to become Advanced RISC Machines Ltd, now just ARM Ltd. Thus ARM Ltd now designs the ARM family of RISC processor cores, together with a range of other supporting technologies. One important point about ARM is that it does not fabricate silicon itself, but instead just produces the design - we are an Intellectual Property (or IP) company. Instead silicon is produced by companies who license the ARM processor design.
multi-layer architecture single-layer subsystem 知识产权:产品、规划和路线图 CPUs 从ARMv4T 到ARMv6 结构体系 ARM 系统级 IP 和设计方法 AMBA Reference methodologies 软件 IP Media engines - Move™, Swerve 3D™ 先进技术 Java, security, multiprocessor 软件开发工具 RealView™ - 开发工具和平台 S2 S1 M2 M3 S3 M1 AMBA Interconnect S5 S4 M4 M5 S6 Arbiter multi-layer architecture High-speed 64-bit single-layer subsystem Lower speed, 32-bit, Bridge
ARM PRODUCTE
ARM Partnership Model ARM公司是嵌入式RISC处理器的知识产权IP(Intellectual Property)供应商。目前世界前5大半导体公司全部使用了ARM的技术授权,而前10大半导体公司中有9家,前25大半导体公司中有23家都采用了ARM的技术授权,全世界有70多家公司生产ARM芯片。基于ARM技术的处理器已经占据了32位RISC芯片75%的市场份额。随着ARM/MIPS/ARC等成熟内核的推出,很多过去没有32位cpu研发能力的半导体公司进入这一行列。授权方面,ARM7已经发出了70多个,ARM9为40多个,最新的ARM11的客户有TI、Qualcomm和LSI .
何谓嵌入式产品 “以应用为中心、以计算机技术为基础、软件硬件可裁剪、功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。”
1.2 ARM处理器的使用量 ARM 2003
1.3 ARM处理器的特点 支持CACHE和MMU 冯·诺依曼体系结构/哈佛体系结构 RISC指令集 固定的32位指令 Load/Store体系结构 大多数指令单周期完成 流水线执行 Thumb\DSP\jazeller功能扩展 低功耗
支持CACHE和MMU (1) 块数据 高速数据 地址 数据 高速缓存控制器 CACHE 主存 写缓冲器 CPU 1、为什么采用高速缓存 微处理器的时钟频率比内存速度提高快得多,高速缓存可以提高内存的平均性能。 2、高速缓存的工作原理 高速缓存是一种小型、快速的存储器,它保存部分主存内容的拷贝。 CPU 高速缓存控制器 CACHE 主存 数据 高速数据 地址 写缓冲器 块数据
支持CACHE和MMU (2) MMU(Memory Management Unit) 虚实地址变换 内存地址访问保护
冯·诺依曼体系结构模型 ARM7 指令寄存器 控制器 存储器 程序 指令0 指令1 指令2 指令3 指令4 数据通道 数据 输入 输出 中央处理器 数据0 数据1 数据2
1)数据与指令都存储在同一存储区中,取指令与取数据利用同一数据总线。 2)被早期大多数计算机所采用 3)ARM7——冯诺依曼体系 结构简单,但速度较慢。取指不能同时取数据
哈佛体系结构模型 ARM9 + 指令寄存器 控制器 程序存储器 地址 指令0 指令1 指令 指令2 地址 数据存储器 数据通道 输入 输出 数据0 中央处理器 数据1 数据 数据2
1)程序存储器与数据存储器分开. 2)提供了较大的存储器带宽,各自有自己的总线。 3)适合于数字信号处理. 4)大多数DSP都是哈佛结构. 5)ARM9是哈佛结构 取指和取数在同一周期进行,提高速度,
RIS C和 C IS C是目前设计制造微处理器的两种典型技术,虽然它们都是试图在体系结构、操作运行、软件硬件、编译时间和运行时间等诸多因素中做出某种平衡,以求达到高效的目的,但采用的方法不同,因此,在很多方面差异很大,它们主要有: RISC是一种设计思想,其目的是设计出一套能在高时钟频率下但周期执行,简单而有效的指令集。降低硬件的复杂程度,提高对编译器的要求。
指令集 CISC复杂指令集(Complex Instruction Set Computer) 具有大量的指令和寻址方式 8/2原则:80%的程序只使用20%的指令 大多数程序只使用少量的指令就能够运行。 CISC CPU 包含有丰富的单元电路,因而功能强、面积大、功耗大。 RISC:精简指令集(Reduced Instruction Set Computer) 在通道中只包含最有用的指令 确保数据通道快速执行每一条指令 使CPU硬件结构设计变得更为简单 RISC CPU包含较少的单元电路,因而面积小、功耗低
RISC与CISC CISC RISC IF ID IF ID ALU MEM REG REG ALU MEM 退出 开始 微操作通道 退出 单通数据通道
寄存器 RISC指令集拥有更多的通用寄存器,每个可以存放数据和地址,寄存器为所有的数据操作提供快速的存储访问。 CISC指令集 多用于特定目的的专用寄存器。
LOAD –STORE 结构 RISC结构 Cpu 仅处理寄存器中的数据,采用独立的、专用的LOAD –STORE 指令来完成数据在寄存器和外存之间的传送。(访存费时,处理和存储分开,可以反复的使用保存在寄存器中的数据,而避免多次访问外存)。 CISC结构 能直接处理存储器中的数据。
流水线操作 Add 取指 译码 执行add 取指 译码 执行sub Sub Cmp 取指 译码 执行cmp 时间 流水线技术:几个指令可以并行执行 提高了CPU的运行效率 内部信息流要求通畅流动 Add 取指 译码 执行add 取指 译码 执行sub Sub Cmp 取指 译码 执行cmp 时间
1.4 初始ARM 结构
StrongARM, XScale是英特尔持的有商标 version ARM1136J(F) V6 XScaleTM ARM1022E V5TE V5TEJ ARM1020 ARM9E ARM926EJ ARM1026EJ StrongARM® ARM720T V4 V4T ARM7TDMI ARM920T 1994 1996 1998 2000 2002 2004 2006 time StrongARM, XScale是英特尔持的有商标
ARM 架构(Architecture) Architecture v4T v5TE v5TEJ v6 THUMBTM DSP 特性集 Architecture v4T v5TE v5TEJ v6 THUMBTM DSP JazelleTM Media 不断创新以提升性能 THUMBTM: 35% 代码压缩 DSP 扩充: 定点 DSP 的高性能 JazelleTM: Java 性能显著提高, 最高到8倍 Media 扩充: 音频/视频性能显著提高, 最高到4倍 向下兼容以保护软件投入 Thumb:16位指令集,用以改善代码密度; DSP:用于DSP应用的算术运算指令集; Jazeller:允许直接执行Java代码的扩充。
1.5 命名的含义 标志 含义 说明 T 支持Thumb指令集 Thumb指令集版本1:ARMv4T Thumb指令集版本2:ARMv5T D 片上调试 M 支持长乘法 32位乘32位得到64位,32位的乘加得到64位 I Embedded ICE E DSP指令 增加了DSP算法处理器指令:16位乘加指令,饱和的带符号数的加减法,双字数据操作,cache预取指令 J Java加速器Jazelle 提高java代码的运行速度 S 可综合 提供VHDL或Verilog语言设计文件
ARM processor’s name ARM 926EJ-S Family number 7: ARM7 9: ARM9 Synthesizable Extensions E: DSP extension J: Jazelle extension T: Thumb support … Memory system 2: Cache, MMU, Process ID 4: Cache, MPU 6: Write buffer, no cache Memory size 0: Cache size (4-128KB) 2: Reduced cache size 6: TCM
目录 1 总体介绍 2 ARM处理器的分类 3 流水线(pipeline) 4 模式(model)和寄存器 5 异常和异常向量表 6 存储组织 7 AMBA总线
2 ARM处理器的分类
2 ARM处理器的分类 有学员问:XScale是ARM几? 2.1 基于处理器内核的分类 ARM7T,ARM7E,ARM9,ARM9E,ARM10T,ARM10E,ARM11 2.2 基于指令集体系结构的分类 v4T,v5T,v5TE,v5TEJ,v6 有学员问:XScale是ARM几?
2.1 ARM Core(ARM核) 处理器核/整数核(Processor Core/Integer Core):ARM7TDMI, ARM9TDMI, ARM9E-S, ARM10TDMI,ARM10E等。 ARM CPU核(ARM CPU Cores):ARM710T/720T/740T, ARM920T/940T, ARM946E-S, ARM966E-S, ARM1020E等。 基于ARM Core CPU的应用处理器,比如:Intel的PXA25x,Philip的lpc22xx系列, Samsung的S3C44B0等。
2.1.1 ARM7T和ARM7E Family Unified Cache 内存管理 流水线级别 Thumb DSP Jazelle ARM7TDMI 无 3 有 ARM7TDMI-S ARM710T/720T 8k MMU ARM740T 8k或4k Protection Unit ARM7EJ-S 无 3 有
2.1.1 ARM7系列的升级 Embedded Trace Macrocell---- ETM
2.1.2 ARM9 Family Cache 内存管理 流水线级别 Thumb DSP Jazelle ARM9TDMI 无 5 有 16K/16k MMU ARM922T 8k/8k ARM940T 4k/4k Protection Unit
2.1.2 ARM9系列的升级
2.1.3 ARM9E Family Cache 内存管理 流水线级别 Thumb DSP Jazelle ARM9E-S 无 5 有 4k-1M/4k-1M Protection Unit ARM966E-S ARM968E-S ARM9EJ-S 无 5/6 有 ARM926EJ-S 14k-128k/4k-128k MMU
2.1.3 ARM9E系列的升级 ARM966E-S ARM946E-S ARM926EJ-S
2.1.4 ARM10E和ARM10T Family Cache 内存管理 流水线 级别 Thumb DSP Jazelle ARM10E 无 6 有 ARM1020E 32k/32k MMU ARM1022E 16k/16k ARM10EJ-S 无 6 有 ARM1026EJ-S 0,4-128k/0,4-128k MMU ARM10TDMI 无 6 有 ARM1020T 32k/32k MMU
2.1.5 ARM11 Family Cache 内存管理 流水线级别 Thumb DSP Jazelle 浮点运算 ARM1136J-S 4-64k MMU 8 有 无 ARM1136JF-S ARM1156T2-S 可配置 9 Thumb-2 ARM1156T2F-S
2.1.6 StrongARM和XScale SA-1110 (基于StrongARM) 内核SA-1 16k I-Cache + 8k D-Cache I-MMU + D-MMU PXA25x/26x/27x IXP2400(基于XScale) 内核XScale 7/8级流水线 32k I-Cache + 32k D-Cache
注:v5T支持的Thumb是对v4T中的Thumb的扩展 2.2 指令集体系结构(ISA) Thumb DSP Jazelle Media TrustZone Thumb-2 v4 StrongARM v4T * ARM7T, ARM9 v5T ARM10T,XScale v5TE ARM9E, ARM10E v5TEJ ARM7EJ,ARM9EJ, ARM10EJ v6 ARM1136J(F)-S v6Z v6T2 ARM1156T2(F)-S 注:v5T支持的Thumb是对v4T中的Thumb的扩展
2.2 指令集体系结构
目录 1 总体介绍 2 ARM处理器的分类 3 流水线(pipeline) 4 模式(model)和寄存器 5 异常和异常向量表 6 存储组织 7 AMBA总线
3 流水线(pipeline)
流水线方式是把一个重复的过程分解为若干个子过程,每个子过程可以与其他子过程同时进行。由于这种工作方式与工厂中的生产流水线十分相似,因此,把它称为流水线工作方式。 随着流水线的级数增加(深度),每一级的工作量减少这样处理器的工作在更高频率,同时也改善了性能。 但同时增加了延迟,因为在内核执行一条指令前,需要更多的周期来充填流水线。 流水线的级数增加也意味着在某些数据段之间产生数据相关。
3.1 ARM7的流水线 指令流水线的目的是提高执行速度。PC指向的是预取指令,因此如果直接读取PC值,得到的是“当前指令地址+8” 从内存中取指令 指令译码 执行指令/读写REG
指令流水线 指令流水线的目的是提高执行速度。PC指向的是预取指令,因此如果直接读取PC值,得到的是并不是当前正在执行的指令地址。 CUP中的一条指令的执行可以分若干个阶段: 1.取指,从存储器中取出指令(fetch) 2.译码,指令译码(dec) 3.取操作数,假定操作数从寄存器组中取(reg) 4.执行运算(ALU) 5.存储器访问(mem) 6.结果写回寄存器(res) 各个阶段的操作相对都是独立的。因此,可以采用流水线的重叠技术,可以大大提高系统的性能。
ARM7TDMI Processor Core 冯·诺依曼 架构 三级流水线 快速中断响应 性能指标: 0.9 Dhrystone MIPs/MHz EmbeddedICE-RT 调试逻辑 No memory management No cache CPI = 1.9 世界上使用最广泛的 32位嵌入式内核 主要应用领域: 个人音频设备 手机和移动通信终端 Modems, xDSL, Cable Modems ATM and Ethernet 网络设备 打印机 数码相机 PDA 机顶盒
指令流水线 使得某些操作达到并行处理的效果,比单纯的串行处理要好。 ARM7 内核使用 3 级流水线,以提高指令流传递给处理器的速度 PC 指向处于指令读取级的指令地址,而不是处于执行级的指令地址 ARM Thumb PC PC FETCH 从存储器读取指令 PC - 4 PC-2 DECODE 译码 读寄存器 移位和算术逻辑运算 写寄存器 PC - 8 PC - 4 EXECUTE Each ARM instruction is one word (or 32 位s), each Thumb instruction one half word. Thus each stage in pipeline is one word (4 bytes), hence the offsets of 4 and 8bytes are used here. Most instructions execute in a single cycle The pipeline only stalls if an instruction takes several cycles to execute. Therefore, in typical operation, the processor can be loading one instruction, decoding another, whilst executing a third. Typically the PC can be assumed to be currently executing instruction plus 8 (normal flow, ARM state) Exceptions might calculate different addresses to return to depending which exception is serviced. When exceptions/ interrupts are taken the address stored in LR varies - see Exception Handling module for more details. When PC used in some data processing operations ( like multiply ) value is unpredictable - see datasheet ( and thus should not be used in this way ) Will consider the effect of pipelining later in this module. Instructions which are skipped because condition codes are not met still take one cycle in the execute stage.
优秀的流水线结构 Cycle 1 2 3 4 5 6 本例中 6 个时钟周期内一共完成了 6 条指令 全部对寄存器进行操作 (单周期执行) 1 2 3 4 5 6 Operation ADD SUB MOV AND ORR EOR CMP RSB Fetch Decode Execute Fetch Decode Execute Fetch Decode Execute Fetch Decode Execute Fetch Decode Execute Fetch Decode Execute Fetch Decode Fetch 本例中 6 个时钟周期内一共完成了 6 条指令 全部对寄存器进行操作 (单周期执行) 指令周期数 (CPI) = 1 The ideal case where all the instructions execute on the registers and the processor does not have to go off chip at all. The pipeline is operating at full capacity. Assumption: single cycle memory, 32 位 wide Typical CPI is 1.9, this was derived from the Drhystone 2.1 code.
流水线执行举例:LDR Cycle 1 2 3 4 5 6 Operation 本例中 6 个时钟周期内一共完成了 4 条指令 1 2 3 4 5 6 Operation Fetch Decode Execute ADD SUB LDR MOV AND ORR Fetch Decode Execute Fetch Decode Execute Data Writeback Fetch Decode Execute Fetch Decode Fetch 本例中 6 个时钟周期内一共完成了 4 条指令 指令周期数(CPI) = 1.5 Not as good as example 1 as the LOAD causes the instruction / data bus to be used for moving data into the chip. This is followed by an internal writeback cycle to the registers. The data bus is used in cycles 1, 2, 3, and 6 for instruction fetch, 4 for data load and 5 is an internal cycle to allow data from the load to be written back into a register. Cycle 3 execute: generate address cycle 4 data: fetch data from memory (data value only available to the core at the end of cycle 4) cycle 5 writeback: write data to register bank The execute in cycle 6 is stalled until the writeback in cycle 5 is complete (using the ALU). Also the instruction fetch in cycle 6 is non-sequential since it follows the load in cycle 4. internal cycles don’t need wait states, but a write to memory might. Important: The address from where instructions are fetched is sequential, but a non-sequential address gets calculated from where the data are loaded from memory!
ARM9TDMI 5 级流水线 性能改进 提升 CPI 至 ~1.5 提高时钟频率 Harvard architecture indicates separate data and instruction memory interfaces - potentially doubling memory bandwidth. This allows more flexibility in pipeline design since instruction fetches can continue whilst data accesses are taking place. Thus, there is benefit to be had from extending the pipeline beyond the 3 stages of the ARM7. Some critical paths have also been removed from the core, allowing the maximum clock speed to be increased. A good example of this is the provision of a separate Thumb instruction decoder, removing the critical path in the Decode stage.
ARM or Thumb Inst Decode ARM9TDMI 流水线 ARM7TDMI ARM decode Instruction Fetch Thumb®ARM decompress Reg Read Reg Write Shift ALU Reg Select FETCH DECODE EXECUTE ARM9TDMI ARM or Thumb Inst Decode Instruction Fetch Memory Access Reg Write Shift + ALU Reg Decode Reg Read FETCH DECODE EXECUTE MEMORY WRITE Pipeline Comparison The point of this foil is to show that with the ARM7TDMI a lot of work was carried out in the execute stage of the pipeline. Now with ARM9TDMI the execute stage has been split out into three stages to allow greater throughput. This then means the CPI is about 1.5 compared against 1.9 for ARM7TDMI, and the operating frequency is approximately double for ARM9TDMI over ARM7TDMI on the same process. Therefore, at least double the processing power is available. It is possible for the pipeline to interlock. Forwarding paths have been provided to minimise this as much as possible, but they can still occur. By using a bit of consideration when writing code they can almost be eliminated.
F - Fetch D - Decode E - Execute I - Interlock M - Memory LDR 内部周期 Cycle 1 2 3 4 5 6 7 8 9 Operation ADD R1, R1, R2 F D E W SUB R3, R4, R1 F D E W LDR R4, [R7] F D E M W ORR R8, R3, R4 F D I E W AND R6, R3, R1 F I D E W EOR R3, R1, R2 F D E W F - Fetch D - Decode E - Execute I - Interlock M - Memory W – Write-back Because the ORR operation makes use of R4 which is loaded by the LDR instruction, it takes one clock cycle to fetch the data from memory, this causes an interlock. After that one clock cycle (cycle 4) the value to be loaded into R7 is available from the DINFWD forwarding path. The register bank would then be updated in cycle 5. 本例中 7 个时钟周期完成 6 条指令, CPI 等于 1.2 Interlock: LDR 后面的指令马上要用到LDR 的结果寄存器,导致插入一个内部周期
3.2 更多级的流水线 ARM10采用了6级流水线,但是处于兼容考虑,直接读取PC值依然等于“当前指令地址+8”。
Xscale 流水线 Harvard 架构 7级超级流水线 性能改进 提升了有效的存储器带宽 同时访问指令和数据存储器 指令存储器接口 数据存储器接口 同时访问指令和数据存储器 7级超级流水线 XScale 超级流水线由主流水线、存储器流水线和MAC 流水线组成 性能改进 提升 CPI 至 ~1.1 提高时钟频率 While the Intel® XScale™ core pipeline is scalar and single issue, instructions may occupy all three pipelines at once. Out of order completion is possible. The following sections discuss general pipeline characteristics.
Xscale 流水线 Main Execution Pipeline Handles data processing instructions F1/F2 Instruction Fetch ID Instruction Decode RF Register File / Operand Shifter X1 ALU Execute X2 State Execute XWB Write-back Memory Pipeline Handles load/store instructions D1/D2 Data Cache Access DWB Data cache writeback MAC Pipeline Handles all multiply instructions M1-M5 Multiplier stages MWB (not shown) MAC write-back - may occur during M2-M5
3.3 指令预取和自修改代码 流水线使得CPU在执行当前指令的同时,从存储器中预取其后若干条指令。 预取的指令不一定得到执行。比如发生跳转或中断。 自修改代码指的是代码在执行过程中可能修改自身。被修改的指令可能和预取得指令不同,从而产生错误。
相邻指令执行的数据相关性会产生指令执行的停顿(stall),严重的会产生数据灾难(hazards)。如图所示,第2条指令的reg操作需要第1条指令执行的结果(res),因此,第2条指令在执行时,不得不产生停顿。
另外碰到分支类指令,那么,会使后面紧接该条指令的几条指令的执行都会无效,如图所示。
值得注意: 1,执行分支指令或直接修改pc而发生跳转时,会使ARM内核清空流水线。 2,ARM 10 采用分支预测技术,通过预测可能的分支并在并在指令执行前装载新的分支地址指令,减少分支影响。 3,即使产生中断,一条处于“执行”阶段的指令也将先完成,流水线的其他指令会被放弃,而从向量表的适当入口开始填充流水线。
目录 1 总体介绍 2 ARM处理器的分类 3 流水线(pipeline) 4 模式(model)和寄存器 5 异常和异常向量表 6 存储组织 7 AMBA总线
4 模式和寄存器
4.1 模式分类 User: 非特权级模式,多数应用程序使用的模式 FIQ: 进入快速中断响应时 IRQ: 进入一般中断响应时 ARM 一共有 7 种执行模式: User: 非特权级模式,多数应用程序使用的模式 FIQ: 进入快速中断响应时 IRQ: 进入一般中断响应时 Supervisor: 复位后的缺省模式,或进入软件中断响应时 Abort: 遇到存储器访问出错时 Undef: 遇到未定义指令时 System: 特权级的User模式 The Programmers Model can be split into two elements - first of all, the processor modes and secondly, the processor registers. So let’s start by looking at the modes. Now the typical application will run in an unprivileged mode know as “User” mode, whereas the various exception types will be dealt with in one of the privileged modes : Fast Interrupt, Supervisor, Abort, Normal Interrupt and Undefined (and we will look at what causes each of the exceptions later on). NB - spell out the word FIQ, otherwise you are saying something rude in German! One question here is what is the difference between the privileged and unprivileged modes? Well in reality very little really - the ARM core has an output signal (nTRANS on ARM7TDMI, InTRANS, DnTRANS on ARM9TDMI, or encoded as part of HPROT or BPROT in AMBA) which indicates whether the current mode is privileged or unprivileged, and this can be used, for instance, by a memory controller to only allow IO access in a privileged mode. In addition some operations are only permitted in a privileged mode, such as directly changing the mode and enabling of interrupts. It is worth noting here also that on the latest ARM cores, that implement ARM Architecture 4, that a seventh mode is implemented : system mode. This is simply a privileged version of user mode.
4.2 ARM处理器的寄存器 1 个PC寄存器 1 个CPSR(当前状态寄存器) 5 个SPSR(状态保存寄存器) 30 个通用寄存器 当前的处理器模式决定了可以访问到的寄存器组. 以下是对所有 模式都有的寄存器 一组特定的 r0-r12 寄存器 一个特定的 r13 (堆栈指针, sp) 和 r14 (连接寄存器, lr) PC寄存器 r15 当前状态寄存器 cpsr 特权模式(System 模式除外)独有的 特定的 spsr (状态保留寄存器) The ARM architecture provides a total of 37 registers, all of which are 32-位s long. However these are arranged into several banks, with the accessible bank being governed by the current processor mode. We will see this in more detail in a couple of slides. In summary though, in each mode, the core can access: a particular set of 13 general purpose registers (r0 - r12). a particular r13 - which is typically used as a stack pointer. This will be a different r13 for each mode, so allowing each exception type to have its own stack. a particular r14 - which is used as a link (or return address) register. Again this will be a different r14 for each mode. r15 - whose only use is as the Program counter. The CPSR (Current Program Status Register) - this stores additional information about the state of the processor: And finally in privileged modes, a particular SPSR (Saved Program Status Register). This stores a copy of the previous CPSR value when an exception occurs. This combined with the link register allows exceptions to return without corrupting processor state.
4.2 ARM处理器的寄存器(续) User/System Supervisor Abort Undefined Interrupt Fast Interrupt R0 R1 R2 R3 R4 R5 R6 R7 R8 R8_FIQ R9 R9_FIQ R10 R10_FIQ R11 R11_FIQ R12 R12_FIQ R13 R13_SVC R13_ABORT R13_UNDEF R13_IRQ R13_FIQ R14 R14_SVC R14_ABORT R14_UNDEF R14_IRQ R14_FIQ PC CPSR SPSR_SVC SPSR_ABORT SPSR_UNDEF SPSR_IRQ SPSR_FIQ
寄存器组织 Current Visible Registers Banked out Registers r15 (pc) cpsr r13 (sp) r14 (lr) spsr r8 r9 r10 r11 r12 Current Visible Registers Banked out Registers User IRQ SVC Undef Abort FIQ Mode Abort Mode r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r15 (pc) cpsr r13 (sp) r14 (lr) spsr Current Visible Registers Banked out Registers User FIQ IRQ SVC Undef IRQ Mode r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r15 (pc) cpsr r13 (sp) r14 (lr) spsr Current Visible Registers Banked out Registers User FIQ SVC Undef Abort r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 (sp) r14 (lr) r15 (pc) cpsr spsr FIQ IRQ SVC Undef Abort User Mode Current Visible Registers Banked out Registers SVC Mode r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r15 (pc) cpsr r13 (sp) r14 (lr) spsr Current Visible Registers Banked out Registers User FIQ IRQ Abort Undef r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 (sp) r14 (lr) r15 (pc) cpsr spsr FIQ IRQ SVC Undef Abort User Mode Current Visible Registers Banked out Registers Undef Mode r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r15 (pc) cpsr r13 (sp) r14 (lr) spsr Current Visible Registers Banked out Registers User FIQ IRQ SVC Abort r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 (sp) r14 (lr) r15 (pc) cpsr spsr FIQ IRQ SVC Undef Abort User Mode Current Visible Registers Banked out Registers r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 (sp) r14 (lr) r15 (pc) cpsr spsr FIQ IRQ SVC Undef Abort User Mode Current Visible Registers Banked out Registers r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 (sp) r14 (lr) r15 (pc) cpsr spsr FIQ IRQ SVC Undef Abort User Mode Current Visible Registers Banked out Registers This animated slide shows the way that the banking of registers works. On the left the currently visible set of registers are shown for a particular mode. On the right are the registers that are banked out whilst in that mode. Each key press will switch mode: user -> FIQ ->user -> IRQ -> user ->SVC -> User -> Undef -> User -> Abort and then back to user. The following slide then shows this in a more static way that is more useful for reference
Register Organization Summary User FIQ IRQ SVC Undef Abort r8 r9 r10 r11 r12 r13 (sp) r14 (lr) r15 (pc) cpsr r0 r1 r2 r3 r4 r5 r6 r7 User mode r0-r7, r15, and cpsr User mode r0-r12, r15, and cpsr User mode r0-r12, r15, and cpsr User mode r0-r12, r15, and cpsr User mode r0-r12, r15, and cpsr Thumb state Low registers r8 r9 Thumb state High registers r10 r11 r12 r13 (sp) r13 (sp) r13 (sp) r13 (sp) r13 (sp) r14 (lr) r14 (lr) r14 (lr) r14 (lr) r14 (lr) This slide shows the registers visible in each mode - basically in a more static fashion than the previous animated slide that is more useful for reference. The main point to state here is the splitting of the registers in Thumb state into Low and High registers. ARM register banking is the minimum necessary for fast handling of overlapping exceptions of different types (e.g. ABORT during SWI during IRQ). For nested exceptions of the same type (e.g. re-entrant interrupts) some additional pushing of registers to the stack is required. spsr spsr spsr spsr spsr Note: System mode uses the User mode register set
4.2 ARM处理器的寄存器(续) r0 — r12:通用寄存器。当C和汇编互相调用时,r0 — r3用来传递函数参数,可记为a0 — a3 r13:用于各工作态的堆栈寄存器 (sp) r14:用来保护程序返回地址的链接寄存器 (lr) r15:程序计数器(pc) r8_FIQ — r12_FIQ:允许快速中断处理 r8_User — r12_User:除了FIQ外各模式公用 除了User和System模式外,各种模式都有自己独立的r13和r14
4.3 状态寄存器 条件标识位 N = 结果为负 Z = 结果为零 C = 进位 V = 溢出 Q 标识位 只在 5TE/J 系列中有效 31 28 27 24 23 16 15 8 7 6 5 4 N Z C V Q J U n d e f i n e d I F T mode f s x c 条件标识位 N = 结果为负 Z = 结果为零 C = 进位 V = 溢出 Q 标识位 只在 5TE/J 系列中有效 指示sticky overflow的发生 J 标识位 仅在 5TEJ 系列中有效 J = 1: 处理器处于 Jazelle 状态 中断使能位 I = 1: 禁止 IRQ. F = 1: 禁止 FIQ. T 标识位 只在 xT 系列内核中有效 T = 0: 处理器处于 ARM 状态 T = 1: 处理器处于 Thumb 状态 模式位 指示当前处理器模式 Green psr bits are only in certain versions of the ARM architecture ALU status flags (set if "S" 位 set, implied in Thumb state). Sticky overflow flag (Q flag) is set either when saturation occurs during QADD, QDADD, QSUB or QDSUB, or the result of SMLAxy or SMLAWx overflows 32-bits Once flag has been set can not be modified by one of the above instructions and must write to CPSR using MSR instruction to cleared PSRs split into four 8-bit fields that can be individually written: Control (c) bits 0-7 Extension (x) bits 8-15 Reserved for future use Status (s) bits 16-23 Reserved for future use Flags (f) bits 24-31 bits that are reserved for future use should not be modified by current software. Typically, a read-modify-write strategy should be used to update the value of a status register to ensure future compatibility. Note that the T/J bits in the CPSR should never be changed directly by writing to the PSR (use the BX/BXJ instruction to change state instead). However, in cases where the processor state is known in advance (e.g. on reset, following an interrupt, or some other exception), an immediate value may be written directly into the status registers, to change only specific 位s (e.g. to change mode).
4.3 CPSR/SPSR (续) M[4:0] 模式 Accessible Registers 10000 User PC, R14 to R0, CPSR 10001 FIQ PC, R14_FIQ to R8_FIQ, R7 to R0, CPSR, SPSR_FIQ 10010 IRQ PC, R14_IRQ, R13_IRQ, R12 to R0, CPSR, SPSR_IRQ 10011 SVC PC, R14_SVC, R13_SVC, R12 to R0, CPSR, SPSR_SVC 10111 Abort PC, R14_ABORT, R13_ABORT, R12 to R0, CPSR, SPSR_ABORT 11011 Undef PC, R14_UNDEF, R13_UNDEF, R12 to R0, CPSR, SPSR_UNDEF 11111 System PC, R14 to R0, CPSR (Architecture 4 only)
目录 1 总体介绍 2 ARM处理器的分类 3 流水线(pipeline) 4 模式(model)和寄存器 5 异常和异常向量表 6 存储组织 7 AMBA总线
5异常和异常向量表
5.1 异常的产生 直接异常:软件中断,未定义指令(包括所要求的协处理器不存在时的协处理器命令)和预取指令 间接异常:数据中止(在Load和Store数据访问时的存储器故障) 外部异常:复位,IRQ和FIQ
5.2异常优先级 Reset Data Abort FIQ IRQ Prefetch Abort SWI 异常在当前指令执行完成之后才被响应 多个异常可以在同一时间产生 异常指定了优先级和固定的服务顺序: Reset Data Abort FIQ IRQ Prefetch Abort SWI Undefined instruction 因为DataAort异常的优先级高于FIQ异常,实际上 Data Abort 异常在 FIQ 异常被处理之前被注册, 数据异常被进入, 但是控制立即被转回 FIQ 处理程序,当 FIQ 处理完成,控制返回给Data Abort 处理程序。这意味着如果 FIQ 异常被处理在先,数据传输错误也不会被漏掉。 对于PrefetchAbort异常,指令错误在预取阶段被标记, 但是异常将不会产生指令到达执行阶段。
Reset – 上电时执行 Undef – 当流水线中的某个非法指令到达执行状态时执行 SWI – 当一个软中断指令被执行完的时候执行 Prefetch – 当一个指令被从内存中预取时,由于某种原因而失败,如果它能到达执行状态这个异常才会产生 Data – 如果一个村取指令试图存取一个非法的内存单元,这时异常产生 IRQ – 通常的中断 FIQ – 快速中断
Undefined Instruction 异常处理 5.3异常处理 当异常产生时, ARM core: 拷贝 CPSR 到 SPSR_<mode> 设置适当的 CPSR 位: 改变处理器状态进入 ARM 状态 改变处理器模式进入相应的异常模式 设置中断禁止位禁止相应中断 保存返回地址到 LR_<mode> 设置 PC 到相应的异常向量 返回时, 异常处理需要: 从 SPSR_<mode>恢复CPSR 从LR_<mode>恢复PC 这些操作只能在 ARM 态执行. 0x1C 0x18 0x14 0x10 0x0C 0x08 0x04 0x00 FIQ IRQ (Reserved) Data Abort Prefetch Abort Software Interrupt Undefined Instruction Reset Vector Table Vector table can be at 0xFFFF0000 on ARM720T and on ARM9/10 family devices 在ARM 上的异常处理被控制经由使用叫做向量表的内存块。 位于(通常)内存空间的低端0x0 - 0x1c处。 为了支持 WinCE 应用程序, 大多数带Cach 的内核允许向量表被从 0x0 移动到 0xFFFF0000。所有当前的内核(除 7TDMI, 740T 和 7TDMI-S)都支持,也包括 SA-1100/1110 和 XScale。 可以通过复位时输入使能 HIVECS 或通过 CP15 软件控制。 在向量表中每一个字分配给一个异常类型。 这个字的内容将会是某个形式的分支指令,而不是一个地址。 Reset – 上电时执行 Undef – 当流水线中的某个非法指令到达执行状态时执行 SWI – 当一个软中断指令被执行完的时候执行 Prefetch – 当一个指令被从内存中预取时,由于某种原因而失败,如果它能到达执行状态这个异常才会产生 Data – 如果一个村取指令试图存取一个非法的内存单元,这时异常产生 IRQ – 通常的中断 FIQ – 快速中断 当这些异常中的一个产生时,为了调用适当的异常处理程序,ARM 将执行一系列动作( 如幻灯片上所示 ) 为了返回内核必须: 从 SPSR_<mode> 恢复 CPSR: 这将自动恢复先前的模式、状态( ARM/Thumb )、中断设置和条件代码 用保存在 LR_<mode> 中的返回地址恢复 PC: 这将继续从中断产生的地方开始执行应用程序 返回必须在 ARM 状态下完成,因为没有 Thumb 指令来拷贝 SPSR 回 CPSR 汇编指令中的^ 和S 标记可用于异常返回,恢复PC的同时恢复CPSR。 S标记的例子见前述命令中的“movs”。 如果使用堆栈返回,预先保存在栈中的返回地址要求以做好调整。在异常返回时使用类似如下指令:“ldmfdr13!, (r0-r3,pc)^” 1)“^”后缀不允许在usr和svc模式下使用。 2)如果用在LDM指令中,且寄存器列表中含有PC时,那么除了正常的多寄存器传送外,将SPSR拷贝到CPSR中。这一特点用于异常处理返回。 3)如果使用“^”后缀进行数据传送且寄存器列表不包含PC时,加载/存储的是usr模式的寄存器,而不是当前模式的寄存器。
5.4异常返回指令 相应的指令取决于什么样的异常 带 S 位 把 PC 作为目标寄存器 异常返回: 使用一数据处理指令: 在特权模式下,这些操作不仅更新PC,而且 拷贝SPSR 到 CPSR 从SWI 和 Undef异常返回 MOVS pc,lr 从FIQ, IRQ 和预取异常(Prefect Abort)返回 SUBS pc,lr,#4 从数据异常(Data Abort)返回 SUBS pc,lr,#8 如果 LR 之前被压栈的话使用LDM “^” LDMFD sp!,{pc}^ 党从异常返回时使用单个数据处理指令同时设置 S 标识, PC作为目的寄存器。 在超级用户模式这将不仅更新 PC 而且也拷贝 SPSR 到 CPSR 实际的指令将依据哪一个异常正在被处理 同样可以使用PC 目的寄存器的 LDM 指令( 使用 ^ 限定词 )来返回到先前的模式
汇编指令中的^ 和 S 标记可用于异常返回,恢复PC的同时恢复CPSR。 S标记的例子见前述命令中的“movs”。 如果使用堆栈返回,预先保存在栈中的返回地址要求以做好调整。在异常 返回时使用类似如下指令:“ldmfd r13!, (r0-r3,pc)^” 1)“^”后缀不允许在usr和svc模式下使用。 2)如果用在LDM指令中,且寄存器列表中含有PC时,那么除了正常的多寄存器传送外,将SPSR拷贝到CPSR中。这一特点用于异常处理返回。
Undefined Instruction ARM or Thumb? FIQ ARM Code IRQ (Reserved) Thumb / ARM 混合应用程序 Data Abort Prefetch Abort Software Interrupt Undefined Instruction Thumb Code Reset ARM Code 当异常产生是将自动进入ARM 状态,且需要一个ARM 指令来从异常返回, 显然简单的方法是异常处理使有纯ARM 代码。 尤其是对于那些性能非常关键且可以地位在快速的 32-bits 快的储存其中的异常处理程序– 例如中断处理程序. 然而在其它情况下,如果异常处理程序的主体是 Thumb 代码,用一个ARM代码的桩来实现进入和退出异常,这不仅提高了代码密度而且也提高了在载存储器上的性能。
目录 1 总体介绍 2 ARM处理器的分类 3 流水线(pipeline) 4 模式(model)和寄存器 5 异常和异常向量表 6 存储组织 7 AMBA总线
6 ARM的存储组织
6.1 特点 ARM体系同时支持大尾端/小尾端。 32位地址线/数据线,支持如下数据类型: 字节(byte)8 bits 半字(Half word)16 bits,半字必须对齐2字节边界 字(Word)32 bits,字必须对齐4字节边界 ARM的I/O空间采用统一编址方式。
6.2 Endian Configuration/ 大尾和小尾 ARM 可以通过配置支持两种endian 31 24 23 16 15 8 7 r0 = 0x11223344 11 22 33 44 r1 = 0x100 Big endian STR r0, [r1] Little endian: 3 2 1 0 0 1 2 3 31 24 23 16 15 8 7 Byte Lane 31 24 23 16 15 8 7 11 22 33 44 Memory 44 33 22 11 LDRB r2, [r1] 31 24 23 16 15 8 7 31 24 23 16 15 8 7 R2 = 0x44 00 00 00 44 00 00 00 11 R2 = 0x11 Little endian Big endian Little endian: the least significant byte of the quantity is stored at the lowest memory address in the range of addresses used to store the quantity. Big endian: the most significant byte of the quantity is stored at the lowest memory address in the range of addresses used to store the quantity This has no real relevance unless data is stored as words and then accessed in smaller sized quantities (halfwords or bytes). Which byte / halfword is accessed will depend on the endianess of the system involved. The ARM can be configured either way (using the BIGEND signal, or by setting up CP15 in cached ARMs). Whichever you choose the will have an effect on byte and halfword addressing, as can be seen from the following slide. ARM has no preference for which you use. Most people use a particular setting for either historical reasons (eg come from an Intel background that uses little endian) or for application reasons (eg reading network traffic it is simpler to use big endian).
6.3 非对齐的存储访问 非对齐的取指 不可预知结果。 ARM状态:忽略低2两位;Thumb状态:忽略最低位。忽略由存储器实现。 非对齐的数据访问 执行结果不可预知。 忽略字单元地址的最低两位;忽略半字单元地址的最低位。忽略可能由处理器或存储器完成。
目录 1 总体介绍 2 ARM处理器的分类 3 流水线(pipeline) 4 模式(model)和寄存器 5 异常和异常向量表 6 存储组织 7 AMBA总线
7 AMBA总线
7 AMBA总线 当ARM核作为一个元件集成到复杂的系统芯片上时,需要某种接口和其它元件进行通讯,这就是AMBA总线。 ARM研发的AMBA(Advanced Microcontroller Bus Architecture)提供一种特殊的机制,可将RISC处理器集成在其它IP芯核和外设中,2.0版AMBA标准定义了三组总线: AHB(AMBA高性能总线):用于高性能、高数据吞吐部件,如CPU、DMA、DSP之间的互连 。 ASB(AMBA系统总线):用来作处理器与外设之间的互连 ,将被AHB取代。 APB(AMBA外设总线):为系统的低速外部设备提供低功耗的简易互连。 系统总线和外设总线之间的桥接器提供AHB/ASB部件与APB部件间的访问代理与缓冲。
ARM核 片内RAM DMA 控制器 桥路 UART 定时器 并口 APB AHB/ASB 外部总线 接口 测试接口 控制
AHB用来研发宽带宽处理器芯核的片上总线。 应用于高性能、高时钟频率的系统模块,它构成了高性能的系统骨干总线( back-bone bus )。它主要支持的特性是: 用于高性能、高数据吞吐部件,如CPU、DMA、DSP之间数据突发传输( burst transfer ) 数据分割传输( split transaction ) 流水线方式 一个周期内完成总线主设备( master )对总线控制权的交接 单时钟沿操作 内部无三态实现 更宽的数据总线宽度(最低32位,最高可达1024位,但推荐不要超过256位)
ASB(AMBA系统总线)是第一代AMBA系统总线,同AHB相比,它数据宽度要小一些,它支持的典型数据宽度为8位、16位、32位。它的主要特征如下: 流水线方式 数据突发传送 多总线主设备 内部有三态实现
APB(AMBA外设总线)是本地二级总线(local secondary bus ),通过桥和AHB/ASB相连。它主要是为了满足不需要高速流水线接口或不需要高带宽接口的设备的互连。APB的总线信号经改进后全和时钟上升沿相关,这种改进的主要优点如下: 更易达到高频率的操作 性能和时钟的占空比无关 单时钟沿简化了 更易与基于周期的仿真器集成 APB 只有一个APB桥,它将来自AHB/ASB的信号转换为合适的形式以满足挂在APB上的设备的要求。桥要负责锁存地址、数据以及控制信号,同时要进行二次译码以选择相应的APB设备。
Review: 1 总体介绍 2 ARM处理器的分类 3 流水线(pipeline) 4 模式(model)和寄存器 5 异常和异常向量表 6 存储组织 7 AMBA总线