第三章CPU相关知识_第1页
第三章CPU相关知识_第2页
第三章CPU相关知识_第3页
第三章CPU相关知识_第4页
第三章CPU相关知识_第5页
已阅读5页,还剩83页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式系统概论第三章CPU输入/输出机制管态,异常,陷阱存储管理和地址转换高速缓存CPU的性能和功耗1嵌入式系统概论3.1I/O编程I/O设备模拟元件或非电子元件数字逻辑——与CPU相关I/O设备与CPU的接口——一组寄存器CPUstatusregdataregmechanism2I/OI/O设备的寄存器数据寄存器:I/O与CPU交互的数据I/O设备读写的数据状态寄存器:提供设备运行的状态、信息只读方式,由设备完成对这些寄存器的操作,CPU只能读取它可读、可写方式,不仅设备可对这些寄存器操作,CPU也可以进行读、写操作3嵌入式系统概论I/O设备的分类计算机所管理的I/O设备按输入输出对象的不同可以分为以下3类:用户可读写设备,用于用户与计算机通信。如:显示器、键盘、鼠标、打印机等机器可读写设备,用于电子装置与计算机通信。如:硬盘、U盘、控制器通信设备,用于与远程设备通信。如:Modem、ISDN终端4嵌入式系统概论嵌入式系统概论应用:8251UART

(Universalasynchronousreceiver/transmitter)串行通讯的基本设备UART功能被集成到ARM9有3组发送接收接口,通过通用的I/O接口复用获得的允许发送接收参数编程5嵌入式系统概论8251UART与CPU接口CPU串口68251串行数据通信系统模型

DTE-DataTerminalEquipment,常常是计算机.

DCE-DataCommunicationEquipment,常常是MODEM,也可以是计算机.串行接口

–主要是8251A、16550、8250等,连接DTE和DCE。7嵌入式系统概论串行通讯数据以字符流的形式timebit0bit1bitn-1nocharstartstop...8嵌入式系统概论串行通讯的参数波特率(Baud(bit)rate)每个字符的位数是否有奇偶校验(Parity/noparity)奇、偶校验(Even/oddparity)结束位的长度

(1,1.5,2位).9嵌入式系统概论I/O编程两种方法支持I/O编程特殊的I/O指令Intelx86提供

in,out

指令内存映射I/O大多数CPUs应用内存映射I/O支持I/O指令的CPU并不排除内存映射I/O10内存映射I/O为每一个I/O设备的寄存器提供地址程序使用普通的CPU读写指令来与设备通讯Definelocationfordevice:DEV1EQU0x1000Read/writecode:LDRr1,#DEV1LDRr0,[r1]LDRr0,#8STRr0,[r1]11嵌入式系统概论内存映射I/O——高级语言

Peek和poke读操作intpeek(char*location){ return*location;}写操作 voidpoke(char*location,charnewval){ (*location)=newval;}12I/O操作的方式13嵌入式系统概论忙等I/O方式轮询(polling):通过CPU读I/O设备状态寄存器来询问设备是否空闲14嵌入式系统概论忙等I/O方式-输出设备编程将一个字符串写到输出设备#defineOUT_CHAR0x1000#defineOUT_STATUS0x1001Char*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方式-输入/输出同步方式编程#definein_CHAR0x1000#definein_STATUS0x1001#defineOUT_CHAR0x1100#defineOUT_STATUS0x110116嵌入式系统概论忙等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中断忙等I/O效率非常低I/O设备的速度远远小于CPU的速度除了测试,CPU不能做其它任何事情CPU的很多操作是可以与I/O事件并行执行中断机制:可以改变CPU的控制流顺序强制CPU执行一段特定代码——中断处理子例程18嵌入式系统概论I/O中断由I/O设备逻辑决定什么时候中断CPU响应中断——可能无法立即响应将程序计数器指向设备处理子例程前台程序:无中断情况下CPU运行的程序19嵌入式系统概论中断机制CPUstatusregdataregmechanismPCintrrequestintrackdata/addressLR20嵌入式系统概论中断的物理连接CPU和设备通过CPU总线连接CPU和设备

通过握手协议进行通讯设备发出中断请求CPU准备处理I/O设备请求时,CPU发出中断响应21嵌入式系统概论中断行为基于调用中断子例程的形式(保护现场)中断强制下一条指令调用中断服务子例程执行中断子例程(恢复现场)返回前台程序22正在运行的程序中断点中断处理程序中断处理开始中断处理结束嵌入式系统概论例:应用基本中断将字符从输入设备复制到输出设备23CPUstatusregdataregoutputdevicestatusregdatareginputdevice嵌入式系统概论例:应用基本中断将字符从输入设备复制到输出设备中断子例程voidinput_handler()/*输入中断子例程*/{ achar=peek(IN_DATA); gotchar=TRUE;}voidoutput_handler()/*输出中断子例程*/{}24嵌入式系统概论例:应用基本中断将字符从输入设备复制到输出设备(续)main(){ while(TRUE){ if(gotchar){ poke(OUT_DATA,achar); poke(OUT_STATUS,1); gotchar=FALSE; } } }25例:具有缓冲区的中断I/O字符队列headtailheadtaila26#defineBUF_SIZE8chario_buf[BUF_SIZE];intbuf_head=0,buf_tail=0;interror=0;voidempty_buffer();voidfull_buffer();intnchars();voidadd_char(charachar);charremove_char();27基于缓冲区的输入中断子例程voidinput_handler(){ charachar; 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基于缓冲区的输出中断子例程voidoutput_handler(){ if(!empty_buffer()){ poke(OUT_DATA,remove_char()); poke(OUT_STATUS,1); } }29调试中断代码若忘记改变寄存器的内容前台程序会展示一些非常奇怪的错误错误很难重现---它依赖与中断的时间30如何发现中断在开始执行每条指令之前检查中断请求信号是否有中断请求一旦出现中断,PC将指向中断服务子例程注意:要保护和恢复现场31中断优先级和中断向量两种机制允许中断处理更多的设备优先级(Priorities):确定哪种中断首先获得CPU向量(Vectors):

允许中断设备制定其中断服务子例程大多数CPU这两种方式都支持32具有优先级的中断

---序号小的优先级高CPUdevice1device2devicenL1L2..Lninterruptacknowledge33使用轮询让几个设备共享一个中断34中断的优先级Masking(屏蔽):发生中断的优先级比正在中断的优先级低,CPU将不响应该优先级低的中断。Nonmaskableinterrupt(NMI,不可屏蔽中断):最高优先级,永不屏蔽电源故障35中断向量不同的设备有不同的中断服务子例程中断向量表handler0handler1handler2handler3Interruptvectortablehead36一般的中断机制intr?NY假设优先级的选择已经处理.NignoreYvector?YYNtimeout?Ybuserrorcalltable[vector]intrpriority>currentpriority?continueexecutionN37ack中断开销中断服务子例程执行的时间中断机制的开销寄存器存储/恢复流水相关补偿Cache相关补偿38ARM中断ARM支持两类中断快速中断请求(FIQs).中断请求(IRQs).中断表开始地址:0.39ARM最坏延迟27个时钟周期2周期同步外部请求最多20周期完成当前指令3周期的数据异常终止2周期进入中断处理状态40管态通过SWI指令进入SWICODE_1在中断向量表中的地址:0x08.进入管理模式将CPSR存储到SPSR.41异常(Exception)内部检测到的错误与指令是同步的,但它是不可预料的通常是内部产生的有多种异常,处理的方法与中断类似,有优先级和向量表42Trap(陷阱)又叫软中断(softwareinterrupt):由指令产生的异常,然后进入管态ARM通过SWI指令进入软件中断43协处理器(Co-processor)增加一些功能单元,可以通过指令来调用浮点单元通过协处理器完成的ARM允许有16个协处理器浮点数处理是用协处理器编号为1和2的44Caches和CPUsCPUcachecontrollercachemainmemorydatadataaddressdataaddress45Cache操作主存被映射到cache中.Caches类型:指令caches;数据caches;指令caches+数据caches.主存的读取时间就是不确定的.46TermsCachehit:(高速缓存命中)位置就在cache中.Cachemiss:(高速缓存未命中)位置不在cache中.Workingset:(工作集)在一段时间内CPU访问的一小段存储单元,这个活动单元的集合就叫工作集.47未命中的类型Compulsory(cold):(强制性未命中)存贮单元第一次被访问.Capacity:(容量未命中)工作集过大.Conflict:(冲突未命中)多个地址映射到同一个cache单元上.48主存的性能h=cache命中率.tcache=cache访问时间,tmain=内存的访问时间.平均内存访问时间:tav=htcache+(1-h)tmain49多级cacheCPUL1cacheL2cache50mainmemory多级cache访问时间h1=L1cache命中率.h2=L1未命中,L2命中率.tL1

和tL2–cache1和cache2访问时间平均内存访问时间:tav=h1tL1+(h2-h1)tL2+(1-h2-h1)tmain51替换策略(placementpolicy)Replacementpolicy:选择哪个cache单元的内容被淘汰,腾出空间存储新内存的内容两种策略:随机替换.最近最少使用(Least-recentlyused(LRU)).Cache的组织全相联(Fully-associative):任何位置的内存都可以存储到cache的任何位置(几乎重没有实现).直接映射(Direct-mapped):每个存储单元被精确的映射到cache的某个单元上.n-路组相联(N-wayset-associative):每一个存储单元被映射到n组中的某个单元上.Cache的优点经常访问的内容保留在高速缓存中.Cache能够一次能够导入多个字,它是以块为单位进行导入、导出。第一次访问后,顺序访问的速度快.直接映射cache有效标记=标记索引偏移hitvalue标记数据10xabcdbytebytebyte...bytecache块地址cache写操作通写(Write-through):每次写操作都同时改变高速缓存和相应的主存单元.回写(Write-back):只有当cache中的内容要被移出时,才将数据写到主存中.直接映射cache许多地址映射到相同的cache块中.冲突很容易产生:考虑一个具有1024个块的直接映射数组a[]使用的地址0,1,2,…数组b[]使用的地址1024,1025,1026,…操作a[i]+b[i]产生冲突.组相联cache直接映射caches的集合:Set1Set2Setn...hitdata例:直接映射vs.组相联cache直接映射cacheAfter001access:block tag data00 - -01 0 111110 - -11 - -After010access:block tag data00 - -01 0 111110 0 000011 - -cache:4个块,每个块存储一个数据,地址与cache的对应:

地址

标记块直接映射cache(续)After011access:block tag data00 - -01 0 111110 0 000011 0 0110After100access:block tag data00 1 100001 0 111110 0 000011 0 0110直接映射cache(续)After101access:block tag data00 1 100001

1

000110 0 000011 0 0110After111access:block tag data00 1 100001 1 000110 0 000011

1

01002-路组相联cacheCache的最后状态(2个大小的直接映射的cache):set blk0tag blk0data blk1tag blk1data00 1 1000 - -010 1111 1 000110 0 0000 - -11 0 0110 1 01002-路组相联cache地址

标记块Cache的最后状态(与直接映射的cache大小一样):set blk0tag blk0data blk1tag blk1data0 01 0000 10 10001 10 0001 11 0100例:cachesStrongARM:16KB,32-路,32-字节块指令cache.16KB,32-路,32-字节块数据cache.策略:回写

CPU的性能周期时间(Cycletime).CPU的流水线(CPUpipeline).高速缓存(cache).流水线几条指令在不同的部件上同时执行由于各种条件导致流水线阻滞:分支;内存延迟;etc.流水线结构ARM73-级流水:取指(fetch):

从内存取出指令;译码(decode):

指令的操作码和操作数被译码从而决定执行什么功能;Execute:执行已译码的指令.ARM流水线的执行addr0,r1,#5subr2,r3,r6cmpr2,#3fetchtimedecodefetchexecutedecodefetchexecutedecodeexecute123性能的测量Latency:(延时)一条指令流出流水线所花费的时间。Throughput:(吞吐量)单位时间内执行指令的数目建立时间:流水线开始工作,须经过一定时间才能达到最大吞吐率,这就是建立时间。流水线增加其吞吐量,但并没有减少其延时阻滞(Pipelinestalls)若某一步没有按照相同的时间完成,流水线就阻滞阻滞增加了延时,减少了吞吐量ARM多周期的load指令fetchdecodeexldr2ldmiar0,{r2,r3}subr2,r3,r6cmpr2,#3exldr3fetchtimedecodeexsubfetchdecodeexcmp控制阻滞分支通常引入阻滞(分支补偿)直到条件计算完后才知道执行那条指令ARMpipelinedbranchtimefetchdecodeexbnebnefoosubr2,r3,r6fetchdecodefooaddr0,r1,r2exbnefetchdecodeexaddexbne例:ARM执行时间确定FIR滤波器的执行时间:for(i=0;i<N;i++) f=f+c[i]*x[i];循环测试的分支可能花费多于一个周期.BLTloop

最好情况下花费1个时钟周期,最糟情况下花费3个时钟周期。内存性能分析Caches的引入使得执行时间非确定了依赖于执行的顺序Cache未命中补偿(Cachemisspenalty):由于cache未命中而需要花费的额外时间未命中的原因:强制性未命中,容量未命中,冲突未命中CPU功耗在某些情况下,CPU的功耗与其运行时间同等重要功率和能量:(Powervs.energy)功耗是能量消耗和功率消耗的简称热量的产生取决于功率;电池的寿命取决于能量的消耗.CMOS的功耗CMOS几乎所有的数字系统都有的Voltagedrops:功耗V2与成正比.切换:(Toggling)切换越多,功耗越多.泄漏:(Leakage)消除漏电的唯一方法切断电源.CPU节能的方法CPU在低电压下使用.在低时钟频率下使用内部禁止当前执行功能不需要的功能单

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论