870 likes | 1.12k Views
第 5 章 ARM 及 XScale 介绍. ARM 微处理器概述. ARM(Advanced RISC Machines) ,既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字。
E N D
ARM(Advanced RISC Machines),既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字。 1991年ARM公司成立于英国剑桥,主要出售芯片设计技术的授权。目前,采用ARM 技术知识产权(IP)核的微处理器,即我们通常所说的ARM微处理器,已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统等各类产品市场,基于ARM技术的微处理器应用约占据了32位RISC微处理器75%以上的市场份额,ARM技术正在逐步渗入到我们生活的各个方面。
ARM公司是专门从事基于RISC技术芯片设计开发的公司,作为知识产权供应商,它本身不直接从事芯片生产,靠转让设计许可,由合作公司生产各具特色的芯片,世界各大半导体生产商从ARM公司购买其设计的ARM微处理器核,根据各自不同的应用领域,加入适当的外围电路,从而形成自己的ARM微处理器芯片进入市场。ARM公司是专门从事基于RISC技术芯片设计开发的公司,作为知识产权供应商,它本身不直接从事芯片生产,靠转让设计许可,由合作公司生产各具特色的芯片,世界各大半导体生产商从ARM公司购买其设计的ARM微处理器核,根据各自不同的应用领域,加入适当的外围电路,从而形成自己的ARM微处理器芯片进入市场。 目前,全世界有几十家大的半导体公司都使用ARM公司的授权,因此既使得ARM技术获得更多的第三方工具、制造、软件的支持,又使整个系统成本降低,从而使产品更容易进入市场被消费者所接受,更具有竞争力。
ARM处理器系列 下面所列的是ARM微处理器的几个系列,以及其他厂商基于ARM体系结构的处理器,这些处理器除了具有ARM体系结构的共同特点以外,每一个系列的ARM微处理器都有各自的特点和应用领域。 ◆ ARM7系列 ◆ ARM9系列 ◆ ARM9E系列 ◆ ARMl0E系列 ◆ SecurCore系列 ◆ Intel的Xscale ◆ Intel的StrongARM
Xscale处理器 • Xscale处理器是基于ARMv5TE体系结构的解决方案,是一款性能全、性价比高、功耗低的处理器。 • 它支持16位的Thumb指令和DSP指令集,已使用在数字移动电话、个人数字助理和网络产品等场合。 • Xscale处理器是Intel目前主要推广的一款ARM微处理器。
RISC体系结构 ARM处理器实现加载/存储(load/store)体系结构是典型的RISC处理器。只有加载和存储指令可以访问存储器。数据处理指令只对寄存器的内容进行操作。
精简指令集计算机RISC(Reduced Instruction Set Computer)结构的产生是相对于传统的复杂指令集计算机CISC (Complex Instruction Set Computer)结构而言的。 传统的CISC计算机的指令集随着计算机的发展而引入了各种各样的复杂指令,使得指令集和为此要实现这些指令的计算机体系结构越来越复杂,已经不堪重负。
经过大量的研究和分析,发现在CISC的指令集中,各种指令的使用频度相差悬殊。经过大量的研究和分析,发现在CISC的指令集中,各种指令的使用频度相差悬殊。 大概有20%的指令被反复使用,使用量约占整个程序的80%;而有80%左右的指令则很少使用,其使用量约占整个程序的20%。这就是所谓的20%—80%定律。
RISC特点如下: • 指令规整、对称、简单。指令小于100条,基本寻址方式有2~3种。 • 单周期指令。 • 指令字长度一致,单拍完成,便于流水操作; • ARM7 三级流水线:取指、译码、执行; • ARM9 五级流水线; • ARMl0 六级流水线。 • 大量的寄存器。寄存器不少于32个。数据处理器的指令只对寄存器的内容操作。只有加载/存储指令可以访问存储器。
几种常用的调试方法 • 指令集模拟器 一种利用PC机端的仿真开发软件模拟调试的方法。 • 驻留监控软件 驻留监控程序运行在目标板上,PC机端调试软件可通过并口、串口、网口与之交互,以完成程序执行、存储器及寄存器读写、断点设置等任务 • JTAG仿真器 通过ARM芯片的JTAG边界扫描口与ARM核进行通信,不占用目标板的资源,是目前使用最广泛的调试手段 • 在线仿真器 使用仿真头代替目标板上的CPU,可以完全仿真ARM芯片的行为。但结构较复杂,价格昂贵,通常用于ARM硬件开发中
什么是JTAG? • JTAG是Joint Test Action Group的缩写是IEEE1149.1标准 • JTAG的建立使得集成电路固定在PCB上,只通过边界扫描便可以被测试 • 在ARM7TDMI处理器中,可以通过JTAG直接控制ARM的内部总线,IO口等信息,从而达到调试的目的
Debug主控端 运行ARM公司或第三方 提供的调试软件的PC机 协议转换器 负责转换Debug主控端发出的 高级ARM调试指令为 底层的和ARM内核通信的 处理器的开发系统 调试目标机 ARM的JTAG调试接口 1、ARM的JTAG调试结构 一个典型的ARM基于JTAG调试结构如图所示。
Debug主控(Host)通常是运行有ARM公司或者第三方提供的调式软件的PC,通常用的调试软件有ARM Debug for Window(ADW),Linux下的arm-elf-gdb等。通过这些调试软件,可以发送高级的ARM指令,比如:设置断点,读写存储器,单步跟踪,全速运行等。
协议转换器(Protocol converter)负责转换Debug主控端发出的高级ARM调式命令为底层的和ARM内核通信的JTAG命令。 Debug主控端和协议转换器之间的介质可以有很多种,比如:以太网,USB,RS-232,并口等。主控端和协议转换器之间的通信协议最典型的就是ARM公司提供的Angle标准,也可以是第三方厂家自己定义的标准。 关于Angle的协议,请参考ARM SDT和ADS,ajj公司的OpenICE32,EPI公司的Jeeni等。 Debug目标板就是指系统的调试对象。
JTAG的典型信号 • TMS: 测试模式选择(Test Mode Select),通过TMS信号控制JTAG状态机的状态 • TCK :JTAG的时钟信号 • TDI:数据输入信号 • TDO :数据输出信号 • nTRST:JTAG复位信号,复位JTAG的状态机和内部的宏单元(Macrocell)
JTAG与Angel • JTAG调试:协议转换器解释上位机传送过来的命令,通过JTAG控制ARM执行。 • Angel调试:协议转换器可以直接做为目标板的Firmware的一部分。直接执行从宿主机传送过来的调试命令;并回送相应的数据。 • Angel可以节省专门的JTAG仿真器,但是,它需要软件,或者是嵌入式操作系统的支持,做不到完全的实时仿真。而JTAG仿真是通过硬件和控制ARM的EmbeddedICE实现的,可以做到实时仿真。
数据和指令类型 • ARM采用的是32位架构。 • ARM约定: • Byte: 8 bit • Halfword: 16 bits(2 bytes) • Word: 32 bits(4 bytes) • 大部分ARM core提供: • ARM指令集(32-bit) • Thumb指令集(16-bit)
数据类型 • 字(Word) 字的长度为32位,而在8位/16位处理器体系结构中,字的长度一般为16位,请注意区分。 • 半字(Half-Word) 半字的长度为16位,与8位/16位处理器体系结构中字的长度一致。 • 字节(Byte) 各种处理器体系结构中,字节的长度均为8位。
ARM微处理器的工作状态 • 从编程的角度看,ARM微处理器的工作状态一般有两种,并可在两种状态之间切换: • ARM状态,此时处理器执行32位的字对齐的ARM指令; • Thumb状态,此时处理器执行16位的、半字对齐的Thumb指令。
ARM处理器在两种工作状态之间可以切换: • 进入Thumb状态。 当操作数寄存器的状态位(地址的最低位,即位[0])为1时,执行BX指令进入Thumb状态。如果处理器在Thumb状态进入异常,则当异常处理(IRQ、FIQ、Undef、Abort 和 SWI)返回时,自动转换到Thumb状态。 • 进入ARM状态。 当操作数寄存器的状态位(位[0])为0时,执行BX指令进入ARM状态。处理器进行异常处理(IRQ、FIQ、Reset、Undef、Abort 和 SWI ARM状态执行)。在此情况下,把PC 放人异常模式链接寄存器中。从异常向量地址开始执行也可以进入ARM状态。
处理器工作模式 ARM微处理器支持7个基本工作模式,分别为: • 用户模式(User):非特权模式,大部分任务执行在这种模式,ARM处理器正常的程序执行状态。 • 快速中断模式(FIQ):当一个高优先级(fast)中断产生时将会进入这种模式,用于高速数据传输或通道处理。 • 外部中断模式(IRQ):当一个低优先级(normal)中断产生时将会进入这种模式,用于通用的中断处理。 • 管理模式(Supervisor):当复位或软中断指令执行时将会进入这种模式,操作系统使用的保护模式,系统复位后的缺省模式。
中止模式(Abort):当存取异常时将会进入这种模式。中止模式(Abort):当存取异常时将会进入这种模式。 • 1.指令中止模式:指令预取终止时进入该模式。 • 2.数据访问中止模式:当数据访问终止时进入该模式,可用于虚拟存储及存储保护。 • 指令未定义模式(Undef):当执行未定义指令时会进入这种模式,支持硬件协处理器指令的软件仿真。 • 系统模式(System):使用和User模式相同寄存器集的特权模式,运行具有特权的操作系统任务。
ARM微处理器的运行模式可以通过软件改变,也可以通过外部中断或异常处理改变。ARM微处理器的运行模式可以通过软件改变,也可以通过外部中断或异常处理改变。 大多数的应用程序运行在用户模式下,当处理器运行在用户模式下时,某些被保护的系统资源是不能被访问的。 除用户模式以外,其余的所有6种模式称为非用户模式或特权模式(Privileged Modes); 其中除去用户模式和系统模式以外的5种又称为异常模式(Exception Modes),常用于处理中断或异常,以及需要访问受保护的系统资源等情况。
处理器启动时的模式转换图 多种特权模式变化 用户程序的运行模式 超级模式 (Supervisor) 复位后的缺省模式 一般为用户模式 User 主要完成各模式的堆栈设置,注意不要进入用户模式 处理器模式
寄存器 • ARM 的中央寄存器集是16 个用户寄存器R0 – R15。这些寄存器均是32 位宽度,R0 – R12没有其他特殊功能,寄存器R13 – R15在CPU中有特殊功能。 • R13被用作堆栈指针(stack pointer,SP),保存当前处理器模式的堆栈的栈顶。 • R14被称为链接寄存器(link register,LR),保存调用子函数的返回地址。 • R15是程序计数器(program counter,PC)。其内容是处理器要取的下一条指令的地址。
ARM状态下的寄存器组织 • 程序状态寄存器: • CPSR • (current program status register) • 当前的程序状态寄存器 • SPSR • (saved program status register) • 备份的程序状态寄存器
ARM微处理器共有37个32位寄存器。 • 1个用作PC • 1个用作CPSR • 5个用作SPSR • 30个为通用寄存器 • 当前处理器的模式决定着哪组寄存器可操作,任何模式都可以存取: • 相应的R0 – R12子集 • 相应的R13(SP),R14(LR) • 相应的R15(PC) • 相应的CPSR • 特权模式(除system模式)还可存取: • 相应的SPSR 6个状态寄存器
Thumb状态下和ARM状态下的R0~R7是相同的 • Thumb状态下和ARM状态下的CPSR和所有的SPSR是相同的 • Thumb状态下的SP对应于ARM状态下的R13 • Thumb状态下的LR对应于ARM状态下的R14 • Thumb状态下的程序计数器对应于ARM状态下的R15 (1) Thumb状态下的寄存器组织与ARM状态下的寄存器组织的关系
(2) 访问THUMB状态下的高位寄存器(Hi-registers) 在Thumb状态下,高位寄存器R8~R15并不是标准寄存器集的一部分,但可使用汇编语言程序有限制地访问这些寄存器,将其用作快速的暂存器. 使用带特殊变量的 MOV指令,数据可以在低位寄存器和高位寄存器之间进行传送,高位寄存器的值可以使用CMP和ADD指令进行比较或加上低位寄存器中的值。
(3) 程序状态寄存器 ARM体系结构包含一个当前程序状态寄存器(CPSR)和5个备份的程序状态寄存器 (SPSRs)。 备份的程序状态寄存器用来进行异常处理,其功能包括: • 保存ALU中的当前操作信息。 • 控制允许和禁止中断。 • 设置处理器的运行模式。 程序状态寄存器每一位的安排如图所示.
① 条件码标志(Condition Code Flags) N、Z、C、V均为条件码标志位。它们的内容可被算术或逻辑运算的结果所改变,并且可以决定某条指令是否被执行。 在ARM状态下,绝大多数的指令都是有条件执行的。在Thumb状态下.仅有分支指令是有条件执行的。
运行模式位M[4:0]:M0、M1 、 M2、M3、M4是模式位。这些位决定了处理器的运行模式。具体含义如下。 由表可知,并不是所有的运行模式位的组合都是有效的,其他的组合结果会导致处理器进入一个不可恢复的状态。
异常 异常(exception)由内部或外部源产生以引起处理器处理一个事件,即当正常的程序执行流程发生暂时的停止时。例如,外部中断或试图执行未定义指令都会引起异常。在处理异常之前,处理器状态必须保留,以便在异常处理程序完成后,原来的程序能够重新执行。 处理器允许多个异常同时发生,它们将会按固定的优先级进行处理。 ARM支持7种类型的异常。列出了异常的类型以及处理这些异常的处理器模式。异常出现后,强制从异常类型对应的固定存储器地址开始执行程序。这些固定的地址称为异常向量(Exception Vectors)。
高端向量 一些ARM实现允许异常向量的定位由32位地址空间低端的正常地址范围Ox00000000~Ox000000lC,移到接近于地址空间高端的另一地址范围0xFFFF0000~0xFFFF00lC。 这些改变后的地址位置称为高端向量。
异常的进入和退出 只要正常的程序流程被暂时停止,则异常发生,例如服务外部的中断。 在异常被处理之前,必须保存当前的处理器状态,以便当处理程序完成后,原来的程序能重新开始。 如果几种异常同时发生,则对它们按固定的次序处理,可参考异常优先级。
当异常产生时,ARM core: • 拷贝CPSR到SPSR_<mode> • 设置适当的CPSR位: • 改变处理器状态进入ARM态 • 改变处理器模式进入相应的异常模式 • 设置中断禁止位禁止相应中断(如果需要) • 保存返回地址到LR_<mode> • 设置PC为相应的异常向量
返回时,异常处理需要: • 从SPSR_<mode>恢复CPSR • 从LR_<mode>恢复PC • Note:这些操作只能在ARM态执行
Xscale系统结构PXA255处理器结构与特性XSBase255开发平台介绍Xscale系统结构PXA255处理器结构与特性XSBase255开发平台介绍
Xscale系统结构----Xscale超级流水线 • PXA255拥有7级超级流水线,主要由主流水线、MAC流水线和内存访问流水线组成。
Xscale系统结构----Xscale超级流水线 • 主流水线 • F1/F2指令读取(给下一级的指令译码级提交下一条要执行的指令。是许多重要功能单元所处之地。) • ID指令译码 (接收IFU中的指令字节和发送到RF寄存器文件/移位级的译码寄存器信息) • RF寄存器文件/移位级(主要对寄存器文件单元或者RFU进行读写,为ALU操作、MAC操作、内存数据Cache的读取和协处理器接口提供相关数据) • X1执行级 (执行ALU计算、条件指令执行和分支目标确定) • X2执行级 (包含程序状态寄存器PSRs 并选择哪些需要在XWB级写入RFU中。) • XWB写回级(当 一条指令到达写回级时将写回寄存器文件单元RFU)