第2章ARM/THUMB微处理器结构及指令系统 本章简要介绍了ARM/THUMB微处理器的一些基本概念、应用领域及特点,以引导读者进入ARM/THUMB的殿堂。 本章主要内容有: ◆ ARM/THUMB及相关技术简介 ◆ ARM/THUMB微处理器系列 ◆ ARM/THUMB微处理器的结构 ◆ ARM/THUMB指令系统
2.1 ARM微处理器概述 ARM(Advanced RISC Machines),既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字。 1991年ARM公司成立于英国剑桥,主要出售芯片设计技术的授权。目前,采用ARM 技术知识产权(IP)核的微处理器,即我们通常所说的ARM微处理器,已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统等各类产品市场,基于ARM技术的微处理器应用约占据了32位RISC微处理器75%以上的市场份额,ARM技术正在逐步渗入到我们生活的各个方面。
ARM公司是专门从事基于RISC技术芯片设计开发的公司,作为知识产权供应商,它本身不直接从事芯片生产,靠转让设计许可,由合作公司生产各具特色的芯片,世界各大半导体生产商从ARM公司购买其设计的ARM微处理器核,根据各自不同的应用领域,加入适当的外围电路,从而形成自己的ARM微处理器芯片进入市场。 目前,全世界有几十家大的半导体公司都使用ARM公司的授权,因此既使得ARM技术获得更多的第三方工具、制造、软件的支持,又使整个系统成本降低,从而使产品更容易进入市场被消费者所接受,更具有竞争力。
2.1.1 ARM处理器系列 下面所列的是ARM微处理器的几个系列,以及其他厂商基于ARM体系结构的处理器,这些处理器除了具有ARM体系结构的共同特点以外,每一个系列的ARM微处理器都有各自的特点和应用领域。 ◆ ARM7系列 ◆ ARM9系列 ◆ ARM9E系列 ◆ ARMl0E系列 ◆ SecurCore系列 ◆ Intel的Xscale ◆ Intel的StrongARM
1. ARM7微处理器系列 ARM7系列微处理器为低功耗的32位RISC处理器,最适合用于对价位和功耗要求较高的消费类应用。ARM7微处理器系列具有如下特点: 具有嵌入式ICE(In-Circuit Emulator) —RT逻辑,调试开发方便。 极低的功耗,适合对功耗要求较高的应用,如便携式产品。 能够提供0.9MIPS/MHz的三级流水线结构。 代码密度高并兼容16位的Thumb指令集。 对操作系统的支持广泛,包括Windows CE、Linux、Palm OS等。 指令系统与ARM9系列、ARM9E系列和ARMl0E系列兼容,便于产品升级换代。 主频最高可达130MIPS,高速的运算处理能力能胜任绝大多数的复杂应用。
ARM的JTAG调试接口 1。ARM的JTAG调试结构 一个典型的ARM基于JTAG调试结构如图所示。 Debug主控(Host)通常是运行有ARM公司或者第三方提供的调式软件的PC,通常用的调试软件有ARM Debug for Window(ADW),Linux下的arm-elf-gdb等。 通过这些调试软件,可以发送高级的ARM指令,比如:设置簖点,读写存储器,单步跟踪,全速运行等。 协议转换器(Protrocol converter)负责转换Debug主控端发出的高级ARM调式命令为底层的和ARM内核通信的JTAG命令。Debug主控端和协议转换器之间的介质可以有很多种,比如:以太网,USB,RS-232,并口等。主控端和协议转换器之间的通信协议最典型的就是ARM公司提供的Angle标准,也可以是第三方厂家自己定义的标准。 关于Angle的协议,请参考ARM SDT和ADS,ajj公司的OpenICE32,EPI公司的Jeeni等。
协议转换器(Protrocol converter)负责转换Debug主控端发出的高级ARM调式命令为底层的和ARM内核通信的JTAG命令。 Debug主控端和协议转换器之间的介质可以有很多种,比如:以太网,USB,RS-232,并口等。主控端和协议转换器之间的通信协议最典型的就是ARM公司提供的Angle标准,也可以是第三方厂家自己定义的标准。 关于Angle的协议,请参考ARM SDT和ADS,ajj公司的OpenICE32,EPI公司的Jeeni等。 Debug目标板就是指系统的调试对象.以一个典型的ARM7TDMI处理器内核为例,说明ARM7TDMI内核的JTAG调试结构.
ARMJTAG的JTAG宏单元(Macricell)主要包括3条JTAG扫描链(Scan Chain)和一个JTAG的控制TAP状态机。 2.JTAG与AngelJTAG调试: 协议转换器解释上位机传送来的命令,通过JTAG控制ARM执行。 Angle调试:协议转换器可以直接做为目标板Firmware的一部分.直接执行从宿主机转送过来的调试指令;并回送相应数据。 Angel可以节省专门的JTAG仿真器,但是,它需要软件,或者是嵌入式操作系统的支持,做不到完全的实时仿真。而JTAG仿真是通过硬件和控制ARM的EmbeddedICE实现的可以做到实时仿真。
JTAG的基本知识 1.什么是JTAG JTAG是Joint Test Action Group的缩写:是IEEE1149.1标准。 2.使用JTAG的优点 JTAG的建立使得集成电路固定在PCB上,只通过边扫描便可以通过测试。 在ARM7TDMI处理器中,可以通过JTAG直接控制ARM的内部总线,I/O口等信息,从而达到调试的目的。
3. JTAG的典型信号 TMS:测试模式选择(Test Mode Select),通过TMS信号控制JTAG状态机的状态。 TCK:JTAG的时钟信号。 TDI:数据输入信号。 TDO:数据输出信号。 nTRST:JTAG复位信号,复位JTAG的状态机和内部的宏单元(Macrocell)。 4. JTAG状态机 5. JTAG链的组成
ARM7TDMI内核的JTAG扫描链结构 ARM7TDMI内核的JTAG扫描链结构.主要包括3条扫描链:Scan chain0, Scan chain1 Scan chain2. Scan Chain0:有113个扫描单元,包括ARM核的所有I/O,地址数据总线和输入输出控制信号.这条链上的信号复杂,不易控制,但是,包含的信息丰富,可以通过这条链得到ARM7TDMI所有的内核信息。
Scan Chain1:有33个扫描单元,包括ARM核的数据总线和一个断点控制信号。这是一条很有用地链,通过控制这条链,可以控制ARM核执行指定的指令,从而实现对ARM的内部寄存器,协处理器以及外部存储器的读写操作。 Scan Chain2:有38个扫描单元,通过控制EmbeddedICE宏单元,实现对ARM执行指令的断点,观察点控制。EmbeddedICE是集成在ARM内核的中的嵌入式ICE防真器。其结构如图所示。通过对EmbeddedICE的控制,对EmbeddedICE中寄存器的读取,可以获得ARM内核的状态,为程序设置断点以及读取Debug通信通道。
ARM7系列微处理器的主要应用领域为: 工业控制、Internet设备、网络和调制解调器设备、移动电话等多种多媒体和嵌入式应用。 ARM7系列微处理器包括如下几种类型的核: ARM7TDMI、ARM7TDMI-S、ARM720T、ARM7EJ。其中,ARM7TDMI是目前使用最广泛的32位嵌入式RISC处理器,属低端ARM 处理器核。 TDMI的基本含义为: T:支持16位压缩指令集Thumb; D:支持片上Debug; M:内嵌硬件乘法器(Multiplier); I:嵌入式ICE,支持片上断点和调试点。 本书所介绍的Samsung公司的S3C44b0X即属于该系列的处理器。
2. ARM9微处理器系列 ARM9系列微处理器在高性能和低功耗特性方面提供最佳的性能。 具有以下特点: 5级整数流水线,指令执行效率更高。 提供1.1MIPS/MHz的哈佛结构。 支持32位ARM指令集和16位Thumb指令集。 支持32位的高速AMBA总线接口。 全性能的MMU,支持Windows CE、Linux、Palm OS 等多种主流嵌入式操作系统。
MPU支持实时操作系统。 支持数据Cache和指令Cache,具有更高的指令和数据处理能力。 ARM9系列微处理器主要应用于无线设备、仪器仪表、安全系统、机顶盒、高端打印机、数字照相机和数字摄像机等。 ARM9系列微处理器包含ARM920T、ARM922T和ARM940T三种类型,以适用于不同的应用场合。
3. ARM9E微处理器系列 ARM9E系列微处理器为可综合处理器,使用单一的处理器内核提供了微控制器、DSP、Java应用系统的解决方案,极大地减少了芯片的面积和系统的复杂程度。 ARM9E系列微处理器提供了增强的DSP处理能力,很适合于那些需要同时使用DSP和微控制器的应用场合。
ARM9E系列微处理器的主要特点如下: 支持DSP指令集,适合于需要高速数字信号处理的场合。 5级整数流水线,指令执行效率更高. 支持32位ARM指令集和16位Thumb指令集. 支持32位的高速AMBA(先进的微控制器总线体系结构)总线接口. 支持VFP9浮点处理协处理器.
全性能MMU,支持Windows CE、Linux、Palm OS等多种主流嵌入式操作系统。 MPU支持实时操作系统。 支持数据Cache和指令Cache,具有更高的指令和数据处理能力。 主频最高可达300MIPS。
ARM9系列微处理器主要应用于下一代无线设备、数字消费品、成像设备、工业控制、存储设备和网络设备等领域。 ARM9E系列微处理器包含ARM926EJ-S、ARM946E-S和ARM966E-S 3种类型,以适用于不同的应用场合。
4. ARMl0E微处理器系列 ARMl0E系列微处理器具有高性能、低功耗的特点,由于采用了新的体系结构,与同等的ARM9器件相比较,在同样的时钟频率下,性能提高了近50%,同时,ARMl0E系列微处理器采用了两种先进的节能方式,使其功耗极低。
ARMl0E系列微处理器的主要特点如下: 支持DSP指令集,适合于需要高速数字信号处理的场合。 6级整数流水线,指令执行效率更高。 支持32位ARM指令集和16位Thumb指令集。 支持32位的高速AMBA总线接口。
支持VFPl0浮点处理协处理器。 全性能MMU,支持Windows CE、Linux 、 Palm OS等多种主流嵌入式操作系统。 支持数据Cache和指令Cache,具有更高的指 令和数据处理能力。 主频最高可达400MIPS。 内嵌并行读写操作部件。
ARMl0E系列微处理器主要应用于下一代无线设备、数字消费品、成像设备、工业控制、通信和信息系统等领域。 ARMl0E系列微处理器包含ARMl020E,ARMl022E和ARMl026EJ-S 3种类型,以适用于不同的应用场合。
5. SecurCore微处理器系列 SecurCore系列微处理器专为安全需要而设计,提供了完善的32位RISC技术的安全解决方案,因此,SecurCore系列微处理器除了具有ARM体系结构的低功耗、高性能的特点外,还具有独特的优势,即提供了对安全解决方案的支持。 SecurCore系列微处理器除了具有ARM体系结构各种主要特点外,还在系统安全方面具有如下的特点: 带有灵活的保护单元,以确保操作系统和应用数据的安全。 采用软内核技术,防止外部对其进行扫描探测。 可集成用户自己的安全特性和其他协处理器。
SecurCore系列微处理器主要应用于一些对安全性要求较高的应用产品及应用系统,如电子商务、电子政务、电子银行业务、网络和认证系统等领域。 SecurCore系列微处理器包含:SecurCore SCl00、SecurCore SCll0、SecurCore SC200和SecurCoreSC210 4种类型,以适用于不同的应用场合。
6. StrongARM微处理器系列 Intel StrongARM SA-1100处理器是采用ARM体系结构高度集成的32位RISC微处理器。 它融合了Intel公司的设计和处理技术,以及ARM体系结构的电源效率,采用在软件上兼容ARMv4体系结构、同时采用具有Intel技术优点的体系结构。 Intel StrongARM处理器是便携式通信产品和消费类电子产品的理想选择,已成功应用于多家公司的掌上电脑系列产品。
7. Xscale处理器 Xscale处理器是基于ARMv5TE体系结构的解决方案,是一款性能全、性价比高、功耗低的处理器。 它支持16位的Thumb指令和DSP指令集,已使用在数字移动电话、个人数字助理和网络产品等场合。 Xscale处理器是Intel目前主要推广的一款ARM微处理器
2.1.2 RISC体系结构 ARM处理器实现加载/存储(load/store)体系结构是典型的RISC处理器。只有加载和存储指令可以访问存储器。数据处理指令只对寄存器的内容进行操作。
精简指令集计算机RISC (Reduced Instruction Set Computer)结构的产生是相对于传统的复杂指令集计算机CISC (Complex Instruction Set Computer)结构而言的。 尽管在1979年美国加州大学伯克利分校的帕特逊等人即提出了这个名字,但不同的看法使得目前尚未有对 RISC的严格定义。比较普遍的认为是,RISC应该是一种计算机设计的基本原则,它的出现标志着计算机体系结构发展上的一个重要里程碑。
传统的CISC计算机的指令集随着计算机的发展而引入了各种各样的复杂指令,使得指令集和为此要实现这些指令的计算机体系结构越来越复杂,已经不堪重负。 大概有20%的指令被反复使用,使用量约占整个程序的80%;而有80%左右的指令则很少使用,其使用量约占整个程序的20%。这就是所谓的20%—80%定律。
RISC特点如下: 指令规整、对称、简单。指令小于100条,基本寻址方式有2~3种。 单周期指令。 指令字长度一致,单拍完成,便于流水操作; ARM7 三级流水线:取指、译码、执行; ARM9 五级流水线; ARMl0 六级流水线。 大量的寄存器。寄存器不少于32个。数据处理器的指令只对寄存器的内容操作。只有加载/存储指令可以访问存储器。
ARM指令体系结构使用了加载/存储体系结构、固定长32位指令和3地址指令格式的RISC特性;舍弃了寄存器窗口、延迟转移和所有指令单周期的RISC特性。
2.1.3 ARM和Thumb状态 ARM体系结构v4T及以上版本定义了称为Thumb指令集的16位指令集。 Thumb指令集的功能是32位ARM指令集的功能子集。Thumb在性能和代码大小之间提供了出色的折中。 正在执行Thumb指令集的处理器是工作在Thumb状态下。 正在执行ARM指令集的处理器是工作在ARM状态下。
在ARM状态下的处理器不能执行Thumb指令,在Thumb状态下的处理器也不能执行ARM指令。 必须确保处理器不接受对当前状态来说为错误指令集的指令。 每个指令集都包括切换处理器状态的指令。 ARM处理器总是在ARM状态下开始执行代码。 ARM处理器支持7种处理器模式,取决于体系结构版本。
2.1.4. 寄存器 ARM处理器有37个寄存器。 寄存器被安排成部分重叠的组(overlap--ping bank)。 每种处理器模式都有不同的寄存器组。 分组的寄存器在处理处理器异常和特权操作时可得到快速的上下文切换。 通常寄存器R13用做堆栈指针。 在用户模式下,R14用做链接寄存器(LR),在子程序调用时用来保存返回地址。若返回地址保存在通信堆栈中,则它也可用做通用寄存器。
在异常处理模式下,R14用来保存异常的返回地址。 程序计数器用R15(或PC)访问。在ARM状态下每条指令加1个字(4个字节),或在Thumb状态下每条指令加2个字节。分支指令把目的地址加载到程序计数器中。也可以使用数据操作指令直接加载程序计数器。 在执行时,R15不包含当前执行指令的地址。典型情况下,当前正在执行指令的地址对于ARM状态是PC—8,或对于Thumb状态是PC—4。
2.1.5 ARM指令集概述 所有ARM指令是32位长度。 指令以字对准保存,这样ARM状态指令地址的最低2位总是零。 一些指令使用最低有效位判定代码是转向Thumb代码还是ARM代码。具有字节(8位)、半字(16位)、字(32位)带符号或无符号数传送能力。
2.1.6 Thumb指令集概述 所有Thumb指令是16位长度,在存储器中半字对准保存。因此,指令的最低有效位在Thumb状态下总是为零。 操作寄存器中全部为32位值; 数据访问和取指使用全32位地址。 条件分支指令是依据CPSR中ALU的状态标志有条件执行的唯一的Thumb指令。
在Thumb状态下,大多数指令只能访问R0~R7。寄存器R8~R15是被限制访问的寄存器。在Thumb状态下它们用高寄存器表示。 Thumb状态只在分立操作时使用桶式移位,具有LSI、LSR、ASR或ROR指令。 Thumb体系结构的扩充使得在8/16位系统价格下可得到32位性能,即 最小化系统存储器大小和价格下出色的代码密度; 在低系统价格的8或16位总线上由16位存储器得到32位性能。
Thumb是32位体系结构的扩充。 Thumb指令集是大多数常用的32位ARM指令的子集,压缩成16位宽操作码。 在执行时,16位指令透明地实时解压缩成全32位ARM指令且没有性能损失。设计者可以使用16位Thumb和32位ARM指令集。 在于程序级可根据应用需求,灵活地强调性能或代码大小。 Thumb比通常的8和16位CISC/RISC控制器有更好的代码密度,是传统32位体系结构代码大小的一部分。这意味着程序存储器可以更小,因而降低了成本。
3 AMBA总线 先进的微控制器总线体系结构AMBA规范定义了三种总线: AHB(Advanced High-performance Bus):用于连接高性能系统模块。它支持突发数据传输方式及单个数据传输方式,所有时序参考同一个时钟沿; ASB(Advanced System Bus):用于连接高性能系统模块,它支持突发数据传输模式; APB(Advance Peripheral Bus):是一个简单接口支持低性能的外围接口。
一个典型的基于AMBA的微控制器同时集成 AHB(或ASB)和APB接口,如图所示。 ASB总线是旧版的系统的总线,而新版的AHB总线增强了对性能、综合及时序验证的支持。 APB总线通常用作的局部的第二总线,作为AHB或ASB上的单个从属模块。
根据AMBA的规范,连接AHB/ASB和APB的APB桥的唯一功能是提供更简单的接口。 任何由低性能外围设备产生的延迟会由连接高性能(AHB/ASP)总线的桥反映出来。 桥本身仿佛是一个简单APB总线的主设备,它访问与之相连的从设备,并且通过高性能总线上控制信号的子集控制它们。 下面给出AHB、ASB和APB的主要特征.
3.1 AHB AHB是先进的系统总线。 它主要的目的就是连接共性能、高吞吐率的设备,例如CPU、DMA和DSP。 它的主要特性: 高性能新一代总线; 多控制器; 分段传输; 单周期总线控制权移交; 没有三态实现方式;
32~128位总线宽; 包含一种访问保护机制,用来区别特权访问和无特权访问模式,或指令和数据提取等; 突发传输模式最大为16节; 访问空间限制在32位; 提供为较慢设备使用而扼制数据流的机制; 支持仲裁、REQ、GNT和LOCK; 支持字节、半字和字传输。
AHB总线和ASB总线有下列不同的特点: 使用单一时钟沿控制所有操作,有利于综合和设计验证(通过使用静态时序分析和其他相似工具); 使用中心多路器总线方案而不是三态驱动的双向总线; 支持更宽的64位或128位数据总线配置。
3.2 ASB ASB是通用系统总线,是一种微处理器和系统外设的高性能互连,主要特征如下: 多控制器; 突发数据传输方式; 流水线传送; 32-128位总线宽度; 包含一种访问保护机制,用来区别特权访问和无特权访问模式,或指令和数据提取等; 双向数据总线; 提供为较慢设备使用而扼制数据流的机制; 仲裁支持REQ、GNT和LOCK。
3.3 APB APB是外围互联总线,重点是最小功耗和易于使用,主要特征如下: 低性能、低功率外围总线; 单控制器; 非常简单,只有4个控制信号(加上时钟和复位); 32位地址空间; 多达32位数据总线; 分开读和写数据总线。
TAP控制器 TAP核 返回 ARM7TDMI内核的JTAG扫描链结构 控制信号 扫描链2 EmbeddedICE 宏单元 扫描链0 扫描链1+链0 地址总线 数据总线 TAP控制器 TAP核 返回 JTAG接口 ARM7TDMI内核的JTAG扫描链结构
负责转换Debug主控端发出的高级ARM 运行ARM公司或第三方 提供的调试软件的PC机 协议转换器 负责转换Debug主控端发出的高级ARM 调试指令为底层的和ARM内核通信的 以ARM7TDMI为 处理器的开发系统 调试目标机 返回 ARM的JTAG调试系统
ARM核 返回 扫描链2 EmbeddedICE TAP状态控制器 ARM7TDMI内核的JTAG调试结构 BREAKPT 扫描链0 EmbeddedICE ARM核 扫描链1 扫描链2 BREAKPT TAP状态控制器 返回 ARM7TDMI内核的JTAG调试结构
AMBA总线逻辑结构 返回 High Performance Memory High Performance CPU core AHB/ASP Arbiter High Performance DMA core APB Bridge Keyboard UART APB PIO Timer AMBA总线逻辑结构 返回