微处理器的内部组成及外部功能特性.ppt
第 7 章,微处理器的内部组成及外部功能特性,本章主要内容,1.微处理器的内部组成结构2.微处理器的外部引脚功能3.微处理器的总线时序,7.1 微处理器的内部结构,为了说明现代微处理器的内部组成结构,这里给出一个经适当简化的Pentium处理器的内部结构框图(如图7.1所示),并以此为例对现代微处理器的主要组成部件及其实现技术做概要说明。,Pentium 微处理器(1993,320万晶体管),图7.1 Pentium 处理器的内部结构框图,7.1.1 总线接口单元BIU,总线接口单元BIU(Bus Interface Unit)是微处理器与微机中其他部件(如存储器、I/O接口等)进行连接与通信的物理界面。通过这个界面,实现微处理器与其他部件之间的数据信息、地址信息以及控制命令信号的传送。由图7-1可见,Pentium处理器的外部数据总线宽度为64位,它与存储器之间的数据传输率可达528MB/s。,由于Pentium处理器内部的算术逻辑单元ALU(Arithmatic Logic Unit)和寄存器的宽度仍是32位的,所以它仍属于32位微处理器。Pentium处理器的地址总线位数为32位,即它的直接寻址物理地址空间为2324GB。另外,BIU还有地址总线驱动、数据总线驱动、总线周期控制及总线仲裁等多项功能。,7.1.2 指令Cache与数据Cache,Cache(高速缓存)技术是现代微处理器及微型计算机设计中普遍采用的一项重要技术。它使CPU在较低速的存储器件条件下获得较高速的存储器访问时间,并提高系统的性能价格比。在Pentium之前的80386设计中,曾在处理器外部设置一个容量较小但速度较快的“片外Cache”。在80486中,则是在处理器内部设置了一个8KB的“片内Cache”,统一作为指令和数据共用的高速缓存。,Pentium处理器中的Cache设计与80386和80486有很大的不同,它采用哈佛结构。把Cache分为“指令Cache”和“数据Cache”分别设置,从而避免仅仅设置统一Cache时发生存储器访问冲突的现象。Pentium包括两个8KB的Cache一个为8KB的数据Cache,一个为8KB的指令Cache。指令Cache只存储指令,而数据Cache只存储指令所需的数据。,在只有统一的高速缓存的微处理器(如 80486)中,一个数据密集的程序很快就会占满高速缓存,几乎没有空间用于指令缓存,这就降低了微处理器的执行速度。在Pentium中就不会发生这种情况,因为它有单独的指令Cache。如图7-1所示,经过BIU,指令被保存在8KB的“指令Cache”中,而指令所需要的数据则保存在8KB的“数据Cache”中。,这两个Cache可以并行工作,并被称为“1级Cache”或“片内Cache”,以区别于设置在微处理器外部的“2级Cache”或“片外Cache”。,7.1.3 超标量流水线结构,“超标量流水线”结构是Pentium处理器设计技术的核心。流水线(pipeline)方式是把一个重复的过程分解为若干子过程,每个子过程可以与其他子过程并行进行的工作方式。,采用流水线技术设计的微处理器,把每条指令分为若干个顺序的操作(如取指、译码、执行等),每个操作分别由不同的处理部件(如取指部件、译码部件、执行部件等)来完成。这样构成的微处理器,可以同时处理多条指令。对于每个处理部件来说,每条指令的同类操作(如取指令)就像流水一样连续被加工处理。这种指令重叠、处理部件连续工作的计算机(或处理器),称为流水线计算机(或处理器)。,采用流水线技术,可以加快计算机执行程序的速度并提高处理部件的使用效率。图 7.2 表示了把指令划分为五个操作步骤并由处理器中五个处理部件分别处理时流水线的工作情形。,图7.2 五级流水的工作情形,如图7.2所示,流水线中的各个处理部件可并行工作,从而可使整个程序的执行时间缩短。容易看到,在图中所示的7个时间单位内,已全部执行完3条指令。如果以完全串行的方式执行,则3条指令需3515个时间单位才能完成。显然,采用流水线方式可以显著提高计算机的处理速度。,Pentium处理器的流水线由分别称为“U流水”和“V流水”的两条指令流水线构成(双流水线结构),其中每条流水线都拥有自己的地址生成逻辑、ALU及数据Cache接口。Pentium处理器可以在一个时钟周期内同时发送两条指令进入流水线。比相同频率的单条流水线结构(如 80486)性能提高了一倍。通常称这种具有两条或两条以上能够并行工作的流水线结构为超标量(superscalar)结构。,与图7.2所示的情形相同,Pentium的每一条流水线也是分为五个阶段(5级流水):“指令预取”、“指令译码”、“地址生成”、“指令执行”和“回写”。Pentium处理器实现的是两条流水线的并行操作,而每条流水线由五个流水级构成。,另外,还可以将流水线的若干流水级进一步细分为更多的阶段(流水小级),并通过一定的流水线调度和控制,使每个细分后的“流水小级”可以与其他指令的不同的“流水小级”并行执行,从而进一步提高微处理器的性能。这被称为“超级流水线”技术(superpipelining)。,“超级流水线”与“超标量”结构的不同:,超标量结构是通过重复设置多个“取指”部件,设置多个“译码”、“地址生成”、“执行”和“写结果”部件,并让这些功能部件同时工作来加快程序的执行,实际上是以增加硬件资源为代价来换取处理器性能的;而超级流水线处理器则不同,它只需增加少量硬件,是通过各部分硬件的充分重叠工作来提高处理器性能的。,从流水线的时空角度上看:超标量处理器采用的是空间并行性;超级流水线处理器采用的是时间并行性。,从超大规模集成电路(VLSI)的实现工艺来看:超标量处理器能够更好地适应VLSI工艺的要求。通常,超标量处理器要使用更多的晶体管。超流水线处理器则需要更快的晶体管及更精确的 电路设计。为了进一步提高处理器执行指令的并行度,可以把超标量技术与超流水线技术结合在一起,这就是“超标量超流水线”处理器。,例如,Intel的P6结构(Pentium/处理器)就是采用这种技术的更高性能微处理器,其超标度为3(即有3条流水线并行操作);流水线的级数为12级。,7.1.4 动态转移预测及转移目标缓冲器BTB(Branch Target Buffer),正是由于计算机指令中具有能够改变程序流向的指令,才使得程序结构灵活多样,程序功能丰富多彩。这类指令一般包括跳转(JMP)指令、调用(CALL)指令和返回(RET)指令等,我们统称之为转移(branch)指令。转移指令又可分为“无条件转移指令”及“条件转移指令”两大类。,无条件转移指令执行时一定会发生转移,而条件转移指令执行时是否发生转移则取决于指令所要求的条件当时是否满足。例如:80 x86系统中的条件转移指令“JC START”,执行时若进位标志CF为1,则使程序转移到“转移目标地址”START处;否则,将顺序执行紧接着这条指令之后的下一条指令。,转移指令也给处理器的流水线操作带来麻烦。因为在处理器预取指令时还未对指令进行译码,即它还不知道哪条指令是转移指令,所以只能按程序的静态顺序进行。也就是说,即使是遇到一条转移指令,也无法到“转移目标地址”处去预取指令装入指令队列,而只能顺序地装入紧接着转移指令之后的若干条指令。,而当指令被执行并确实发生转移时,指令预取缓冲器中预先装入的指令就没用了。此时必须将指令缓冲器中原来预取的指令废除(也称“排空”流水线),并从转移目标地址开始处重新取指令装入流水线。这样就极大地影响了流水线的处理速度和性能。,已有多项技术用于减小转移指令对流水线性能的影响,如基于编译软件的“延迟转移”(delayed branching)技术和基于硬件的“转移预测”(branch prediction)技术。转移预测又有“静态转移预测”及“动态转移预测”之分。静态转移预测只依据转移指令的类型来预测转移是否发生。例如,对某一类条件转移指令总是预测为转移发生,对另一类总是预测转移不发生。显然,静态转移预测的正确率不会很高,只能作为其他转移处理技术的辅助手段。,动态转移预测法(dynamic branch prediction)是依据一条转移指令过去的行为来预测该指令的将来行为。即处理器要有一个“不断学习”的过程。由于程序结构中有众多重复或循环执行的机会,所以在预测算法选得较好的情况下,动态转移预测会达到较高的正确率,故被现代微处理器所普遍采用。下面,仍以Pentium为例来简要说明这种动态转移预测法的基本工作原理。,Pentium提供了一个称为“转移目标缓冲器”BTB(Branch Target Buffer)的小Cache来动态预测程序的转移操作。在程序执行时,若某条指令导致转移,便记忆下这条转移指令的地址及转移目标地址(放入BTB内部的“登记项”中),并用这些信息来预测这条指令再次发生转移时的路径,预先从这里记录的“转移目标地址”处预取指令,以保证流水线的指令预取不会空置。其基本工作机制如图7.3所示。,图7.3 Pentium BTB的工作机制,指令预取器,逻辑控制,执行,指令译码,预取缓冲器,指令Cache,加入新项,转移取,顺序取,选择相应操作,实际执行情况,命中与否,查找,取指令,“指令译码”阶段检查从预取缓冲器中取出的指令是否为转移指令,若是转移指令,则将此指令的地址送往BTB进行查找。若BTB命中(即在BTB中存在相应的登记项),则根据该项的“历史位”状态预测此指令在执行阶段是否发生转移。,若预测为发生转移,则将该项中登记的“转移目标地址”提交给指令预取器,并指挥指令预取器从“转移目标地址”处提取指令装入预取缓冲器,即进行图7.3中所示的“转移取”;若预测为不发生转移,则从该转移指令的下一条指令开始提取指令,即进行所谓“顺序取”。,若BTB未命中(即在BTB中不存在相应的登记项),则说明BTB中没有该指令的历史记录,此时固定预测为不发生转移,即固定进行“顺序取”。至于该指令在执行阶段实际发生转移时的处理情况,将在下面介绍Pentium“执行单元”的功能时再作具体说明。,BTB登记项中的“历史位”用以登记相应转移指令先前的执行行为,并用于预测此指令执行时是否发生转移。在执行阶段要根据实际是否发生转移,来修改命中项的历史位;对于BTB未命中的转移指令而在执行阶段发生转移的情况,在BTB中建立新项(加入新项)并设定历史位为11。图7.4给出了BTB历史位的意义及状态转换情况。,图7.4 Pentium BTB历史位的意义及状态转换,历史位:11预测:强发生转移,历史位:00预测:不发生转移,历史位:01预测:弱发生转移,历史位:10预测:发生转移,实际发生转移时,历史位修改方向,实际不发生转移时,历史位修改方向,发生转移,不发生转移,由图7.4可以看出,Pentium对历史位意义的设定更倾向于预测转移发生。历史位11常称为“强发生”(strongly taken)状态,10称为“发生”(taken)状态,01称为“弱发生”(weakly taken)状态,这三种历史位都预测转移发生。,容易想到,对于循环程序而言,在首次进入循环和退出循环时,都将出现转移预测错误的情况。即首次进入循环时,预测不发生转移,而实际发生转移;退出循环时,预测发生转移,而实际不发生转移。这两种情况下均需要重新计算转移地址,并造成流水线的停顿和等待。但若循环10次,2次预测错误而8次正确;循环100次,2次预测错误而98次正确。因此,循环次数越多,BTB的效益越明显。,7.1.5 指令预取器和预取缓冲器,指令预取器总是按给定的指令地址,从指令Cache中顺序地取出指令放入预取缓冲器中,直到在指令译码阶段遇到一条转移指令并预测它在指令执行阶段将发生转移时为止。此时,如图7.4所示,由BTB提供预测转移发生时的目标地址,并按此地址开始再次顺序地取指令,直到又遇到一条转移指令并预测转移发生时为止。指令预取器就是以这种折线式顺序由指令Cache取出指令装入预取缓冲器的。,7.1.6 指令译码器,指令译码器的基本功能是将预取来的指令进行译码,以确定该指令的操作。Pentium处理器中,指令译码器的工作过程可分为两个阶段:在第一个阶段,对指令的操作码进行译码,并检查是否为转移指令。若是转移指令,则将此指令的地址送往BTB。再进一步检查BTB中该指令的历史记录,并决定是否实施相应的转移预测操作。,在第二个阶段,指令译码器需生成存储器操作数的地址。在保护方式下,还需按保护模式的规定检查是否有违约地址,若有,则产生“异常”(exception),并进行相应的处理。,7.1.7 执行单元EU,指令的执行以两个ALU为中心,完成U、V流水线中两条指令的算术及逻辑运算。执行单元的主要功能有:(1)按地址生成阶段(即指令译码的第二阶段)提供的存储器操作数地址,首先在1级数据Cache中获取操作数;若1级数据Cache“未命中”(操作数未在Cache中),则在2级Cache(片外Cache)或主存中查找。,(2)确认在指令译码阶段对转移指令的转移预测是否与实际情况相符,即确认预测是否正确。若预测正确,则除了适当修改BTB中的“历史位”外,其他什么事情也不发生;若预测错误,则除了修改“历史位”外,还要清除该指令之后已在U、V流水线中的全部指令(“排空”流水线),并指挥“指令预取器”重新取指令装入流水线。,另外,对于前面提到的在查找BTB时“未命中”从而固定预测为不发生转移的情况:若在执行阶段此指令确实没有发生转移,则其他什么事情也不发生,以后再遇到此转移令时仍作为一个“新面孔”的转移指令按前述办法来对待;若在执行阶段此指令实际发生转移的话,则按“预测错误”处理,此时除了“排空”流水线外,还需将“转移目标地址”提交给BTB,连同在指令译码阶段提交的“转移指令地址”,在BTB中建立一个新项,并设定“历史位”为“强发生”状态(11)。,7.1.8 浮点处理单元FPU,浮点处理单元FPU(Floating Point Unit)专门用来处理浮点数或进行浮点运算,因此也称浮点运算器。在8086、80286及80386年代,曾设置单独的FPU芯片(8087、80287和80387),并称为算术协处理器(Mathematical CO-processor),简称协处理器。那时的主板上配有专门的协处理器插座。自从80486 DX开始,则将FPU移至微处理器内部,成为微处理器芯片的一个重要组成部分(如图7-1所示)。,Pentium处理器的FPU性能已做了很大改进。FPU内有8个80位的浮点寄存器FR0FR7,内部数据总线宽度为80位,并有分立的浮点加法器、浮点乘法器和浮点除法器,可同时进行三种不同的运算。FPU的浮点指令流水线也是双流水线结构。每条流水线分为8个流水级:预取指令、指令译码、地址生成、取操作数、执行1、执行2、写回结果和错误报告。,7.1.9 控制单元CU,控制单元CU(Control Unit)的基本功能是控制整个微处理器按照一定的时序过程一步一步地完成指令的操作。Pentium 的大多数简单指令都是以所谓“硬连线”(hard wired)逻辑来实现的,即指令通过“指令译码器”译码后直接产生相应的控制信号来控制指令的执行,从而获得较快的指令执行速度;,对于那些复杂指令的执行则是以“微程序”(microprogramming)方式实现的。按照微程序实现方式,是将指令的操作变成相应的一组微指令序列(即微程序)并预先存放在一个只读存储器(Microcode ROM)中。当指令执行时,按安排好的顺序从只读存储器中一条一条读出这些微指令,从而产生相应的操作控制信号去控制指令的执行。,“微程序”方式与“硬连线”方式是CPU控制指令执行的两种不同的实现方式。它们各有不同的特点。一般说来,“微程序”方式较方便灵活,但指令执行速度较慢,在传统的微处理器设计如CISC(Complex Instruction Set Computer)结构中常被采用;,“硬连线”方式灵活性较差,但它的突出优点是指令执行速度很快,常用于RISC(Reduced Instruction Set Computer)结构的机器中。也可以说,RISC结构中一般不使用“微程序”技术。另外,控制单元还负责流水线的时序控制,以及处理与“异常”和“中断”有关的操作和控制。,7.2 微处理器的外部功能特性,7.2.1 微处理器的外部引脚信号,1.80386 DX的外部引脚信号概况,80386 DX微处理器共132个外部引脚,用来实现与存储器、I/O接口或其他外部电路进行连接和通信。按功能的不同,可将这132个引脚信号分成4组:存储器/IO接口 中断接口 DMA接口 协处理器接口图7.6给出了80386 DX外部引脚信号概况图示。表 7-1列出了各个引脚信号的名称、功能、传送方向以及每个信号的有效电平。,图7.6 微处理器(80386 DX)的外部引脚信号,微处理器80386DX,A31A2,D31D0,DMA接口,中断接口,协处理器接口,HOLD,HLDA,INTR,NMI,_BUSY,PEREQ,RESET,_ERROR,_ _BE3BE0,_READY,_ADS,_M/IO,_W/R,_BS16,_LOCK,_NA,_D/C,存储器/IO接口,表7-1 80386 DX 外部引脚信号列表,例如,“存储器/IO接口”中的M/IO信号:其功能是“存储器/IO指示”,用以告诉外部电路当前微处理器是在访问存储器还是I/O接口;该信号的传送方向是输出,即它是由微处理器产生的输出信号;它的有效电平为1/0,其含义为,在这个信号线上的逻辑1电平表明CPU当前是在访问存储器,而逻辑0电平表明是在访问I/O接口。又如,“中断接口”中的INTR信号:是可屏蔽中断请求输入信号,其有效电平是逻辑1。外部设备利用这个信号通知微处理器,它们需要得到服务。,(1)地址和数据总线信号地址总线和数据总线形成了CPU与存储器和I/O子系统间进行通信的基本通路。在早期的Intel微处理器(如8085、8086/8088)中,曾普遍采用地址总线和数据总线复用技术,即将部分(或全部)地址总线与数据总线共用微处理器的一部分引脚,目的是为了减少微处理器的引脚数量,但由此也会带来控制逻辑及操作时序上的复杂性。,自80286及更高型号的微处理器开始,则采用分开的地址和数据总线。如图7.5所示,80386 DX的地址总线信号A31A2和数据总线信号D31D0被分别设定在不同的引脚上。,从硬件的观点来看,80386 DX的实模式与保护模式之间仅有一点不同,即地址总线的规模。在实模式下,只输出低18位地址信号A19A2。在保护模式下,则输出30位地址信号A31A2。其实,实模式的地址长度为20位,保护模式的地址长度是32位。其余的两位地址码A1和A0被80386 DX内部译码,产生字节允许信号BE3、BE2、BE1和BE0,以控制在总线上传送字节、字或双字。,由图7.6 及表7-1可以看到,地址总线是输出信号线。它们用于传送从CPU到存储器或I/O接口的地址信息。在实模式下,20位地址给出了80386 DX寻址1M(220)字节物理地址空间的能力;而在保护模式下,32位地址可以寻址4G(232)字节的物理地址空间。,无论是在实模式下还是保护模式下,80386 DX微型计算机均具有独立的I/O地址空间。该I/O地址空间的大小为64K字节单元。所以,在寻址I/O设备时,仅需使用地址线A15A2及相应的字节允许信号BE。,数据总线由32条数据线D31D0构成。由图7.6及表7-1可以看到,数据总线是双向的,即数据既可以由存储器或I/O接口输入给CPU,也可以由CPU输出给存储器或I/O接口。在数据总线上传送数据的类型是对存储器读/写的数据或指令代码、对外部设备输入/输出的数据以及来自中断控制器的中断类型码等。,在一个总线周期内,80386 DX在数据总线上可以传送字节、字或双字。所以,它必须通知外部电路发生何种形式的数据传送以及数据将通过数据总线的哪一部分进行传送。80386 DX是通过激活相应的字节允许信号(BE3BE0)来做到这一点的。表7-2列出了每个字节允许信号及对应被允许的数据总线部分。,表7-2 字节允许及数据总线信号,例 当字节允许信号BE3BE2BE1BE01100时,将产生哪种类型的数据传送(字节、字、双字)?数据传送经过哪些数据线?解 由表7-2容易发现,此时将在数据线D15D0上进行一个数据字的传送。,(2)控制信号,微处理器的控制信号用来支持和控制在地址和数据总线上进行的信息传输。通过这些控制信号表明,何时有效地址出现在地址总线上,数据以什么样的方向在数据总线上传送,写入到存储器或I/O接口的数据何时在数据总线上有效,以及从存储器或I/O接口读出的数据何时能够在数据总线上放好,等等。80386 DX并不直接产生上述功能的控制信号,而是在每个总线周期的开始时刻输出总线周期定义的指示信号。这些总线周期指示信号需在外部电路中进行译码,从而产生对存储器和I/O接口的控制信号。,三个信号用来标识80386 DX的总线周期类型,即在图7.6及表7-1中所列出的“写/读指示”(W/R)、“数据/控制指示”(D/C)及“存储器/IO指示”(M/IO)信号。表7-3列出了这些总线周期指示信号的全部状态组合及对应的总线周期类型。,表7-3 总线周期指示信号及总线周期类型,例:若总线周期指示码M/IO、D/C、W/R010,则将产生什么类型的总线周期?解:表7-3不难发现,总线周期指示码010标识着一个“读I/O数据”的总线周期。,在图7.6的“存储器/IO接口”中,还可以看到另外三个控制信号,即地址状态(ADS)、就绪(READY)及下一地址(NA)信号。ADS为逻辑0表示总线周期指示码(M/IO、D/C、W/R)、字节允许信号(BE3BE0)及地址信号(A31A2)全为稳定状态。ADS信号通常是提供给外部总线控制逻辑电路,表明总线周期指示码、字节允许及地址信号是否有效。,READY信号用于插入等待状态(Tw)到当前总线周期中,以便通过增加时钟周期数使之得到扩展。在图7.6中可以看到,这个信号是输入给80386 DX的。通常它是由存储器或I/O子系统产生并经外部总线控制逻辑电路提供给80386 DX。通过将READY信号变为逻辑0,存储器或I/O接口可以告诉80386 DX它们已经准备好,处理器可以完成数据传送操作。,80386 DX支持在其总线接口上的地址流水线方式。所谓地址流水线(Address Pipelining),是指对下一个总线周期的地址、总线周期指示码及有关的控制信号可以在本总线周期结束之前发出,从而使对下一个总线周期的寻址与本总线周期的数据传送相重叠。采用这种方式,可以用较低速的存储器电路获得与较高速存储器相同的性能。外部总线控制逻辑电路是通过将NA输入信号有效(变为逻辑0)来激活这种流水线方式的。,由80386 DX输出的另一个控制信号是总线封锁(LOCK)信号。这个信号用以支持多处理器结构。在使用共享资源(如全局存储器)的多处理器系统中,该信号能够用来确保系统总线和共享资源的占用不被间断。当微处理器执行带有LOCK前缀的指令时,则LOCK输出引脚变为逻辑0,从而可以封锁共享资源以独占使用。,最后一个控制信号是“16位总线宽”(BS16)输入信号。该信号用来选择32位(BS161)或16位(BS160)数据总线。,3.中断接口信号,由图7.6可见,80386 DX的中断接口信号有“中断请求”(INTR)、“非屏蔽中断请求”(NMI)及“系统复位”(RESET)。INTR是一个对80386 DX的输入信号,用来表明外部设备需要得到服务。80386 DX在每条指令的开始时刻采样这个输入信号。INTR引脚上的逻辑1电平表示出现了中断请求。,当80386 DX检测到有效的中断请求信号后,若IF=1,便启动一个中断响应总线周期时序。在表7-3中可以看到,中断响应总线周期的出现是通过总线周期指示码M/IO、D/C、W/R等于000来通知外部电路的。这个总线周期指示码将被外部总线控制逻辑电路译码从而产生一个中断响应信号。通过这个中断响应信号,80386 DX告诉发出中断请求的外部设备它的服务请求已得到同意。,INTR输入是可屏蔽的,即它的操作可以通过微处理器内部的标志寄存器中的“中断标志位”(IF)予以允许或禁止。而非屏蔽中断NMI输入,是不可屏蔽的中断输入。只要在NMI引脚上出现0到1的跳变,不管中断标志IF的状态如何,一个中断服务请求总会被微处理器所接受。在执行完当前指令后,程序一定会转移到非屏蔽中断服务程序的入口处。,RESET输入用来对80386 DX进行硬件复位。例如,利用这个输入可以使微型计算机在加电时被复位。RESET信号跳变到逻辑1,将初始化微处理器的内部寄存器。当它返回到逻辑0时,程序控制被转移到系统复位服务程序的入口处。该服务程序用来初始化其余的系统资源,如I/O端口、中断标志及数据存储器等。,4.DMA接口信号,由图7.6可见,80386 DX的DMA(Direct Memory Access,直接存储器访问)接口只通过两个信号实现:总线保持请求(HOLD)和总线保持响应(HLDA)。当一个外部电路(如DMA控制器)希望掌握总线控制权时,它就通过将HOLD输入信号变为逻辑1来通知当前的总线主80386 DX。,80386 DX如果同意放弃总线控制权(未在执行带LOCK前缀的指令),就在执行完当前总线周期后,使相关的总线输出信号全部变为高阻态(第三态),并通过将HLDA输出信号变到逻辑1电平来通知外部电路它已交出了总线控制权。80386 DX维持这种状态直至“总线保持请求”信号撤消(变为逻辑0),随之80386 DX将“总线保持响应”信号也变为逻辑0,并重新收回总线控制权。,附:8086系统中的DMA时序,HOLD(Hold request):总线请求,输入,高电平有效。HLDA(Hold Acknowledge):总线请求响应,输出,高电平有效。,5.协处理器接口信号,在图7.6中可以看到,在80386 DX微处理器上提供了协处理器接口信号,以实现与80387 DX数值协处理器的接口 80387 DX不能独立地形成经数据总线的数据传送。每当80387 DX需要从存储器读或写操作数时,它必须通知80386 DX来启动这个数据传送过程。这是通过将80386 DX的“协处理器请求”(PEREQ)输入信号变为逻辑1来实现的。,另外两个协处理器接口信号是BUSY和ERROR。“协处理器忙”(BUSY)是80386 DX的一个输入信号。每当协处理器80387 DX正在执行一条数值运算指令时,它就通过将BUSY输入信号变为逻辑0来通知80386 DX。如果在协处理器运算过程中有一个错误产生,这将通过使“协处理器错”(ERROR)输入信号变为逻辑0来通知80386 DX。,7.2.2 微处理器的总线时序,总线时序是微处理器功能特性的一个重要方面。1.总线时序基本概念(1)指令周期、总线周期及时钟周期指令的执行通常由取指令、译码和执行等操作步骤组成,执行一条指令所需要的时间称为指令周期(instruction cycle)。不同指令的指令周期是不相同的。,CPU与存储器或I/O接口交换信息是通过总线进行的。CPU通过总线完成一次访问存储器或I/O接口操作所需要的时间,称为总线周期(bus cycle)。一个指令周期由一个或几个总线周期构成。,时钟周期是CPU执行指令的基本时间计量单位,它由计算机的主频决定。例如,8086的主频为5MHz,则一个时钟周期为200ns;Pentium的主频为500MHz,则其时钟周期仅为2ns。时钟周期也称T状态(T-State)。对于不同型号的微处理器,一个总线周期所包含的时钟周期数并不相同。,例如,8086的一个总线周期通常由4个时钟周期组成,分别标以T1、T2、T3和T4;从80286开始,CPU的一个总线周期一般由两个时钟周期构成,分别标以T1和T2。,(2)等待状态和空闲状态,通过一个总线周期完成一次数据传送,一般要有输出地址和传送数据两个基本过程例如,对于由四个时钟周期构成一个总线周期的8086来说,在第一个时钟周期(T1)期间由CPU输出地址,在随后的三个时钟周期(T2、T3和T4)用来传送数据。数据传送必须在T2T4这三个时钟周期内完成。否则,由于在T4周期之后将开始下一个总线周期而会造成总线操作的错误。,在实际应用中,当一些慢速设备在T2、T3、T4三个时钟周期内不能完成数据读写时,那么总线就不能被系统所正确使用。为此,允许在总线周期中插入用以延长总线周期的T状态,称为“等待状态”(Tw)。当被访问的存储器或I/O接口无法在三个时钟周期内完成数据读写时,就由其发出请求延长总线周期的信号到CPU的READY引脚,CPU收到该请求信号后就在T3和T4之间插入一个等待状态Tw,插入Tw的个数与发来请求信号的持续时间长短有关。,另外,如果在一个总线周期后不立即执行下一个总线周期,即总线上无数据传输操作,此时总线则处于所谓“空闲状态”,在这期间,CPU执行空闲周期Ti,Ti也以时钟周期T为单位。两个总线周期之间出现的Ti的个数随CPU执行指令的不同而有所不同。图7.7 表示了8086CPU的总线周期及其“等待状态”和“空闲状态”的情况。,图7.7 总线时序中的等待状态及空闲状态,(3)非流水线和流水线总线周期,(i)非流水线总线周期 采用“非流水线总线周期”,不存在前一个总线周期的操作尚未完成即预先启动后一个总线周期操作的现象,即不会产生前后两个总线周期的操作重叠(并行)运行的情况。图7.8表示了一个典型的“非流水线总线周期”时序(注意图中的一个总线周期是由两个时钟周期构成的)。,图7.8 典型的非流水线总线周期,(ii)流水线总线周期所谓“流水线总线周期”,是指对后一个总线周期的寻址与前一个总线周期的数据传送相重叠。也就是说,对后一个总线周期的地址、总线周期指示码及有关的控制信号输出于前一个总线周期的T2期间而不是后一个总线周期的T1期间。图7.9给出了一个流水线总线周期的典型时序。,图7.9 流水线总线周期,(iii)带等待状态的流水线总线周期可通过插入等待状态来扩展总线周期的持续时间。这实际上是通过检测READY输入信号的逻辑电平来实现的。在每个总线周期的结尾时刻(T2结束时)对READY信号进行采样,以确定当前的“时钟周期”是T2还是Tw,如果这时READY0,表明当前总线周期可以结束,即当前时钟周期为T2;如果READY1,则当前时钟周期为Tw,并且微处理器将继续检测READY直到其为0,总线周期才能结束。,图7.10 带等待状态的流水线总线周期,2.基本的总线时序,(1)简化的8086读/写总线周期为了把数据写入存储器,微处理器首先要把欲写入数据的存储单元的地址输出到地址总线上,然后把要写入存储器的数据放在数据总线上,同时发出一个写命令信号(WR)给存储器。一个简化的8086写总线周期时序如图7.11所示。,请注意两点:第一,8086的一个总线周期包含4个时钟周期(即T1、T2、T3和T4);第二,8086采用地址和数据总线复用技术,即在一组复用的“地址/数据”总线上,先传送地址信息(T1期间),然后传送数据信息(T2、T3、T4期间),从而可以节省微处理器引脚。,图7.11 简化的8086写总线周期时序,若要从存储器读出数据,则微处理器首先在地址总线上输出所读存储单元的地址,接着发出一个读命令信号(RD)给存储器,经过一定时间(时间的长短决定于存储器的工作速度),数据被读出到数据总线上,然后微处理器通过数据总线将数据接收到它的内部寄存器中。一个简化的8086读总线周期时序如图7.12所示。,图7.12 简化的8086读总线周期时序,(2)非流水线读总线周期让我们以32位微处理器80386 DX为例,详细讨论一下在高性能微处理器中实现的较复杂一些的总线操作时序,首先介绍非流水线读/写总线周期时序,然后讨论流水线读/写总线周期时序。80386 DX的非流水线读总线周期时序如图7.13所示。,80386 DX的一个总线周期通常(不插入等待状态时)由两个T状态(T1和T2)构成,而每个T状态又包含两个外部时钟信号(CLK2),并分别称之为相位1(1)和相位2(2),如图7.13左上角处所示。该图中在有些信号线上用交叉斜线标出的阴影部分表示该信号在此区间范围内无定义。,在图7.13所示的“周期1(非流水线)”中可以看到,读操作开始于这个总线周期的T1状态的1开始处。此刻80386 DX在地址总线上输出被访问双字(32位)单元的地址A2A31及字节允许信号BE0BE3(属地址信息的一部分),同时使“地址状态”信号ADS变为逻辑0电平,以表明一个有效地址已经出现在地址总线上。,在图7.13中,总线周期指示信号(M/IO、D/C及W/R)也在T1状态的1开始处变为有效(VALID)。查表7-3(总线周期指示信号及总线周期类型)可以发现,如果从存储器读出代码,则M/IO、D/C、W/R100。从表7-3也不难发现,如果从存储器中读出数据,则总线周期指示信号(M/IO、D/C及W/R)的逻辑电平应为110。,在这个读总线周期1的T2的2开始处,外部电路必须通知80386 DX,总线是操作在16位还是32位模式。这是通过BS16输入信号来实现的。图7.13表示80386 DX在T2状态的中间采样这个输入信号。此刻信号为逻辑1电平,表明将要进行的是32位的数据传送。80386 DX是在T2结束时检测READY输入信号,并根据该输入信号上的逻辑电平来确定当前总线周期可以结束还是插入等待状态予以扩展。,在T2结束时,数据总线D0D31上的有效数据即被读入80386 DX,并未出现前一个总线周期的数据传送尚未完成而下一个总线周期即被启动的现象。这也正体现了非流水线总线周期的基本特点。,图7.13 非流水线读总线周期时序,(3)非流水线写总线周期,非流水线写总线周期时序如图7.14所示。它包括无等待状态的“写周期1”和带有一个等待状态的“写周期2”。由该图可见,地址、字节允许及总线周期指示信号输出于T1状态的1开始时刻。与读周期的情形相同,将其中地址(A31A2)及字节允许信号(BE0BE3)通过ADS上的负脉冲锁存到外部电路中。与读周期不同的是,W/R是逻辑1而不是逻辑0电平。正如表7-3所示,对于“写存储器数据”的总线周期指示码是M/IO、D/C、W/R111。,图7.14 非流水线写总线周期时序,例 如果图7.14中的周期2是对于全速运行的80386 DX-20而言,那么这个总线周期的持续时间是多少?解:80386 DX-20的时钟频率为20MHz,每个T状态为50ns。由于这个写总线周期被一个等待状态(Tw)所扩展,所以它的持续时间为50 ns3150 ns。,(4)流水线读/写总线周期,在图7.15中,同时给出了非流水线及流水线读/写总线周期的时序图,其中周期1和周期2是两个非流水线总线周期,周期3和周期4是两个流水线总线周期。这里我们重点研究一下周期3和周期4这两个流水线总线周期的操作特点。如图7.15所示,周期3为流水线写总线周期,周期4为流水线读总线周期。,第7章 作业,P2301题;3题;8题;12题;13题,