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

下载本文档

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

文档简介

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切换: (Toggling)切换越多,功耗越多.z泄漏: (Leakage)消除漏电的唯一方法切断电源.CPU 节能的方法zCPU在低电压下使用.z在低时钟频率下使用z内部禁止当前执行功能不需要的功能单元z允许部分CPU完

温馨提示

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

评论

0/150

提交评论