ARM 架构
Agenda ARM公司简介 编程模式 指令集 系统设计
ARM Ltd 成立于1990年11月 主要设计ARM系列RISC处理器内核 授权ARM内核给生产和销售半导体的合作伙伴 前身为 Acorn计算机公司 Advance RISC Machine(ARM) 主要设计ARM系列RISC处理器内核 授权ARM内核给生产和销售半导体的合作伙伴 ARM 公司不生产芯片 IP(Intelligence Property) 另外也提供基于ARM架构的开发设计技术 软件工具, 评估板, 调试工具,应用软件, 总线架构, 外围设备单元,等等
ARM Offices Worldwide 800+ 雇员 全球 England US Cambridge, Maidenhead, Sheffield, Blackburn Germany Munich France Paris, Sophia Antipolis Korea Seoul US Seattle, Los Gatos, Walnut Creek, Austin, Boston, San Diego China Taiwan and Shanghai Japan Shin-Yokohama (Tokyo) 800+ 雇员 全球
ARM Partnership Model
目录 ARM公司简介 编程模式 指令集 系统设计
数据和指令类型 ARM 采用的是32位架构. ARM 约定: 大部分ARM core 提供: Byte : 8 bits Halfword :16 bits (2 byte) Word : 32 bits (4 byte) 大部分ARM core 提供: ARM 指令集(32-bit) Thumb 指令集(T变种)(16-bit ) Jazelle cores 支持 Java bytecode(J变种,4TEJ)
处理器工作模式 User:非特权模式,大部分任务执行在这种模式 FIQ:当一个高优先级(fast)中断产生时将会进入这种模式 ARM 有7个基本工作模式: User:非特权模式,大部分任务执行在这种模式 正常程序执行的模式 FIQ:当一个高优先级(fast)中断产生时将会进入这种模式 高速数据传输和通道处理 IRQ:当一个低优先级(normal)中断产生时将会进入这种模式 通常的中断处理 Supervisor:当复位或软中断指令执行时将会进入这种模式 供操作系统使用的一种保护模式 Abort: 当存取异常时将会进入这种模式 虚拟存储及存储保护 Undef: 当执行未定义指令时会进入这种模式 软件仿真硬件协处理器 System: 使用和User模式相同寄存器集的特权模式 特权级的操作系统任务
ARM 寄存器 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 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 Undef Abort Abort Mode r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r15 (pc) cpsr r13 (sp) r14 (lr) spsr 当前可见寄存器 备用寄存器 User FIQ IRQ SVC Undef 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 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
寄存器组织概要 User FIQ IRQ SVC Undef Abort Note: System模式使用user模式寄存器集 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) spsr spsr spsr spsr spsr Note: System模式使用user模式寄存器集
ARM 寄存器 ARM 有37个32-Bits长的寄存器. 当前处理器的模式决定着哪组寄存器可操作. 任何模式都可以存取: 1 个用作PC( program counter) 1个用作CPSR(current program status register) 5个用作SPSR(saved program status registers) 30 个通用寄存器 当前处理器的模式决定着哪组寄存器可操作. 任何模式都可以存取: 相应的r0-r12子集 相应的 r13 (the stack pointer, sp) and r14 (the link register, lr) 相应的 r15 ( the program counter, pc) 相应的CPSR(current program status register, cpsr) 特权模式 (除system模式) 还可以存取; 相应的 spsr (saved program status register)
程序状态寄存器 条件位: 中断禁止位: T Bit Q 位: Mode位(处理器模式位): J 位 N = 1-结果为负,0-结果为正或0 27 31 N Z C V Q 28 6 7 I F T mode 16 23 8 15 5 4 24 f s x c U n d e f i n e d J 条件位: N = 1-结果为负,0-结果为正或0 Z = 1-结果为0,0-结果不为0 C =1-进位,0-借位 V =1-结果溢出,0结果没溢出 Q 位: 仅ARM 5TE/J架构支持 指示增强型DSP指令是否溢出 J 位 J = 1: 处理器处于Jazelle状态 中断禁止位: I = 1: 禁止 IRQ. F = 1: 禁止 FIQ. T Bit 仅ARM xT架构支持 T = 0: 处理器处于 ARM 状态 T = 1: 处理器处于 Thumb 状态 Mode位(处理器模式位): 0b10000 User 0b10001 FIQ 0b10010 IRQ 0b10011 Supervisor 0b10111 Abort 0b11011 Undefined 0b11111 System
程序指针PC (r15) 当处理器执行在ARM状态: 当处理器执行在Thumb状态: 当处理器执行在Jazelle状态: 所有指令 32 bits 宽 所有指令必须 word 对齐 所以 pc值由bits [31:2]决定, bits [1:0] 未定义 (所以指令不能halfword / byte对齐). 当处理器执行在Thumb状态: 所有指令 16 bits 宽 所有指令必须 halfword 对齐 所以 pc值由bits [31:1]决定, bits [0] 未定义 (所以指令不能 byte对齐). 当处理器执行在Jazelle状态: 所有指令 8 bits 宽 处理器执行 word 存取一次取4条指令
Undefined Instruction 异常处理 当异常产生时, ARM core: 拷贝 CPSR 到 SPSR_<mode> 设置适当的 CPSR 位: 改变处理器状态进入 ARM 态 改变处理器模式进入相应的异常模式 设置中断禁止位禁止相应中断 (如果需要) 保存返回地址到 LR_<mode> 设置 PC 为相应的异常向量 返回时, 异常处理需要: 从 SPSR_<mode>恢复CPSR 从LR_<mode>恢复PC Note:这些操作只能在 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
字节顺序 The ARM 可以用 little/big endian 格式存取数据. Little endian Big endian 31 24 23 16 15 8 7 r0 = 0x11223344 11 22 33 44 r1 = 0x100 STR r0, [r1] 3 2 1 0 Byte Lane 0 1 2 3 31 24 23 16 15 8 7 31 24 23 16 15 8 7 11 22 33 44 Memory 11 22 33 44 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 For more information, see: “Application Note 61: Big and Little Endian Byte Addressing”
ARM发展 SIMD 4 1 2 3 4T 6 5TEJ 5TE Jazelle 支持 Java字节码 支持Halfword 和signed halfword / byte 和System mode 改良的ARM/Thumb 交互作用 以及CLZ 指令 5TE 1 SA-110 2 ARM9EJ-S SA-1110 ARM7EJ-S 3 Saturated maths DSP multiply-accumulate instructions ARM926EJ-S 支持Thumb指令集 4T 6 SIMD SISIMDMD S 早期的ARMs SIMD ARM7TDMI ARM9TDMI ARM1020E ARM9E-S ARM720T ARM940T XScale ARM966E-S ARM11
测验1 1) 说出ARM可以工作的模式名字。 2) ARM核有多少个寄存器? 3) 什么寄存器用于存储PC和连接寄存器? 5) 哪种模式使用的寄存器最少? 6) 在Thumb 指令集中,哪些寄存器处于Low group? 7) CPSR的哪一位反映了处理器的状态? 8) 所有的Thumb指令采取什么对齐方式? 9) ARM有哪几个异常类型。 10) 为什么FIQ的服务程序地址要位于0X1C? 11) 在复位后,ARM处理器处于何种模式、何种状态?
Agenda ARM公司简介 编程模式 指令集 系统设计
ARM 指令集 所有ARM指令均为32-bits长 大部分为单周期指令 所有指令都可以条件执行 采用 Load/Store 架构 数据处理指令: SUB r0,r1,#5 ;r1-5->r0 ADD r2,r3,r3,LSL #2 ;R3x4+r3->r2 ANDS r4,r4,#0x20 ;r4+0x20->r4,更新条件码标志位 ADDEQ r5,r5,r6 ;r5+r6->r5(条件-相等) 存储器存取指令: LDR r0,[r1],#4 ;r1+4->r0 STRNEB r2,[r3,r4] ;NE符合-将r2低8位数写到[r3+r4]内存单元 LDRSH r5,[r6,#8]! ;[r6+8]->r5(半字节),r5中高16位设置成该字节的符号位 STMFD sp!,{r0,r2-r7,r10} ;出栈
ARM 跳转分支指令 func1 func2 B <label> BL <子程序> PC ±32 Mbyte . 保存返回地址到 LR 返回时从 LR 恢复 PC 对于 non-leaf 函数, LR 必须压栈保存 func1 func2 : BL func1 STMFD sp!,{regs,lr} : BL func2 LDMFD sp!,{regs,pc} : MOV pc, lr
协处理器 多达16个可定义协处理器,用唯一的ID来标示 扩充ARM指令集 Handshaking signals ARM core Coprocessor X Coprocessor Y Databus F D E 多达16个可定义协处理器,用唯一的ID来标示 扩充ARM指令集 通常用作ARM “internal functions” (例如:cp15通常 用作 ARM cache 控制器) 通常系统设计的时候最好用内存映射外设 容易实现
Thumb指令集 Thumb 是一个 16-bits 指令集 ARM / Thumb 转换使用 BX 指令 对于有编译器产生的绝大多数指令: 优化代码密度 (~65% of ARM ) 提高窄内存操作性能 是ARM指令集的一个功能子集 ARM / Thumb 转换使用 BX 指令 15 31 ADDS r2,r2,#1 ADD r2,#1 32-bits ARM 指令 16-bits Thumb 指令 对于有编译器产生的绝大多数指令: 条件执行不可用 源和目的寄存器相同 只有低端寄存器可用 常量大小受限制 内嵌的桶形移位不可用
存储器宽度 (zero wait state) ARM / Thumb 性能分析 5000 10000 15000 20000 25000 30000 Dhrystone 2.1 / sec @20MHz ARM Thumb 32 bit 16 bit 16 bit with 32 bit stack 存储器宽度 (zero wait state)
Jazelle Jazelle 使得 ARM cores 执行 8-bit 的Java 字节码 95% 的字节码执行使用 hardware (typical) Normal JVM: 1.0 Caffeinemarks/MHz ARM9EJ: 5.5 Caffeinemarks/MHz 更高的性能 增加的门电路<12K (ARM9EJ-S 同 ARM9E-S比较) ARM JTEK (Java Technology Enabling Kit) 提供支持代码 ARM 指令流 Thumb 执行单元 Jazelle 预取阶段 解码阶段 执行阶段
Agenda 介绍 编程模式 指令集 系统设计
基于ARM的系统示例 32 bit RAM 16 bit RAM 外设 中断控制器 I/O ARM Core 8 bit ROM nIRQ nFIQ ARM Core 8 bit ROM
AMBA总线 AMBA Advanced Microcontroller Bus Architecture ADK ACT Arbiter Reset ARM TIC Timer Remap/ Pause External ROM External Bus Interface Bus Interface Bridge External RAM On-chip RAM Interrupt Controller Decoder AHB or ASB APB 系统总线 片内外设总线 AMBA Advanced Microcontroller Bus Architecture ADK Complete AMBA Design Kit ACT AMBA Compliance Testbench PrimeCell ARM’s AMBA compliant peripherals
ARM Developer Suite 1.2 ADS1.2是为嵌入式ARM开发而设计的一整套软件开发工具 从最初的软件原型到最终优化的ROM代码。 ADS1.2发布于2001的12月份 支持的主机系统 IBM compatible PCs with Windows 95, 98, 2000, ME or NT4 Sun workstations with Solaris 2.6, 2.7 or 2.8 HP workstations with HPUX 10.20, 11 Red Hat Linux 6.2 & 7.1 使用FLEXLM管理器,管理它的LICENSE 45天的评估版软件 第三方工具支持: http://www.arm.com/DevSupp/
使用 Multi-ICE 调试 ARM 被调试的系统可以是最终系统! 也可以使用第三方开发调试工具。 Debugger and Multi-ICE server (可以运行在不同的主机上) CPU Control Address Data EmbeddedICE Logic-RT BREAKPT 5线JTAG TAP ARM 被调试的系统可以是最终系统! 也可以使用第三方开发调试工具。
ARM 实时跟踪 Embedded Trace Macrocell (ETM) Serial/Ethernet 主机运行Trace Debug 工具 (Add-on for ADS) 并口l 5 wire JTAG port 9,13,21 wire Trace Port Embedded Trace Macrocell (ETM) 实时指令 (PC) 跟踪 实时数据访问跟踪 包含 ICE功能(trigger & filter logic) MultiTrace Trace Port Analyzer (TPA) 更深层次的追踪 Trace Debug Tools 通过 JTAG/Multi-ICE配置 ETM 跟踪 从ETM/MultiTrace接收跟踪信息 使用源代码镜像文件得到 ETM跟踪的数据 ARM core ETM TAP controller Trace Trigger / Filter 5 RAM ROM … …
Diamond Multimedia Rio 600 Nintendo Gameboy Advance ARM Powered Products 3Com 10/100 PCI NIC Diamond Multimedia Rio 600 Samsung ML5100A JVC "Pixstar" GC-X1 Alba Bush Internet TV Sony MZ-R90 MiniDisc Iomega HipZip Nintendo Gameboy Advance Ericsson R380 Lexmark Z52 Color Jetprinter HP CapShare HP Jornado 820 Nokia 8810 Nokia Mediamaster Psion Revo Plus
测验 2 1) 哪些ARM指令可以有条件的执行? 2) 下面的指令完成什么工作? MOVNES r2,r3,ASR #2 3) Thumb代码与ARM代码比较的两大优势? 4) AMBA代表是什么? 5) Multi-ICE为你完成什么工作?