《第三章CPU相关知识ppt课件.ppt》由会员分享,可在线阅读,更多相关《第三章CPU相关知识ppt课件.ppt(88页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、嵌入式系统概论第三章 CPUz输入/输出机制z管态, 异常, 陷阱z存储管理和地址转换z高速缓存zCPU 的性能和功耗1嵌入式系统概论3.1 I/O 编程zI/O设备y模拟元件或非电子元件y数字逻辑与CPU相关xI/O设备与CPU的接口一组寄存器CPUstatusregdataregmechanism2I/OI/O 设备的寄存器z数据寄存器:I/O与CPU交互的数据yI/O设备读写的数据z状态寄存器:提供设备运行的状态、信息y只读方式,由设备完成对这些寄存器的操作,CPU只能读取它y可读、可写方式,不仅设备可对这些寄存器操作,CPU也可以进行读、写操作3嵌入式系统概论I/O设备的分类z计算机所
2、管理的I/O设备按输入输出对象的不同可以分为以下3类:y用户可读写设备,用于用户与计算机通信。如:显示器、键盘、鼠标、打印机等y机器可读写设备,用于电子装置与计算机通信。如:硬盘、U盘、控制器y通信设备,用于与远程设备通信。如:Modem、ISDN终端4嵌入式系统概论嵌入式系统概论应用: 8251 UART(Universal asynchronous receiver/transmitter) z串行通讯的基本设备zUART功能被集成到ARM9y有3组发送接收接口,通过通用的I/O接口复用获得的z允许发送接收参数编程5嵌入式系统概论8251 UART 与 CPU 接口CPU串口68251串行
3、数据通信系统模型串行数据通信系统模型 DTE- Data Terminal Equipment,常常是计算机,常常是计算机. DCE- Data Communication Equipment,常常是,常常是MODEM,也可以是计,也可以是计算机算机.串行接口串行接口 主要是主要是8251A、16550、8250等,等, 连接连接DTE和和DCE。7嵌入式系统概论串行通讯z数据以字符流的形式timebit 0bit 1bit n-1no charstartstop.8嵌入式系统概论串行通讯的参数z波特率(Baud (bit) rate)z每个字符的位数z是否有奇偶校验(Parity/no pa
4、rity)z奇、偶校验(Even/odd parity)z结束位的长度 (1, 1.5, 2 位).9嵌入式系统概论I/O编程z两种方法支持I/O编程y特殊的I/O指令xIntel x86 提供 in, out 指令y内存映射I/Ox大多数CPUs 应用内存映射I/Ox支持I/O 指令的CPU并不排除内存映射I/O10内存映射I/Oz为每一个I/O设备的寄存器提供地址z程序使用普通的CPU读写指令来与设备通讯zDefine location for device:DEV1 EQU 0 x1000zRead/write code:LDR r1,#DEV1 LDR r0,r1 LDR r0,#8
5、STR r0,r1 11嵌入式系统概论内存映射I/O高级语言Peek 和 pokez读操作int peek(char *location) return *location; z写操作void poke (char *location, char newval) (*location) = newval; 12I/O操作的方式13嵌入式系统概论忙等I/O方式z轮询(polling):通过CPU读I/O设备状态寄存器来询问设备是否空闲14嵌入式系统概论忙等I/O方式-输出设备编程z将一个字符串写到输出设备#define OUT_CHAR 0 x1000#define OUT_STATUS 0 x
6、1001Char *mystring=“Hello,world.”;Char *current_char;current_char = mystring;while (*current_char != 0) poke(OUT_CHAR,*current_char); poke(OUT_STATUS,1);while (peek(OUT_STATUS) != 0);current_char+;15嵌入式系统概论忙等I/O方式-输入/输出同步方式编程#define in_CHAR 0 x1000#define in_STATUS 0 x1001#define OUT_CHAR 0 x1100#de
7、fine OUT_STATUS 0 x110116嵌入式系统概论忙等I/O方式-输入/输出同步方式编程(续)while (TRUE) /* read */while (peek(IN_STATUS) = 0);achar = (char)peek(IN_DATA);/* write */poke(OUT_DATA,achar);poke(OUT_STATUS,1);while (peek(OUT_STATUS) != 0);17I/O中断z忙等I/O效率非常低yI/O设备的速度远远小于CPU的速度y除了测试,CPU不能做其它任何事情zCPU的很多操作是可以与I/O事件并行执行y中断机制:可以改
8、变CPU的控制流顺序y强制CPU执行一段特定代码中断处理子例程18嵌入式系统概论I/O中断z由I/O设备逻辑决定什么时候中断zCPU响应中断可能无法立即响应x将程序计数器指向设备处理子例程z前台程序:无中断情况下CPU运行的程序19嵌入式系统概论中断机制CPUstatusregdataregmechanismPCintr requestintr ackdata/addressLR20嵌入式系统概论中断的物理连接zCPU 和设备通过CPU总线连接zCPU 和设备 通过握手协议进行通讯y设备发出中断请求yCPU准备处理I/O设备请求时,CPU发出中断响应21嵌入式系统概论中断行为z基于调用中断子例
9、程的形式y(保护现场)中断强制下一条指令调用中断服务子例程y执行中断子例程y(恢复现场)返回前台程序22正在运行的程序中断点中断处理程序中断处理开始中断处理结束嵌入式系统概论例:应用基本中断将字符从输入设备复制到输出设备23CPUstatusregdataregoutput devicestatusregdatareginput device嵌入式系统概论例:应用基本中断将字符从输入设备复制到输出设备z中断子例程void input_handler() /*输入中断子例程*/achar = peek(IN_DATA);gotchar = TRUE;void output_handler() /
10、*输出中断子例程*/ 24嵌入式系统概论例:应用基本中断将字符从输入设备复制到输出设备(续)main() while (TRUE) if (gotchar) poke(OUT_DATA,achar);poke(OUT_STATUS,1);gotchar = FALSE;25例:具有缓冲区的中断I/Oz字符队列head tailheadtaila26#define BUF_SIZE 8char io_bufBUF_SIZE;int buf_head=0,buf_tail=0;int error=0;void empty_buffer();void full_buffer();int nchars
11、();void add_char(char achar);char remove_char();27基于缓冲区的输入中断子例程void input_handler() char achar;if (full_buffer() error = 1;else achar = peek(IN_DATA); add_char(achar); poke(IN_STATUS,0);if (nchars() = 1) poke(OUT_DATA,remove_char(); poke(OUT_STATUS,1); 28基于缓冲区的输出中断子例程void output_handler() if (!empty
12、_buffer()poke(OUT_DATA, remove_char();poke(OUT_STATUS,1);29调试中断代码z若忘记改变寄存器的内容y前台程序会展示一些非常奇怪的错误y错误很难重现-它依赖与中断的时间30如何发现中断z在开始执行每条指令之前检查中断请求信号是否有中断请求z一旦出现中断,PC将指向中断服务子例程z注意:要保护和恢复现场31中断优先级和中断向量z两种机制允许中断处理更多的设备y优先级(Priorities):确定哪种中断首先获得CPUy向量(Vectors): 允许中断设备制定其中断服务子例程z大多数CPU这两种方式都支持32具有优先级的中断 -序号小的优先级
13、高CPUdevice 1device 2device nL1 L2 . Lninterruptacknowledge33使用轮询让几个设备共享一个中断34中断的优先级zMasking(屏蔽): 发生中断的优先级比正在中断的优先级低,CPU将不响应该优先级低的中断。zNonmaskable interrupt (NMI,不可屏蔽中断): 最高优先级,永不屏蔽y电源故障35中断向量z不同的设备有不同的中断服务子例程z中断向量表handler 0handler 1handler 2handler 3Interruptvectortable head36一般的中断机制intr?NY假设优先级的选择已经
14、处理.NignoreYvector?YYNtimeout?Ybus errorcall tablevectorintr priority current priority?continueexecutionN37ack中断开销z中断服务子例程执行的时间z中断机制的开销z寄存器存储/恢复z流水相关补偿zCache相关补偿38ARM 中断zARM支持两类中断y快速中断请求 (FIQs).y中断请求 (IRQs).z中断表开始地址:0.39ARM 最坏延迟z27个时钟周期y2周期同步外部请求y最多20周期完成当前指令y3周期的数据异常终止y2周期进入中断处理状态40管态z通过 SWI 指令进入SWI
15、 CODE_1z在中断向量表中的地址: 0 x08. z进入管理模式z将CPSR 存储到 SPSR.41异常(Exception)z内部检测到的错误z与指令是同步的,但它是不可预料的z通常是内部产生的z有多种异常,处理的方法与中断类似,有优先级和向量表42Trap(陷阱)z又叫软中断(software interrupt): 由指令产生的异常,然后进入管态zARM 通过SWI 指令进入软件中断43协处理器(Co-processor)z增加一些功能单元,可以通过指令来调用y浮点单元通过协处理器完成的zARM允许有16个协处理器y浮点数处理是用协处理器编号为1和2的44Caches 和 CPUsC
16、PUcachecontrollercachemainmemorydatadataaddressdataaddress45Cache操作z主存被映射到cache中.zCaches类型:y指令caches;y数据caches;y指令caches + 数据caches.z主存的读取时间就是不确定的.46TermszCache hit: (高速缓存命中) 位置就在cache中.zCache miss: (高速缓存未命中)位置不在cache中.zWorking set: (工作集)在一段时间内CPU访问的一小段存储单元,这个活动单元的集合就叫工作集.47未命中的类型zCompulsory (cold):
17、 (强制性未命中)存贮单元第一次被访问.zCapacity: (容量未命中)工作集过大.zConflict: (冲突未命中)多个地址映射到同一个cache 单元上.48主存的性能zh = cache 命中率.ztcache = cache访问时间,z tmain = 内存的访问时间.z平均内存访问时间:ytav = htcache + (1-h)tmain49多级cacheCPUL1 cacheL2 cache50mainmemory多级cache 访问时间zh1 = L1 cache 命中率.zh2 = L1未命中, L2命中率.ztL1 和tL2 cache1 和 cache2访问时间z平
18、均内存访问时间:ytav = h1tL1 + (h2-h1)tL2 + (1- h2-h1)tmain51替换策略(placement policy)zReplacement policy: 选择哪个cache单元的内容被淘汰,腾出空间存储新内存的内容z两种策略:y随机替换.y最近最少使用(Least-recently used (LRU)).Cache的组织z全相联(Fully-associative): 任何位置的内存都可以存储到cache的任何位置(几乎重没有实现).z直接映射(Direct-mapped): 每个存储单元被精确的映射到cache的某个单元上.zn-路组相联(N-way
19、set-associative): 每一个存储单元被映射到n组中的某个单元上.Cache的优点z经常访问的内容保留在高速缓存中.zCache 能够一次能够导入多个字,它是以块为单位进行导入、导出。y第一次访问后,顺序访问的速度快.直接映射cache有效标记=标记索引偏移hitvalue标记数据10 xabcdbyte byte byte .bytecache 块地址cache写操作z通写(Write-through): 每次写操作都同时改变高速缓存和相应的主存单元.z回写(Write-back): 只有当cache中的内容要被移出时,才将数据写到主存中.直接映射cachez许多地址映射到相同的
20、cache块中.z冲突很容易产生:y考虑一个具有1024个块的直接映射y数组 a 使用的地址0, 1, 2, y数组 b 使用的地址1024, 1025, 1026, y操作 ai + bi 产生冲突.组相联cachez直接映射caches的集合:Set 1Set 2Set n.hitdata例: 直接映射vs. 组相联cacheaddressdata00001010011111010000001101101001000101000111010101110100直接映射cachezAfter 001 access:blocktagdata00-010111110-11-zAfter 010 a
21、ccess:blocktagdata00-0101111100000011-z cache:4个块,每个块存储一个数据,地址与cache的对应: 地址 标记 块直接映射cache(续)zAfter 011 access:blocktagdata00-010111110000001100110zAfter 100 access:blocktagdata0011000010111110000001100110直接映射cache(续)zAfter 101 access:blocktagdata0011000011000110000001100110zAfter 111 access:blocktag
22、data00110000110001100000011101002-路组相联cachezCache的最后状态 (2个大小的直接映射的cache):setblk 0 tagblk 0 datablk 1 tagblk 1 data00 11000-01 011111000110 00000-11 00110101002-路组相联cache地址 标记 块zCache的最后状态 (与直接映射的cache大小一样):setblk 0 tagblk 0 datablk 1 tagblk 1 data0 010000 10 10001 100001 11 0100例: cacheszStrongARM:y
23、16 KB, 32-路, 32-字节块指令cache.y16 KB, 32-路, 32-字节块数据cache.y策略: 回写 CPU的性能z周期时间(Cycle time).zCPU的流水线(CPU pipeline).z高速缓存(cache).流水线z几条指令在不同的部件上同时执行z由于各种条件导致流水线阻滞:y分支;y内存延迟;yetc.流水线结构zARM7 3-级流水:y取指(fetch): 从内存取出指令;y译码(decode): 指令的操作码和操作数被译码从而决定执行什么功能;yExecute: 执行已译码的指令.ARM 流水线的执行add r0,r1,#5sub r2,r3,r6c
24、mp r2,#3fetchtimedecodefetchexecutedecodefetchexecutedecodeexecute123性能的测量zLatency: (延时) 一条指令流出流水线所花费的时间。zThroughput: (吞吐量)单位时间内执行指令的数目z建立时间:流水线开始工作,须经过一定时间才能达到最大吞吐率,这就是建立时间。z流水线增加其吞吐量,但并没有减少其延时阻滞(Pipeline stalls)z若某一步没有按照相同的时间完成,流水线就阻滞z阻滞增加了延时,减少了吞吐量ARM 多周期的load指令fetch decodeex ld r2ldmia r0,r2,r3s
25、ub r2,r3,r6cmp r2,#3ex ld r3fetchtimedecodeex subfetchdecodeex cmp控制阻滞z分支通常引入阻滞(分支补偿)y直到条件计算完后才知道执行那条指令ARM pipelined branchtimefetch decodeex bnebne foosub r2,r3,r6fetch decodefoo add r0,r1,r2ex bnefetch decodeex addex bne例: ARM 执行时间z确定FIR滤波器的执行时间:for (i=0; iN; i+)f = f + ci*xi;z循环测试的分支可能花费多于一个周期.yB
26、LT loop 最好情况下花费1个时钟周期,最糟情况下花费3个时钟周期。内存性能分析zCaches的引入使得执行时间非确定了y依赖于执行的顺序zCache未命中补偿(Cache miss penalty): 由于cache未命中而需要花费的额外时间z未命中的原因:强制性未命中,容量未命中,冲突未命中CPU功耗z在某些情况下,CPU的功耗与其运行时间同等重要z功率和能量: (Power vs. energy)y功耗是能量消耗和功率消耗的简称y热量的产生取决于功率;y电池的寿命取决于能量的消耗.CMOS 的功耗zCMOS几乎所有的数字系统都有的zVoltage drops: 功耗V2与成正比.z切
27、换: (Toggling)切换越多,功耗越多.z泄漏: (Leakage)消除漏电的唯一方法切断电源.CPU 节能的方法zCPU在低电压下使用.z在低时钟频率下使用z内部禁止当前执行功能不需要的功能单元z允许部分CPU完全与电源断开,以消除泄漏电流电源管理的特征z静态电源管理特征(Static power management): 由用户调用,不依赖与CPU的活动.z动电源管理特征( Dynamic power management): 基于CPU活动应用: PowerPC 603 节能模式z静态电源管理功能,提供三种低功耗模式:小睡(doze),打盹( nap),休眠( sleep)模式.z
28、动态电源管理技术y关闭不用的执行单元Uses static logic.yCache的组织,最小化活动电路的数目节电模式的进入和退出z进入或退出节电模式的消耗y时间;y能量.z确定进入是否值得z用能量状态机建立CPU能量模型应用: StrongARM SA-1100 节能模式z处理机有2个电源:yVDD 主电源:3.3V.yVDDX 电源:1.5V.z三种电源模式:y运行(Run): 正常操作模式.y空闲(Idle): 通过停止CPU时钟节省功耗,但系统单元模块任然供电y睡眠(Sleep): 关闭大部分芯片的活动SA-1100 能量状态机runidlesleepPrun = 400 mWPid
29、le = 50 mWPsleep = 0.16 mW10 ms10 ms90 ms160 ms90 ms总结zI/Oz中断zCachez功耗 85exercises1.简述输入/输出是如何与CPU一起,完成读写操作的?2.编写程序,利用poke 和 peek函数完成对字符串“hello world!”的输出。3.什么叫设备驱动程序?4.中断如何利用优先级和向量表实现中断服务的,并保证不会出现优先级高的中断在运行低优先级中断时没有响应。86exercises(cont)5.ARM7有哪几类中断,它们的优先级如何?如何保证FIQ中断能够快速响应?6.异常与中断有何区别?7.简述高速缓存的工作原理。8.高速缓存未命中有哪几类?9.通过例子解释实现直接映射高速缓存的方法。10.解释可以通过哪些方法降低功耗。87homeworkz1,2,5,7,9z课本p48 Q3-1688