考核方式和评分标准 考核方式 平时作业和表现(占10%)+实验(占20%)+笔试(70%,闭卷考试 )

Slides:



Advertisements
Similar presentations
2017年3月5日 单片机原理与应用 背景知识调查.
Advertisements

NEUSOFT Institute of information Technology .ChengDu
嵌入式体系结构与应用 第二章-ARM处理器.
实验四 利用中规模芯片设计时序电路(二).
第3章 基于ARM的处理器体系结构1 主讲 马洪连.
第2章ARM/THUMB微处理器结构及指令系统
微机原理与接口技术 第二章 ARM微处理器硬件结构
第3章 基于ARM的处理器体系结构1 主讲 丁男.
Oracle数据库 Oracle 子程序.
C H A P T E R 9 ARM处理器核.
ARM体系结构.
ARM 架构.
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
ARM的体系结构与编程.
第4章 处理器(CPU) 4.1 引言 4.2 逻辑设计的一般方法 4.3 建立数据通路 4.4 一个简单的实现机制 4.5 多周期实现机制.
5 Computer Organization (計算機組織).
嵌入式系统课程简介 宋健建 南京大学软件学院 2004/02/10.
C H A P T E R 8 体系结构对系统开发的支持.
异 常 处 理.
存储系统.
嵌入式系統概論-以S3C2440核心為架構 第1章 嵌入式系統概念.
聊城大学物理科学与信息工程学院 微控制器原理 聊城大学物理科学与信息工程学院
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
嵌入式体系结构与应用 第三章-ARM指令系统(ARMv4T).
第2章 ARM微处理器硬件结构 计算机体系结构分类 ARM版本及系列 ARM处理器结构 存储系统机制.
逆向工程-汇编语言
CPU结构和功能.
(第2版).
(第2版).
Instructions: Language of the Machine
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
第2章 ARM体系结构.
ARM 架构.
ARM 架构.
C语言程序设计 主讲教师:陆幼利.
得技通电子 问题 1.0 、选择题:本大题共15个小题,每小题1分,共15分,在每小题给出的四个选项中,只有一项符合题目要求,把所选项前的字母填在括号内。
微机系统的组成.
第三章 ARM体系结构及编程模型 提纲 ARM技术的应用领域及特点 ARM微处理器系列 ARM处理器的工作状态
ARM 处理器内核.
第四章 MCS-51定时器/计数器 一、定时器结构 1.定时器结构框图
第2章ARM/THUMB微处理器结构及指令系统
第3章 ARM微處理器的指令集.
ARM Developer Suite 介 绍.
ARM指令集 Author : Steve Furber Advisor: Mei-Ling Chiang Speaker: 徐翔宇
嵌入式系统教案 武汉创维特信息技术有限公司 2019/4/29.
(Random Access Memory)
第三章 MCS 51的硬件结构.
第二章 补充知识 2.1 总线和三态门 一、总线(BUS) 三总线结构 数据总线DB(Data Bus)
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
微處理機 Microprocessor (100上)
iSIGHT 基本培训 使用 Excel的栅栏问题
第八章 总线技术 8.1 概述 8.2 局部总线 8.3 系统总线 8.4 通信总线.
College of Computer Science & Technology
ARM简介及BootLoader介绍 黄大荣
HSC高速输出例程 HORNER APG.
微机原理与接口技术 ——8086微处理器 西安邮电大学 计算机学院 范琳.
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
3. 逻辑运算指令 A、简单逻辑操作指令 CLR A. (不影响CY、AC、 OV标志) CPL A
微處理機 Microprocessor (100上) ARM 內核嵌入式SOC原理
本节内容 Windows线程切换_时钟中断切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
汽车单片机应用技术 学习情景1: 汽车空调系统的单片机控制 主讲:向楠.
第3章 目录 1.简介 2.ARM7TDMI 3.ARM7TDMI的模块和内部框图 4.体系结构直接支持的数据类型 5.处理器状态
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
第3章 ARM7体系结构.
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
上节复习(11.7) 1、定时/计数器的基本原理? 2、定时/计数器的结构组成? 3、定时/计数器的控制关系?
第三章 CPU子系统 西南石油大学计算机科学学院 主讲教师 杨 梅 联系电话:
DSP技术与应用 电子与信息技术系.
Presentation transcript:

考核方式和评分标准 考核方式 平时作业和表现(占10%)+实验(占20%)+笔试(70%,闭卷考试 )

C H A P T E R 1 处理器设计导论

嵌入式系统 一般定义 以应用为中心、以计算机技术为基础,软硬件可裁剪,应用系统对功能、可靠性、成本、体积、功耗和应用环境有特殊要求的专用计算机系统。是将应用程序、操作系统和计算机硬件集成在一起的系统(技术角度) 嵌入式系统是设计完成复杂功能的硬件和软件,并使其紧密耦合在一起的计算机系统。(系统角度) 术语嵌入式反映了这些系统通常是更大系统(被称之为嵌入的系统)的一个完整子系统。嵌入式的系统可以包含多个嵌入式系统。 广义定义 任何一个非PC的计算系统

IEEE定义 嵌入式系统是“用于控制、监视或者辅助操作的机器、设备或装置”(原文为devices used to control, monitor, or assist the operation of equipment, machinery or plants)。 通常执行特定功能 嵌入式系统的核心----嵌入式微处理器 严格的时序和稳定性要求 全自动操作循环

冯•诺依曼结构VS哈佛结构 每个嵌入式系统至少包含一个嵌入式微处理器 嵌入式微处理器体系结构可采用冯•诺依曼(Von Neumann)结构或哈佛(Harvard)结构 指令 程序存储器 CPU PC 地址 数据存储器 MOV r8,#8 数据 地址 数据 主存储器 MOV r8,#8 CPU PC 冯•诺依曼结构 哈佛结构

传统的微处理器采用的冯·诺依曼结构将指令和数据存放在同一存储空间中,统一编址,指令和数据通过同一总线访问。 哈佛结构则是不同于冯·诺依曼结构的一种并行体系结构,其主要特点是程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个相互独立的存储器,每个存储器独立编制、独立访问。与之相对应的是系统中设置的两条总线(程序总线和数据总线),从而使数据的吞吐率提高了一倍。

1.4 指令集的设计 A 4-address instruction format

A 3-address instruction format

A 2-address instruction format

A 1-address (accumulator) instruction format

A 0-address instruction format

1、立即寻址方式 形式地址为常数操作数本身。 1、立即寻址方式 形式地址为常数操作数本身。 操作码 F1 A 操作数=A 2、寄存器(直接)寻址方式 形式地址为存放REG操作数的REG编号。 操作数 通用寄存器 … REG号 操作码 F2 A 操作数=(A) 3、寄存器间接寻址方式 形式地址为存放MEM操作数地址的地址REG编号。 注:地址REG—有基址REG和变址REG两种类型。 程序段 主存 操作数 段内地址 A’ 地址寄存器 … REG号 操作码 F3 A 操作数的EA=(A)

4、直接寻址方式 形式地址为MEM操作数的有效地址。 通常用于单个单元操作和无条件转移指令。 5、间接寻址方式 程序段 主存 操作数 段内地址 操作码 F4 A 操作数的EA=A 5、间接寻址方式 形式地址为存放MEM操作数地址的地址。 因需要两次访存,现在已基本不用。 主存 操作数 段内地址 A’ 操作数的EA=(A)=A’ 操作码 F5 A

有效地址为程序计数器PC内容与偏移量相加的结果。 6、相对寻址方式 有效地址为程序计数器PC内容与偏移量相加的结果。 程序段 主存 目标指令 程序计数器PC XX 操作码 F6 A 操作数的EA=(PC)+A 7、基址寻址方式 有效地址为基址REG内容与偏移量相加的结果。 该寻址方式特别适用于段式存储管理。 程序段 主存 操作数 A’ 基址寄存器 操作码 F7 B A 操作数的EA=(B)+A

8、变址寻址方式 与基址寻址方式类似,区别为使用的是变址REG。 该寻址方式很适用于对程序块规律性处理(如数组)。 9、隐含寻址方式 操作数不显式地在地址码中给出,指令隐含约定(默认)该操作数的存在及位置。如过程调用/返回操作的地址在堆栈中。 操作数类型 常用寻址方式 数据 除相对寻址外,一般均可使用 指令地址 一般使用相对、直接、寄存器间接方式 ☆不同指令系统对寻址方式的命名可能有所不同!

1.6 精简指令集计算机 CISC:复杂指令集(Complex Instruction Set Computer) 具有大量的指令和寻址方式,指令长度可变 8/2原则:80%的程序只使用20%的指令 大多数程序只使用少量的指令就能够运行。 RISC:精简指令集(Reduced Instruction Set Computer) 只包含最有用的指令,指令长度固定 确保数据通道快速执行每一条指令 使CPU硬件结构设计变得更为简单

CISC与RISC的数据通道 CISC:寻址方式复杂 RISC:Load/Store结构 IF ID IF ID ALU MEM REG 开始 退出 微操作通道 CISC:寻址方式复杂 IF ID REG ALU MEM 开始 退出 单通数据通道 RISC:Load/Store结构

RISC基本设计思想 减小CPI: CPUtime=Instr_Count * CPI * Clock_cycle 精简指令集:保留最基本的,去掉复杂、使用频度不高的指令 采用Load/Store结构,有助于减少指令格式,统一存储器访问方式 采用硬接线控制代替微程序控制 RISC思想的关键不在于减少指令数,而是在于减少执行每条指令所需要的平均周期数CPI。但是,如果只限制于每个周期只发射一条指令的传统的单发射结构,那末,CPI只能接近于1而不能小于1;只有设计出每个周期可发射多条指令的多发射结构,才可能使CPI小于1,或者使每个周期执行的平均指令数IPC大于1。RISC单发射与多发射结构必须是在流水线结构基础上执行指令的。

RISC:减少指令平均执行周期数 CPUtime= Instr_Count *CPI * Clock_cycle IC RISC > IC CISC, 30%---40% CC RISC < CC CISC CPI RISC < CPI CISC , 20% 超标量、超流水线、VLIW等系统结构, 目标在于减小CPI, 可使CPI<1 VLIW是英文“Very Long Instruction Word”的缩写,中文意思是“超长指令集架构”,VLIW架构采用了先进的EPIC(清晰并行指令)设计,我们也把这种构架叫做“IA-64架构”。每时钟周期例如IA-64可运行20条指令,而CISC通常只能运行1-3条指令,RISC能运行4条指令,可见VLIW要比CISC和RISC强大的多。VLIW的最大优点是简化了处理器的结构,删除了处理器内部许多复杂的控制电路,这些电路通常是超标量芯片(CISC和RISC)协调并行工作时必须使用的,VLIW的结构简单,也能够使其芯片制造成本降低,价格低廉,能耗少,而且性能也要比超标量芯片高得多。目前基于这种指令架构的微处理器主要有Intel的IA-64和AMD的x86-64两种。 CC---时钟周期 IC---程序动态执行的指令条数 CPI---指令平均执行周期数

1.7 低功耗设计 CMOS的功耗组成 切换功耗 短路功耗 漏电流

低功耗电路设计 1.降低电源电压 2.降低电路活跃因数A 3.减少门数 4.降低时钟频率

C H A P T E R 2 ARM体系结构

2.3 The ARM Programmer's Model

2.3.1 ARM微处理器的工作状态 从编程的角度看,ARM微处理器的工作状态一般有两种,并可在两种状态之间切换: 第二种为Thumb状态,此时处理器执行16位的半字对齐的Thumb指令。 当ARM微处理器执行32位的ARM指令集时,工作在ARM状态; 当ARM微处理器执行16位的Thumb指令集时,工作在Thumb状态。 在程序的执行过程中,微处理器可以随时在两种工作状态之间切换,并且,处理器工作状态的转变并不影响处理器的工作模式和相应寄存器中的内容。

状态切换方法: ARM指令集和Thumb指令集均有切换处理器状态的指令,并可在两种工作状态之间切换,但ARM微处理器在开始执行代码时,应该处于ARM状态。 进入Thumb状态:当操作数寄存器的状态位(位0)为1时,可以采用执行BX指令的方法,使微处理器从ARM状态切换到Thumb状态。 此外,当处理器处于Thumb状态时发生异常(如IRQ、FIQ、Undef、Abort、SWI等),则异常处理返回时,自动切换到Thumb状态。 进入ARM状态:当操作数寄存器的状态位为0时,执行BX指令时可以使微处理器从Thumb状态切换到ARM状态。 此外,在处理器进行异常处理时,把PC指针放入异常模式链接寄存器中,并从异常向量地址开始执行程序,也可以使处理器切换到ARM状态。

2.3.2  ARM体系结构的存储器格式 ARM体系结构将存储器看作是从零地址开始的字节的线性组合。从零字节到三字节放置第一个存储的字数据,从第四个字节到第七个字节放置第二个存储的字数据,依次排列。作为32位的微处理器,ARM体系结构所支持的最大寻址空间为4GB(232字节)。 ARM体系结构可以用两种方法存储字数据,称之为大端格式和小端格式,具体说明如下:

大端格式 在这种格式中,字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中,如图所示:

小端格式 与大端存储格式相反,在小端存储格式中,低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节。如图所示:

处理器模式 ARM微处理器支持7种运行模式,分别为: 用户模式(usr):ARM处理器正常的程序执行状态 快速中断模式(fiq):用于高速数据传输或通道处理 外部中断模式(irq):用于通用的中断处理 管理模式(svc):操作系统使用的保护模式(复位或软中断) 数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。 系统模式(sys):运行具有特权的操作系统任务。 未定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。

ARM微处理器的运行模式可以通过软件改变,也可以通过外部中断或异常处理改变。 大多数的应用程序运行在用户模式下,当处理器运行在用户模式下时,某些被保护的系统资源是不能被访问的。 除用户模式以外,其余的所有6种模式称之为非用户模式,或特权模式(Privileged Modes);其中除去用户模式和系统模式以外的5种又称为异常模式(Exception Modes),常用于处理中断或异常,以及需要访问受保护的系统资源等情况。

寄存器组织 ARM微处理器共有37个32位寄存器,其中31个为通用寄存器,6个为状态寄存器。但是这些寄存器不能被同时访问,具体哪些寄存器是可编程访问的,取决微处理器的工作状态及具体的运行模式。 但在任何时候,通用寄存器R0~R14、程序计数器PC、一个或两个状态寄存器都是可访问的。

ARM状态下的寄存器组织 通用寄存器: 通用寄存器包括R0~R15,可以分为三类: 未分组寄存器R0~R7 分组寄存器R8~R14   程序计数器PC(R15)

未分组寄存器R0~R7: 在所有的运行模式下,未分组寄存器都指向同一个物理寄存器,他们未被系统用作特殊的用途,因此,在中断或异常处理进行运行模式转换时,由于不同的处理器运行模式均使用相同的物理寄存器,可能会造成寄存器中数据的破坏,这一点在进行程序设计时应引起注意。 分组寄存器R8~R14: 对于分组寄存器,每一次所访问的物理寄存器与处理器当前的运行模式有关。 对于R8~R12来说,每个寄存器对应两个不同的物理寄存器,当使用fiq模式时,访问寄存器R8_fiq~R12_fiq;当使用除fiq模式以外的其他模式时,访问寄存器R8_usr~R12_usr。

寄存器组织概要 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模式寄存器集

其中,mode为以下几种模式之一:usr、fiq、irq、svc、abt、und。 对于R13、R14来说,每个寄存器对应6个不同的物理寄存器,其中的一个是用户模式与系统模式共用,另外5个物理寄存器对应于其他5种不同的运行模式。 采用以下的记号来区分不同的物理寄存器:   R13_<mode>   R14_<mode> 其中,mode为以下几种模式之一:usr、fiq、irq、svc、abt、und。

寄存器R13在ARM指令中常用作堆栈指针,但这只是一种习惯用法,用户也可使用其他的寄存器作为堆栈指针。 而在Thumb指令集中,某些指令强制性的要求使用R13作为堆栈指针。 由于处理器的每种运行模式均有自己独立的物理寄存器R13,在用户应用程序的初始化部分,一般都要初始化每种模式下的R13,使其指向该运行模式的栈空间,这样,当程序的运行进入异常模式时,可以将需要保护的寄存器放入R13所指向的堆栈,而当程序从异常模式返回时,则从对应的堆栈中恢复,采用这种方式可以保证异常发生后程序的正常执行。 R14也称作子程序连接寄存器(Subroutine Link Register)或连接寄存器LR。当执行BL子程序调用指令时,R14中得到R15(程序计数器PC)的备份。其他情况下,R14用作通用寄存器。 与之类似,当发生中断或异常时,对应的分组寄存器R14_svc、R14_irq、R14_fiq、R14_abt和R14_und用来保存R15的返回值。

寄存器R14常用在如下的情况: 在每一种运行模式下,都可用R14保存子程序的返回地址。当用BL或BLX指令调用子程序时,将PC的当前值拷贝给R14,执行完子程序后,又将R14的值拷贝回PC,即可完成子程序的调用返回。以上的描述可用指令完成:      1、执行以下任意一条指令可以返回:       MOV       PC,LR  ;PC LR      或 BX        LR 2、在子程序入口处使用以下指令将R14存入堆栈:      STMFD   SP!,{<Regs>,LR}     对应的,使用以下指令可以完成子程序返回:      LDMFD   SP!,{<Regs>,PC} R14也可作为通用寄存器。

程序计数器PC(R15) 寄存器R15用作程序计数器(PC)。在ARM状态下,位[1:0]为0,位[31:2]用于保存PC;在Thumb状态下,位[0]为0,位[31:1]用于保存PC; R15虽然也可用作通用寄存器,但一般不这么使用,因为对R15的使用有一些特殊的限制,当违反了这些限制时,程序的执行结果是未知的。 由于ARM体系结构采用了多级流水线技术,对于ARM指令集而言,PC总是指向当前指令的下两条指令的地址,即PC的值为当前指令的地址值加8个字节。

程序状态寄存器CPSR 条件位: 中断禁止位: I = 1: 禁止 IRQ. F = 1: 禁止 FIQ. T Bit 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 中断禁止位: 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 条件位: N = 1-结果为负,0-结果为正或0 Z = 1-结果为0,0-结果不为0 C =1-进位,0-借位 V =1-结果溢出,0结果没溢出 Q 位: 仅ARM 5TE/J架构支持 指示增强型DSP指令是否溢出 J 位 J = 1: 处理器处于Jazelle状态

当处理器执行在ARM状态: 当处理器执行在Thumb状态: 所有指令 32 bits 宽 所有指令必须 word 对齐 pc值由bits [31:2]决定, bits [1:0] 未定义 (所以指令不能halfword / byte对齐). 当处理器执行在Thumb状态: 所有指令 16 bits 宽 所有指令必须 halfword 对齐 pc值由bits [31:1]决定, bits [0] 未定义 (所以指令不能 byte对齐).

2.4 ARM开发工具 The structure of the ARM cross-development toolkit C source C libraries asm source C compiler as sembler .aof object libraries linker .axf debug ARMsd system model development ARMulator board

作业 1、ARM处理器有几个寄存器?分别说明其用途。 2、CPSR状态寄存器中各位表示的含义是什么? 3、ARM异常向量表位于存储器的什么位置?(p90)

C H A P T E R 3 ARM汇编语言编程

ARM汇编基础 ★The following is a simple example which illustrates some of the core constituents of an ARM assembler module: Label opcode operands comment

数据处理指令(Data Processing Instructions) Data Transfer Instructions 控制流指令

C H A P T E R 4 ARM指令集

ARM体系结构所支持的异常类型 异常类型 具体含义 复位 当处理器的复位电平有效时,产生复位异常,程序跳转到复位异常处理程序处执行。 未定义指令 当ARM处理器或协处理器遇到不能处理的指令时,产生未定义指令异常。可使用该异常机制进行软件仿真。 软件中断 该异常由执行SWI指令产生,可用于用户模式下的程序调用特权操作指令。可使用该异常机制实现系统功能调用。 指令预取中止 若处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出中止信号,但当预取的指令被执行时,才会产生指令预取中止异常。 数据中止 若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常。 IRQ(外部中断请求) 当处理器的外部中断请求引脚有效,且CPSR中的I位为0时,产生IRQ异常。系统的外设可通过该异常请求中断服务。 FIQ(快速中断请求) 当处理器的快速中断请求引脚有效,且CPSR中的F位为0时,产生FIQ异常。

5.2—异常的进入 对异常的响应: 当一个异常出现以后,ARM微处理器会执行以下几步操作: 还可以设置中断禁止位,以禁止中断发生。 1、将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。若异常是从ARM状态进入,LR寄存器中保存的是下一条指令的地址(当前PC+4或PC+8,与异常的类型有关);若异常是从Thumb状态进入,则在LR寄存器中保存当前PC的偏移量,这样,异常处理程序就不需要确定异常是从何种状态进入的。例如:在软件中断异常SWI,指令 MOV PC,R14_svc总是返回到下一条指令,不管SWI是在ARM状态执行,还是在Thumb状态执行。 2、将CPSR复制到相应的SPSR中。 3、根据异常类型,强制设置CPSR的运行模式位。 4、强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。 还可以设置中断禁止位,以禁止中断发生。 如果异常发生时,处理器处于Thumb状态,则当异常向量地址加载入PC时,处理器自动切换到ARM状态。

ARM微处理器对异常的响应过程用伪码可以描述为: R14_<Exception_Mode> = Return Link SPSR_<Exception_Mode> = CPSR CPSR[4:0] = Exception Mode Number CPSR[5] = 0   ;当运行于ARM工作状态时 If <Exception_Mode> == Reset or FIQ then CPSR[6] = 1  ;当响应FIQ异常时,禁止新的FIQ异常   CPSR[7] = 1 ;禁止新的IRQ异常 PC = Exception Vector Address

Exception vector addresses

异常返回 异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回: 1、将连接寄存器LR的值减去相应的偏移量后送到PC中。 2、将SPSR复制回CPSR中。 3、若在进入异常处理时设置了中断禁止位,要在此清除。 可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返回。

FIQ(Fast Interrupt Request) FIQ异常是为了支持数据传输或者通道处理而设计的。在ARM状态下,系统有足够的私有寄存器,从而可以避免对寄存器保存的需求,并减小了系统上下文切换的开销。 若将CPSR的F位置为1,则会禁止FIQ中断,若将CPSR的F位清零,处理器会在指令执行时检查FIQ的输入。注意只有在特权模式下才能改变F位的状态。 可由外部通过对处理器上的nFIQ引脚输入低电平产生FIQ。不管是在ARM状态还是在Thumb状态下进入FIQ模式,FIQ处理程序均会执行以下指令从FIQ模式返回: SUBS   PC,R14_fiq ,#4 该指令将寄存器R14_fiq的值减去4后,复制到程序计数器PC中,从而实现从异常处理程序中的返回,同时将SPSR_mode寄存器的内容复制到当前程序状态寄存器CPSR中。

IRQ(Interrupt Request) IRQ异常属于正常的中断请求,可通过对处理器的nIRQ引脚输入低电平产生,IRQ的优先级低于FIQ,当程序执行进入FIQ异常时,IRQ可能被屏蔽。 若将CPSR的I位置为1,则会禁止IRQ中断,若将CPSR的I位清零,处理器会在指令执行完之前检查IRQ的输入。注意只有在特权模式下才能改变I位的状态。 不管是在ARM状态还是在Thumb状态下进入IRQ模式,IRQ处理程序均会执行以下指令从IRQ模式返回: SUBS  PC , R14_irq , #4 该指令将寄存器R14_irq的值减去4后,复制到程序计数器PC中,从而实现从异常处理程序中的返回,同时将SPSR_mode寄存器的内容复制到当前程序状态寄存器CPSR中。

产生中止异常意味着对存储器的访问失败。ARM微处理器在存储器访问周期内检查是否发生中止异常。 ABORT(中止) 产生中止异常意味着对存储器的访问失败。ARM微处理器在存储器访问周期内检查是否发生中止异常。 中止异常包括两种类型: 指令预取中止:发生在指令预取时。 数据中止:发生在数据访问时。 当指令预取访问存储器失败时,存储器系统向ARM处理器发出存储器中止(Abort)信号,预取的指令被记为无效,但只有当处理器试图执行无效指令时,指令预取中止异常才会发生,如果指令未被执行,例如在指令流水线中发生了跳转,则预取指令中止不会发生。 若数据中止发生,系统的响应与指令的类型有关。 当确定了中止的原因后,Abort处理程序均会执行以下指令从中止模式返回,无论是在ARM状态还是Thumb状态: SUBS PC, R14_abt, #4      ;指令预取中止 SUBS PC, R14_abt, #8      ;数据中止 以上指令恢复PC(从R14_abt)和CPSR(从SPSR_abt)的值,并重新执行中止的指令。

以上指令恢复PC(从R14_svc)和CPSR(从SPSR_svc)的值,并返回到SWI的下一条指令。 Software Interupt(软件中断) 软件中断指令(SWI)用于进入管理模式,常用于请求执行特定的管理功能。软件中断处理程序执行以下指令从SWI模式返回,无论是在ARM状态还是Thumb状态: MOVS  PC , R14_svc 以上指令恢复PC(从R14_svc)和CPSR(从SPSR_svc)的值,并返回到SWI的下一条指令。

当ARM处理器遇到不能处理的指令时,会产生未定义指令异常。采用这种机制,可以通过软件仿真扩展ARM或Thumb指令集。 Undefined Instruction(未定义指令) 当ARM处理器遇到不能处理的指令时,会产生未定义指令异常。采用这种机制,可以通过软件仿真扩展ARM或Thumb指令集。 在仿真未定义指令后,处理器执行以下程序返回,无论是在ARM状态还是Thumb状态: MOVS PC, R14_und 以上指令恢复PC(从R14_und)和CPSR(从SPSR_und)的值,并返回到未定义指令后的下一条指令。

下表总结了进入异常处理时保存在相应R14中的PC值,及在退出异常处理时推荐使用的指令。 异常进入/退出小节 下表总结了进入异常处理时保存在相应R14中的PC值,及在退出异常处理时推荐使用的指令。 返回指令 以前的状态 备注 ARM  R14_x Thumb R14_x BL MOV PC,R14 PC+4 PC+2 1 SWI MOVS PC,R14_svc UDEF MOVS PC,R14_und FIQ SUBS PC,R14_fiq,#4 2 IRQ SUBS PC,R14_irq,#4 PABT SUBS PC,R14_abt,#4 DABT SUBS PC,R14_abt,#8 PC+8 3 RESET NA - 4 备注: 1--在此PC应是具有预取中止的BL/SWI/未定义指令所取的地址。 2--在此PC是从FIQ或IRQ取得不能执行的指令的地址。 3--在此PC是产生数据中止的加载或存储指令的地址。 4--系统复位时,保存在R14_svc中的值是不可预知的。

异常优先级(Exception Priorities) 当多个异常同时发生时,系统根据固定的优先级决定异常的处理次序。异常优先级由高到低的排列次序如下表所示。 优先级 异 常 1(最高) 复位 2 数据中止 3 FIQ 4 IRQ 5 预取指令中止 6(最低) 未定义指令、SWI

ARM指令集——基本指令格式 ARM是三地址指令格式,指令的基本格式如下: <opcode> {<cond>} {S} <Rd> ,<Rn>{,<operand2>} 其中<>号内的项是必须的,{}号内的项是可选的。各项的说明如下: opcode:指令助记符; cond:执行条件; S:是否影响CPSR寄存器的值; Rd:目标寄存器; Rn:第1个操作数的寄存器; operand2:第2个操作数; 例: 指令语法 目标寄存器(Rd) 源寄存器1(Rn) 源寄存器2(Rm) ADD r3,r1,r2 r3 r1 r2

ARM指令集——第2个操作数 ARM指令的基本格式如下: 灵活的使用第2个操作数“operand2”能够提高代码效率。它有如下的形式: <opcode> {<cond>} {S} <Rd> ,<Rn>{,<operand2>} 灵活的使用第2个操作数“operand2”能够提高代码效率。它有如下的形式: #immed_8r——常数表达式; Rm——寄存器方式; Rm,shift——寄存器移位方式;

ARM指令集——第2个操作数 #immed_8r——常数表达式 该常数必须对应8位位图,即一个8位的常数通过循环右移偶数位得到。 循环右移10位 0x00 0x12 1 8位常数 0x00 0x80 1 0x04

ARM指令集——第2个操作数 #immed_8r——常数表达式 该常数必须对应8位位图,即一个8位的常数通过循环右移偶数位得到。 例如: AND R1,R2,#0x0F

ARM指令集——第2个操作数 Rm——寄存器方式 在寄存器方式下,操作数即为寄存器的数值。 例如: SUB R1,R1,R2

ARM指令集——第2个操作数 Rm,shift——寄存器移位方式 操作码 说明 ASR #n 算术右移n位 ROR #n 循环右移n位 LSL #n 逻辑左移n位 RRX 带扩展的循环右移1位 LSR #n 逻辑右移n位 Type Rs Type为移位的一种类型,Rs为偏移量寄存器,低8位有效。

C H A P T E R 6 体系结构对高级语言的支持

6.6 条件语句 if… else if ( a>b) c=a; else c=b; CMP r0, r1 ; if (a>b) MOVGT r2, r0 ; .. c=a.. MOVLE r2, r1 ; ..else c=b if ( a>b) { A; B; C; } else { D; E; } CMP r0, r1 BLE ELSE Assembly for A; B; C: B ENDIF ELSE Assembly for D; E; ENDIF

条件执行-最大公约数

最大公约数C语言代码: int gcd (int a, int b) { while (a ! = b) if (a > b) a = a - b; else b = b - a; return a; }

最大公约数ARM汇编代码: gcd cmp r0, r1 ;reached the end? beq stop blt less ;if r0 > r1 sub r0, r0, r1 ;subtract r1 from r0 b gcd less sub r1, r1, r0 ;subtract r0 from r1 stop ;……

最大公约数ARM汇编代码(条件执行): 代码执行前r0中存放a,r1中存放b;代码执行后r0中存放a和b的最大公约数: gcd CMP R0, R1 SUBGT R0, R0, R1 SUBLT R1, R1, R0 BNE gcd MOV PC, LR gcd cmp r0, r1 beq stop blt less sub r0, r0, r1 b gcd less sub r1, r1, r0 stop ;……

An example of normal struct memory allocation

An example of more efficient struct memory allocation

An example of packed struct memory allocation

基于ARM IP Core的SoC设计 可以取代ICE的几项技术: 1. 快速硅原形 (ARM综合器integrator) 2. ARMulator 3. JTAG SoC标准单元

一个微处理器系统可能含有多条总线 原因: 数据宽度:高速总线通常提供较宽的数据连接。 成本:高速总线通常采用更昂贵的电路和连接器。 桥 低速总线 高速设备 总线互联的电路 低速设备 原因: 数据宽度:高速总线通常提供较宽的数据连接。 成本:高速总线通常采用更昂贵的电路和连接器。 桥允许总线独立操作,这样在I/O操作中可提供某些并行性。

三种片内总线 AHB或ASB总线 APB总线 桥 ARM处理器核 宽带片上 RAM DMA控制器 宽带外部 RAM接口 UART PIO 定时器 键盘控制器 AHB或ASB总线 APB总线 AMBA总线结构 Wishbone总线结构 Avalon总线结构

AMBA总线-AHB 主单元 从单元 AHB总线 仲裁器 译码器 总线译码器用于传输译码工作,提供传输过程中从单元的片选信号。 可以响应(并非启动)读或写总线操作。 总线的从单元可以在给定的地址范围内对读写操作进行相应的反应。 从单元向主单元发出成功、失败信号或等待各种反馈信号。 从单元通常是其复杂程度不足以成为主单元的固定功能块,例如外存接口、总线桥接口以及任何内存都可以是从单元,系统的其他外设也包含在AHB的从单元中。 只有主单元可在任何时刻使用总线。 AHB可以有一个或多个主单元。 主单元可以是RISC处理器、协处理器以及DMA控制器,以启动和控制总线操作。 从单元 AHB总线 用来确定控制总线是哪个主单元,以保证在任何时候只有一个主单元可以启动数据传输。 一般来说仲裁协议都是固定好的,例如最高优先级方法或平等方法,可根据实际的情况选择适当的仲裁协议。 仲裁器 译码器 总线译码器用于传输译码工作,提供传输过程中从单元的片选信号。

AHB基本传输 一个典型的AHB总线工作过程,它包括以下两个阶段: 地址传送阶段(address phase):它将只持续一个时钟周期。在HCLK的上升沿数据有效。所有的从单元都在这个上升沿来采样地址信息。 数据传送阶段(data phase):它需要一个或几个时钟周期。可以通过HREADY信号来延长数据传输时间,当HREADY信号为低电平时,就在数据传输中加入等待周期,直到HREADY信号为高电平才表示这次传输阶段结束。

APB总线 APB从单元的接口信号 在APB里面唯一的主模块就是与AHB总线相接的APB 桥。 APB主要 用于低带 宽的周边 外设之间 的连接 APB从单元的接口信号 在APB里面唯一的主模块就是与AHB总线相接的APB 桥。

APB桥 APB桥是在 AMBA APB 上唯一的总 选 线主模块。 择 另外,APB 信 桥也是在更 号 高层次系统 总线上的一 个从模块。 桥单元把系 统总线传输 转化为APB 总线传输。 选 择 信 号 系统总线 从模块接口

APB桥的功能 锁存地址并在整个传输过程中保持其有效,直到数据传送完成。 地址译码并且生成一个外部选择信号PSELx,在一次传输期间只有一个选择信号有效. 写传送时驱动数据到APB总线上。 读传时驱动APB数据到系统总线上。 为传送触发使能信号PENABLE,使其有效。

什么是JTAG? JTAG是Joint Test Action Group的缩写是IEEE1149.1标准 JTAG的建立使得集成电路固定在PCB上,只通过边界扫描便可以被测试 在ARM处理器中,可以通过JTAG直接控制ARM的内部总线,IO口等信息,从而达到调试的目的

测试信号 TMS: 测试模式选择(Test Mode Select),通过TMS信号控制JTAG状态机的状态 TCK :JTAG的时钟信号 TDI:数据输入信号 TDO :数据输出信号 nTRST:JTAG复位信号,复位JTAG的状态机和内部的宏单元(Macrocell) 事实上,通过TAP接口,对数据寄存器(DR)进行访问的一般过程是: 􀂃 通过指令寄存器(IR),选定一个需要访问的数据寄存器; 􀂃 把选定的数据寄存器连接到TDI和TDO之间; 􀂃 由TCK驱动,通过TDI,把需要的数据输入到选定的数据寄存器当中去;同时把选定的数据寄存器中的数据通过TDO读出来。

C H A P T E R 9 ARM处理器核

处理器核和CPU核 ARM处理器核是系统中的引擎 读指令并执行 在一个芯片中,可能集成了: 典型的ARM处理器核: CPU核: ARM核与其它部件如RAM、 ROM、片内外设组合在一起 才能构成现实的芯片。 处理器核和CPU核 ARM处理器核是系统中的引擎 读指令并执行 在一个芯片中,可能集成了: 和处理器核密切相关的元件,如:Cache和存储器管理元件 与系统部件无关,如:信号处理硬件 可能还包含多个ARM处理器核 典型的ARM处理器核: ARM7TDMI、ARM9TDMI、ARM10TDMI等 CPU核: 微处理器核+Cache+存储器管理硬件 ARM710T/720T/740T,StrongARM、ARM920T/940T、ARM1020E等

9.1 ARM7TDMI 简介 ARM7TDMI支持32位寻址范围,并弥补了ARM6不能在低于5V电源电压下工作的不足。ARM7TDMI的后缀意义为: ARM7 T D M I - S ARM7TDMI 的可综合(synthesizable)版本(软核),对应用工程师来说其编程模型与ARM7TDMI 一致; 支持Embeded-ICE观察硬件; 支持64位乘法; 支持片上调试; 支持高密度16位的Thumb指令集;

ARM7TDMI 三级流水线 ARM7TDMI处理器使用流水线来增加处理器指令流的速度。这样可使几个操作同时进行,并使处理和存储器系统连续操作,能提供0.9MIPS/MHz的指令执行速度。 ARM7TDMI的流水线分3级,分别为: 取指译码执行

ARM7TDMI组织 控制信号 ARM7TDMI处理器内部由处理器核、用于边界扫描的TAP控制器和在线仿真器ICE组成。双向数据总线D[31:0]被分割成单向输入和输出总线,以便于与外部存储器兼容。 地址总线 BUS Splitter ARM7TDMI 内核 数据总线 Embedded ICE 逻辑 TAP 控制器 JTAG 接口

存储器接口 ARM的总线接口可以实现4种不同类型的总线周期。

ARM9TDMI Harvard架构 5 级流水线 实现了以下改进: 增加了可用的存储器宽度 可以实现对指令和数据存储器的同时访问 指令存储器接口 数据存储器接口 可以实现对指令和数据存储器的同时访问 5 级流水线 实现了以下改进: 改进 CPI 到 ~1.5 提高了最大时钟频率

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 流水线

ARM9TDMI 带Cache的ARM9TDMI ARM9TDMI ARM9xxT ARM920T D Cache 外部 MMU 存储器 2x 16K caches MMU 支持虚拟地址和内存保护 写缓冲 D Cache GLUE 外部 存储器 ARM9TDMI MMU ARM940T 2x 4K caches MPU 写缓冲 I Cache ARM9xxT 带Cache的ARM9TDMI

ARM10E 系列概述 ARM1020E ARM1022E v5TE架构 CPI  1.3 6 级流水线 静态分支预测 支持新的 VFPv1 结构 ARM1020E 每周期64 位的 LDM / STM操作 EmbeddedICE逻辑 - RT-II 32kB 指令cache和32kB数据cache 支持“Hit under miss” 非阻塞的执行单元 同ARM1020E,除了cache大小为16kB ARM1022E 对SUDL(single user design license )有效

Intel® XScale™ 概述 V5TE 兼容架构 7-8级流水线带统计分支预测 32k的数据和指令 Cache, 外加2k的数据Minicache 8口写缓冲,4口填充和追加缓冲 完整的32位协处理器接口 调试和性能监控逻辑(通过CP14 ) 乘-加模块(作为CP0 ) 可配置的内核时钟速度100-733MHz ,来自 33-66MHz 输入时钟 异步输入总线时钟可到100 MHz (最大总线内核时钟的1/3 )

C H A P T E R 10 存储器层次

程序的局部性原理 访问概率 地址空间 程序在一定的时间段内通常只访问较小的地址空间 两种局部性: 时间局部性 空间局部性

层次存储器系统 使用高速缓冲存储器Cache来提高CPU对存储器的平均访问速度。 时间局部性:最近被访问的信息很可能还要被访问。 空间局部性:最近被访问的信息临近的信息也可能被访问。 将最近被访问的信息项临近的信息一起装入到Cache中。

如何提高Cache的性能? 1. 提高命中率 2. 缩短缺失后的处理时间 3. 提高访问cache的速度

C H A P T E R 11 体系结构对操作系统的支持

概述 嵌入式操作系统的任务是什么? 主要要解决的问题: 机器硬件的接口 多个程序并行执行(多任务) 过程间冲突的减小 对存储器保护下的数据共享窗口的控制 对硬件设备的访问

ARM存储系统的体系结构,为了适应一些复杂的应用要求,一般包括以下几种技术: 用于存储管理的系统控制协处理器CP15 存储器保护单元MPU 存储器管理单元MMU Cache及Write Buffer技术 快速进程上下文切换技术

系统控制协处理器CP15 ARM的存储器管理是通过系统控制协处理器CP15完成的。CP15包含16个32位寄存器C0~C15,在系统模式下访问CP15中的寄存器需使用下面2个指令: MCR: ARM寄存器->CP15寄存器的数据传送指令 MRC: CP15寄存器->ARM寄存器的数据传送指令 在用户模式下访问CP15中的寄存器需使用软中断(SWI)调用的方式。 其中,C1是一个控制寄存器,它控制MMU(MPU)的使能、数据Cache或统一Cache的使能、指令Cache的使能、写缓冲使能等.

存储管理单元MMU 1.在ARM系统中,存储管理单元MMU主要完成工作: 存储器访问权限的控制。 设置虚拟存储空间的缓冲的特性。

存储管理单元MMU 3. MMU中的地址变换过程:通过两级页表实现。 a)一级页表中包含有以段为单位的地址变换条目以及指向二级页表的指针。一级页表是实现的地址映射粒度较大。以段为单位的地址变换过程只需要一级页表。 b)二级页表中包含有以大页和小页为单位的地址变换条目。有一种类型的二级页表还包含有以极小页为单位的地址变换条目。以页为单位的地址变换过程需要二级页表。

实验代码 本门课程实验start.s文件逐句看懂,这个文件完成了哪些工作?