计算机组成原理 第五章 中央处理器

5.1 CPU的功能和基本结构

中央处理器由控制器和运算器两部分组成,其中,控制器负责协调并控制计算机各部件执行程序的指令序列(取指令、分析指令和执行指令),而运算器的功能是对数据进行加工

CPU的具体功能包括:
①指令控制:程序的顺序控制
②操作控制:CPU管理并产生由内存取出的每条指令的操作信号,并把信号送至各个部件以保证部件按照正确的要求进行动作
③时间控制:对各种操作加以时间上的控制
④数据加工:对数据进行算术和逻辑运算
⑤中断处理:对异常情况和特殊请求进行处理

在这里插入图片描述
如图所示,在计算机中中央处理器主要由运算器和控制器两部分组成。

运算器和其名字一样,主要负责对数据进行加工和处理。运算器是计算机对数据进行加工处理的中心,主要是由算术逻辑单元(Arithmetic and Logic Unit)、暂存寄存器、累加寄存器(ACC)、通用寄存器组、程序状态字寄存器(PSW)、位移器、计数器(CT)等组成。
其主要部件功能如下:
①算术逻辑单元:进行算术、逻辑运算
②暂存寄存器:暂存从主存读来的数据,这部分数据不能存放在通用寄存器中,否则会破坏通用寄存器中原有的内容。
③累加寄存器:本身是一个通用寄存器,用于暂存ALU的计算结果,可以作为加法运算的另一个输入端
④通用寄存器组:用于存放操作数和各种地址信息,其位数与机器字长相等,因此便于操作控制。
⑤程序状态字寄存器:保留由算术逻辑运算指令或者测试指令的结果而建立的各种状态信息
⑥移位器:进行移位运算
⑦计数器:控制乘除操作的操作步数

控制器则是整个系统的指挥中枢,各个部件在控制器的控制下构成一个有机的整体,根据指令的要求协调全机完成工作。其最基本的功能是执行指令。控制器由程序计数器(Programming Counter)、指令寄存器 (Instruction Register)、指令译码器、存储器地址寄存器( Memory Address Register)、存储器数据寄存器(Memory Data Register)、顺序系统和微操作信号发生器等组成,其各功能如下:
①程序计数器:用于指出下一条指令在主存中的存放位置,具有自加功能,可以在执行完后自动加一形成下一条指令所在的位置
②指令寄存器:保存当前正在执行的那条指令
③指令译码器:对操作码字段进行译码
④存储器地址寄存器:存放要访问的主存单元的地址
⑤存储器数据寄存器:存放要写入的信息或者从主存读出的信息
⑥时序系统:产生时序信号

控制器主要工作原理是根据操作码、指令的执行步骤和条件信号来形成当前计算机各部件要用到的控制信号。

CPU内部的寄存器主要分为两类:用户可见和用户不可见。其中用户可见的寄存器包括通用寄存器组、程序状态字寄存器,用户可以对这部分寄存器进行编程。用户不可见的寄存器对用户透明,不可进行编程,包括存储器地址寄存器、存储器数据寄存器、指令寄存器。

5.2 指令执行过程

首先,将CPU从主存中取出并执行一条指令的时间称为指令周期,根据指令操作的不同,不同指令的指令周期也可能不同,所以指令内的机器周期数也可以不等。

可以对指令的周期进行划分,最基础的两个阶段是取指阶段执行阶段,这两个阶段是必须要有的。典型例子是无条件转移指令,执行时不需要访问内存,只包含取指令和执行两部分,取出指令后在执行阶段修改PC的值,所以不需要访问在执行阶段访问内存,但是仍然需要在取指阶段访问内存。

在此基础上,如果采用的是间接寻址,还需要一个间址阶段将形式地址转换为真实的物理地址,该阶段位于取指和执行阶段之间。

当CPU采用中断方式实现主机和IO设备的信息交换时,CPU在每条指令结束前,都要发出中断查询信号,如果有中断请求则CPU进入中断响应阶段,此时称进入中断周期。所以一个完整的指令周期由四部分组成,如图所示:
在这里插入图片描述
这四个周期中,取指和执行是必须的,剩下两个为可有可无的。四个工作周期都有CPU访存操作,但是目的不同,取指周期是为了取指令,间址周期是为了找到有效地址,执行周期是为了取操作数(一些特殊情况会没有,比如无条件跳转指令),中断周期是为了保存程序断点。

为了区别不同的工作周期,在CPU内部设置4个标志触发器,分别对应四个周期,当标志触发器为1时表示有效,以此来区分进行到了哪个周期。

指令周期的数据流是根据指令要求依次访问的数据序列,可以看作是对过程的一个描述。不同的指令,数据流往往也是不同的。

取指周期的任务是将指令代码从主存中取出并存放在IR中,图示如下:
在这里插入图片描述
该过程中,首先PC将地址传送给MAR,MAR经过地址总线找到主存上对应的位置,由CU向存储器发出存取命令,经由数据总线送至MDR再送至IR,最后由CU控制PC自动加一。

间址周期的任务是寻找到操作数的真实地址,以一次间址为例,过程图示如下:
在这里插入图片描述
该过程中,由CU检查IR中的指令,如果指令是间接寻址的,则将形式地址送至MAR,由MAR经过地址总线到达主存上对应位置,CU向存储器发出命令,指令通过数据总线送至MDR。这里需要注意,没有再将MDR加载到IR的过程。

执行周期的任务是根据IR中的指令字的操作码和操作数经过算术逻辑单元操作产生执行结果。由于不同的指令的执行阶段是不同的,所以没有统一的数据流向。

中断周期的任务是处理中断的请求,图示如下:
在这里插入图片描述
该过程中,CU将保存断点信息的地址送至MAR,经由地址总线找到存储器对应位置后,CU向存储器发出写命令,PC命令MDR将存放有断点信息的数据存放至先前找到的位置。

一个指令周期一般要包括几个时间段,每个步骤完成指令的一部分功能,根据步骤依次执行的要求,可以划分出三种安排指令的执行步骤。

①单指令周期:所有指令都选用相同的执行时间来完成,每条指令都在固定的时钟周期内完成,下一条指令只能在当前指令执行结束后才能启动。所以指令周期取决于执行时间最长的指令的执行时间,这使得本来只需要很短时间的指令就需要较长的周期来完成,进而拉低整个系统的运行速度。

②多指令周期:对于不同的指令选择不同的步骤来完成,指令之间依然是串行,即一条指令必须在上一条指令执行完后才可以继续执行,相较于单指令周期,多指令周期可以选择不同个数的时钟周期来完成指令,指令需要几个周期就分配几个周期,而不用强行将所有指令划分为一个指令周期。

③流水线方案:指令之间并行执行,追求在每个时钟周期内完成一条指令的执行过程,本质是通过划分阶段,让多条指令同时在运行,但是每条指令在不同的阶段。

5.3 数据通路的功能和基本结构

数据通路指的是数据在功能部件之间传送的路径,路径上的部件称为数据通路部件。数据通路描述了信息从什么地方开始,经过哪些部件,到达了哪里。

数据通路的基本结构主要有三种:
①CPU内部单总线方式:
所有寄存器的输入输出端都连接在一条公共通路上,结构比较简单,但是数据传输存在较多的冲突现象,性能较低。
②CPU内部三总线方式:
将所有寄存器的输入输出端都连接到多条公共通路上,同时在多个总线上传送不同的数据,效率有很大提升。
③专用数据通路方式:
根据指令执行过程中的数据和地址的流动方向安排连接线路,性能较高但是硬件量较大。

这一部分的关键,在于会看数据通路的图示。拿下面的图来说:
在这里插入图片描述
其中字母加in表示该部件的允许输入控制信号,字母加out表示该部件的允许输出控制信号,最右边的Bus表示总线,从这个图中其实可以整理出数据的流动过程。
在这里插入图片描述

5.4 控制器的功能和工作原理

前面提到了,CPU主要分为两个部分,运算器和控制器,控制器可以看作控制中心的头头,作为计算机系统的指挥中心,控制器有三个功能:取出指令并指出下一条指令的位置、对指令进行译码测试并产生相应的控制信号指挥控制各部件之间的数据流动方向

可以说这一章的知识基本都是由控制器来实现的,根据控制器产生微操作控制信号的方式的不同,控制器可以分为硬布线控制器和微程序控制器,两类控制器的PC和IR是一样的,但是确定和表示指令执行步骤的办法以及给出控制各种部件的控制信号的方案是不同的。

首先整理硬布线控制器,个人感觉这种方式就是暴力的硬件堆叠。该方式的基本原理是根据指令的要求、当前的时序以及内外部的状态,按照时间的顺序发送一系列微操作控制信号,它由复杂的组合逻辑门电路和一些触发器构成,因此又称为组合逻辑控制器。

硬布线控制器的图示如下:
在这里插入图片描述
从图里可以看出,CU有三部分的输入和一部分的输出。对于输入,首先是IR中指令的操作码,这个很好解释,毕竟CU需要发出的控制信号必须是指令要求完成的任务,所以指令的操作码是控制单元的输入信号,和时钟配合产生不同的控制信号。其次是左侧的节拍发生器输入的节拍,所谓节拍,可以理解为一个时间段信号,举个例子,一个时间段如果看作一节课,那么这个节拍就可以理解为上课铃,通过节拍,让控制单元按照一定的I案后顺序许和节奏来产生控制信号。最后是右侧的标志,这一部分
可以看做是执行单元的反馈信息。
所以对于CU的工作过程,简单来说就是根据指令中的操作码部分,在节拍发生器的时间指挥下,向具体的执行部件下发命令。对于不同的指令,控制单元会发出不同的微操作命令。所以控制单元控制一条指令执行的过程,实际上就是依次执行一个微操作序列的过程,由于每条指令完成的任务是不一样的,其对应的操作码也是不同的,完成操作所需要的微操作也是不相同的,因此每个指令和每个微操作需要的执行时间也不一样,主要有三种控制方式:
①同步控制方式:
系统有一个统一的时钟,所有控制信号都来自这一个时钟,以最长的微操作序列和最繁琐的微操作作为标准,采用完全统一的、具有相同时间间隔和相同数目的节拍作为机器周期来运行不同的指令,这种方式控制电路简单但是速度慢。
②异步控制方式:
不存在基准时标信号,各部件按照自身固有的速度工作,以应答方式进行联络。
③联合控制方式:
介于同步和异步之间的一种折中,该方式对大部分微操作采用同步控制,小部分采用异步控制。

控制器的另一种实现方式叫做微程序控制器。硬布线可以看出基本都是硬件级别的操作,而微程序控制器则更像是“软件”层面上的实现。该方式采用存储逻辑实现,就是把微操作代码信号化,让每条机器指令转化为一个微程序并存放在专门的存储器中。简单来说就是把硬布线方式中的CU分发一系列的控制信号换为一个现成的程序,这种思想类似于面向对象的编程,让一个对象去实现而不用知道内部的实现细节。

微程序设计思想就是将每条机器指令编写成一个微程序,每个微程序包含若干微指令,每条微指令对应一个或者几个微操作命令。将微程序存放在控制存储器中。

这种方式主要涉及几组名词:
①微操作与微命令
一个机器指令(指令译码后的机器语言)可以分解为一个微操作序列,这些微操作是原子的不可再分割的,在微程序控制的计算机中,将控制部件向执行部件发出的控制命令称为微命令。微命令和微操作是一一对应的,微命令是微操作的控制信号,微操作是微命令的执行过程。就是说微命令发出后对应的操作就是微操作,而一个微操作需要下达一个微命令。
②微指令与微周期
微指令是若干微命令的集合存放微指令的控制存储器的单元地址称为微地址。一条微指令包含操作控制字段(微操作码字段)和顺序控制字段(微地址码字段)。微周期指的是从控制存储器中读取一条微指令并执行所需要的时间。
③主存储器和控制存储器:
主存储器用于存放程序和数据,控制存储器用于存放微程序,位于CPU内部,用ROM实现。
④程序与微程序:
程序是指令的有序集合,微程序是微指令的有序集合,一条指令由一段微程序来实现。

从上面四组对应的概念,不难看出微程序与微指令实际上就是程序与指令的迷你版。程序由许多指令来实现,而这些指令需要根据其操作码来进行不同的操作,前面叙述的硬布线方式,就是根据操作码,按照一定的节拍向执行部件发信号,而微程序方式是用一个微程序来实现,这种方式直接将一条机器指令的执行变成执行一个微程序,而不是自己亲自去发送信号,微程序由许多的微指令来实现,这些微指令相当于代替了发送信号的过程,执行一条微指令会发出许多微命令,这些微命令落实后就成了微操作。
所以说微程序和程序根本就是两个不同的概念,微程序是描述机器指令,是机器指令的实时解释器,由计算机设计者提前设计好并放入控制存储器。对于程序员来说,微程序结构和功能是透明的。
在这里插入图片描述
图中所示的就是一个微程序控制器的基本结构,主要包括四部分:
①控制存储器(Control Memory):
存放各指令对应的微程序
②微指令寄存器(CMDR):
存放从CM中取出的微指令
③微地址形成部件:
用于产生微地址和后继微地址,以保证微指令的连续执行
④微地址寄存器(CMAR):
接收微地址形成部件送来的微地址

微程序控制器的工作过程实际上就是在微程序控制器下控制计算机执行机器指令的过程,其步骤如下:
在这里插入图片描述
微指令的编码方式又称为微指令的控制方式,是指如何对微指令的控制字段进行编码,以形成控制信号,编码的目标是在保证速度的情况下,尽量缩短微指令字长。主要有三种编码方式:
①直接编码方式:
这种方式不需要译码,微指令中的微命令字段每一位都代表一个微命令,选用或者不选用只要将对应为设置1或0即可,这种方式简单,但是当微命令过多时,一条微指令会变得很长,从而导致控制存储器容量极大。
在这里插入图片描述
②字段直接编码方式:
将微指令的微命令字段分成许多小段,互斥性微命令组合在同一字段中,相容性微命令组合在不同字段中,每段单独编码,每种编码代表一个微命令且个字段编码含义单独定义。这种方式可以缩短指令字长,但是会比直接编码方式慢。
在这里插入图片描述
③字段间编码方式:
一个字段中某些微命令需要另一个字段中的某些微命令来解释,又称为隐式编码,可以进一步缩短微指令字长,一般作为一种辅助手段。

后继微地址的形成主要有两种方式:
在这里插入图片描述

微指令的格式与微指令的编码方式有关,一般分为水平型和垂直型:
①水平型微指令:
从编码方式上看,直接编码、字段直接编码、字段间接编码和混合编码都属于水平型微指令,其格式如下:
在这里插入图片描述
②垂直型微指令:
采用类似于机器指令操作码的方式,在微指令中设置微操作码字段,这种方式下,一条垂直型微指令只能定义一种基本操作。其格式如下图:
在这里插入图片描述
③混合型微指令:
在垂直型的基础上增加一些不太复杂的并行操作。
在这里插入图片描述
总的来说控制器的两种实现方式各有优缺点,硬布线控制器偏硬件,其速度取决于电路延迟,所以速度快,但是一旦设计完成就不能增加或修改新的功能。微程序控制器规整、灵活并且可维护,但是每条微指令都需要从控制存储器中取出,增加了时间从而影响速度。
在这里插入图片描述

5.5 指令流水线

指令流水线是一种优化指令执行过程的方式,通过将一条指令划分为多个阶段,并行执行不同阶段,从而只需要增加少量硬件就可以将计算机的运算速度提高好几倍。

首先,一条指令的执行过程可以分成好几个阶段,不同计算机划分方式也各不同,这个划分和前面指令周期的划分是一个道理,但是指令流水线的阶段划分会更细,同样是执行,指令周期中划分的执行周期可能对应着指令流水线中的好几个阶段,二者方法类似但是是有区别的。

假设将一个指令的执行过程划分为三个阶段(取指、分析、执行),根据三个阶段的并行程度可以分为三种执行方式:
①顺序执行方式
指令按照顺序执行,一条指令执行完才执行下一条,如果每个执行阶段需要的时间都相等,记为t,那么完成一条指令的时间是3t,完成总共n条指令需要的时间为3nt。
②一次重叠执行方式
小幅度进行重叠,将后一条指令的取指阶段提前到牵一条指令的执行阶段进行,这样子总时间就缩短到(1+2n)t,可见利用率明显提高。
③二次重叠执行方式
是进一步的幅度提升,将后一条指令的取指阶段提前到前一条指令的分析阶段,后一条指令的分析阶段提前到前一条指令的执行阶段,这样子会更大程度上减少时间,这种方式下时间减小到(2+n)t,在正常情况下,处理机中是有三条指令在执行的。当然,阶段的划分并没有固定要求,可以划分为更多的阶段,相对的也会出现更多次数的重叠执行方式。
在这里插入图片描述
一般使用时空图来表示流水线的工作过程,时空图中横坐标表示时间,纵坐标表示空间,即流水线的每个流水段,指令分为几个段纵向上就分为几个部分,如图所示,指令如果分为四个阶段,那么纵向上就分四个段对应每个阶段,横向上时不同指令开始执行的情况,横向上每个块表示的是一个执行时间t
在这里插入图片描述
相比于传统的串行执行方式,流水线方式具有以下的特点:
①将任务分解为几个有联系的子任务,每个子任务由专门的部件来实现,并依靠多个部件的并行工作来缩短执行时间。
②流水线每个功能段后面都要跟一个缓冲寄存器来保存本流水段的执行结果
③流水线中的各个功能段应该尽可能相等,否则会引起断流或者阻塞
④只有连续不断的提供任务是才能发挥流水线的效率,所以流水线中处理的必须是连续任务
⑤流水线需要用装入时间和排空时间,装入时间是第一个任务进入流水线到输出流水线的时间,对应到上图中I1的时间,排空时间则是指最后一个任务进入流水线到输出流水线的时间,对应上图中I5的时间。

按照不同的标准,流水线可以进行不同的分类:
①根据使用级别,可以分为部件功能级流水线、处理机级流水线和处理机间流水线。部件功能级流水将复杂的算术逻辑运算组成流水线工作方式,处理机级流水把一条指令解释过程分成多个子过程,处理机间流水是一种宏流水,其中每个处理机完成某一专门任务,各个处理机得到的结果需存放在与下一个处理机共享的存储器中。
②根据完成的功能,可以分为单功能流水线和多功能流水线。单功能流水线是指只能实现一种固定的专门功能的流水线,多功能流水线是指通过各段间的不同连接方式可以同时或不同时地实现多种功能的流水线。
③根据同一时间内各段之间的连接方式可以分为静态流水线和动态流水线,静态流水线指在同一时间内,流水线的各段只能按同一种功能的连接方式工作,动态流水线指在同一时间内,当某些段正在实现某种运算时,另一些段却正在进行另一种运算。这样对提高流水线的效率很有好处,但会使流水线控制变得很复杂。
④根据流水线的各个功能段之间是否有反馈信号可以分为线性流水线和非线性流水线,线性流水线中,从输入到输出,每个功能段只允许经过一次,不存在反馈回路。非线性流水线存在反馈回路,从输入到输出的过程中,某些功能段将数次通过流水线,这种流水线适合进行线性递归的运算。

影响流水线性能的因素主要分为两方面:资源冲突和相关问题
由于指令之间同一时刻争用同一资源而导致的冲突称为资源冲突,主要有两个解决方法,一个是推迟后一条相关指令直到争用的资源被前一条释放再继续进行,另一个是设置单独的数据存储器和指令存储器,让两个操作分开进行

对于另一方面相关问题,王道的书上分为两个部分:数据冲突和控制冲突
数据冲突是指下一条指令会用到这一条指令计算出的结果,此时两条指令就存在数据冲突,解决方法的思路有点像之前学过的数据库的知识,一种是通过推迟后一条指令等待前一条计算完成后再继续,另一种是通过设置专用通路,不等前一条指令将结果写回就直接送至下一条指令,这种技术也称为数据旁路技术,此外还可以通过编译优化来调整指令执行顺序。
控制冲突是指一条指令要确定下一条指令的位置,比如在执行转移指令时,按照流水线的过程,会在执行转移指令之前就提前加载了内存中顺序的下面几条指令,但是跳转后,要访问的不再是已经加载的几条指令,这几条已经加载的完全是浪费的。解决方法有:对转移指令进行分支预测尽早产生转移目标地址、预取转移成功和不成功的两个方向上的指令、加快和提前形成条件码、提高转移方向的猜准率、

课本上采用的是另一种分类方法,将影响流水线性能的因素分为三个:结构相关、数据相关和控制相关
结构相关指的是多条指令进入流水线后硬件资源满足不了重叠执行的要求,数据相关指的是指令在流水线中重叠执行时后继指令需要用到前面指令的执行结果,控制相关指的则是流水线遇到分支指令或者其它改变PC值的指令时而引起的。对应到王道的书上,结构相关即资源冲突,数据相关即数据冲突,控制相关即控制冲突。

此外,课本上还细化了三种具体的数据冲突:
①写后读相关(Read After Write):后继指令尝试在前面指令没写入寄存器时就读取寄存器的内容,结果会导致取出的内容是错误的内容,即没写就读。
②读后写相关(Write After Read):后继指令尝试在前面指令没读取之前就在寄存器内写入新的内容,结果会导致新内容覆盖了旧内容,从而使得读操作读出的内容是错误的,即没读就写。
③写后写相关(Write After Write):后继指令尝试在前面指令没写之前就写入内容,结果会导致原来应该先写入的内容变成后写入的内容,如果是在一个寄存器内,会导致两次的内容顺序颠倒。

衡量流水线主要有三个性能指标:吞吐率、加速比和效率
吞吐率指的是单位时间内流水线所完成的任务数量,用任务数除以任务用时来表示。
在这里插入图片描述
加速比指的是完成同样一批任务,不使用流水线所用的时间与使用流水线所用时间之比,称为流水线的加速比,计算上直接用不用流水线时的耗时除以用流水线时的耗时。
在这里插入图片描述
效率又称流水线的设备利用率,时空图上表示为两个面积之比,分母表示的是整个过程占据的大矩形的面积,而分子表示的是实际在工作的小矩形的面积和,意义上是n个任务占用的时空区有效面积比n个任务所用的时间与k个流水段所围成的时空区总面积。n趋向于无穷时最高效率为1。

还有三个流水线技术的改进技术,这里需要记住名字并大体知道这些技术是什么。
超标量流水线技术,每个时钟周期内并发执行多条指令,该技术不能调整指令的执行顺序,只能通过编译优化。
在这里插入图片描述
超流水线技术,是将一个时钟周期再分段,从而让一个时钟周期内一个功能部件多次使用,可以看作对每个段再继续细分
在这里插入图片描述
超长指令字,由编译程序挖掘出指令间潜在的并行性,将多条能并行操作的指令组合成一条具有多个操作码字段的超长指令字(可达几百位),为此需要采用多个处理部件。

总的来说单独看课本的内容,这一章其实内容并不是很多,王道的书上补充了很多408需要理解的知识,反正不考408,这里就不做总结了,如果需要后面再看吧。

典型题

在这里插入图片描述
题目主要考察的是概念,机器周期是指令执行中每步操作所需要的时间,每个机器周期内的节拍数可以不等,因此其长度可变。因为各种指令的功能不同,所以各指令执行时所需的机器周期数是可变的。容易混的是指令周期、机器周期和时钟周期,时钟周期是计算机衡量时间的最小单位,机器周期是执行指令中一个步骤所需要的时间,比如前面提到的取指、间址这种阶段,指令周期则是完成一条指令所需要的时间,机器周期可以理解成是由时钟周期组成的,机器周期再组成时钟周期。
在这里插入图片描述
题目考的是微指令的编码方式,采用的是字段直接编码,互斥类放在不同的字段中,每个互斥类代表一个值,比如说第一个互斥类有7条微命令,加上一个空状态,一共是8个状态,即2的三次方,所以需要3位,按照这个道理,五个互斥类分别需要3、2、4、3、3位,即15位,C项正确。
在这里插入图片描述
吞吐能力是指单位时间内完成的指令数。m 段流水线在稳定后,每个时钟周期都可以完成一条指令,相当于进入了时空图中完全是矩形的部分,而m个并行部件在m个时钟周期后能完成全部m条指令,等价于平均每个时钟周期完成一条指令。因此两者的吞吐能力等同。

在这里插入图片描述
这两道题都是考察执行需要的时间的,单流水线处理机即一个部件一次执行一条指令的一个阶段,就是一般题目中见到的流水线,计算时间时直接按照公式(指令区分的段数+指令数目-1)×单位时间,对于上面的第一题,直接按照公式就可以得到(3+12-1)×△t=14△t。而第二题采用了超标量流水线技术,一个部件可以同时处理多个指令的阶段,这里的度只得就是同时处理阶段的个数,对于这个题,度为4,共20条指令,相当于5条单流水线情况下的指令,所以套用公式可得需要7△t的时间。
在这里插入图片描述
这一部分的大题就很有搞头了,一般都是让画图或者结合图进行一些推理计算。这道题先是让画出流水线的功能段结构图,只要知道怎么画有手就能画。关键在于第二问,这种画时空图的题,关键在于找出指令中的冲突,给出的三条指令中,第二条用到了第一条结果的数据,所以需要采用推迟的方法来避免冲突,即将第二条指令的译码阶段推迟到第一条指令执行完成后再执行,而第二条指令和第三条指令在输出地址上存在冲突,为了保证顺序,必须要让第二条完成执行后第三条才能完成执行,所以推迟第三条指令的完成时间。答案如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这部分的大题有时候会出的特别长,看起来特别吓人,其实仔细读题,每道题目其实不是很难。
首先上来第一题,考察的是计算机内部的数据存储和移位运算,-513的整形定点数,计算机内采用补码进行表示,即1111 1101 1111 1111,指令对应的操作是进行左移一位,补码左移且符号为负时,移动补充1,所以移动后为1111 1110 1111 1111 ,对应十六进制的FEFFH。
第二问考察的是时钟周期数,看好题目直接套公式即可,计算机采用的是五段流水,共4条指令,按照公式需要的时钟周期数目为5+4-1=8个时钟周期。
第三问其实也不难,看图理解,根据前面的指令格式,这四条指令前两条是在做加载的工作,第三条将加载的两个数相加,然后第四条进行存放,从执行过程的时空图可以看出,第三条指令在寻址之后就阻塞了,这是因为第三条指令计算需要前面两条指令加载的数据,必须要等到I1I2写回后才可以进行译码,所以I3推迟的原因为:I3 与 I1 和 I2 都存在数据相关, 需等到 I1 和 I2将结果写回寄存器后,I3才能读寄存器内容,所以 l3 的 ID 段被阻塞。I4的作用是将计算结果存储,显然要等到I3写回之后才能继续执行,但是题目问的是IF段被阻塞的原因,等待写回实际上是ID段被阻塞的原因,所以IF段被阻塞的原因应该是因为其前面的I3在被阻塞,导致I4也跟着被阻塞。
第四问是最麻烦的一问,首先根据第四问,可以大体写出来完成赋值语句需要的五条指令,LOAD-LOAD-SHL-ADD-STORE,接下来需要解决的就是解决冲突绘制时空图,前面两条加载语句自然没有冲突,第三条左移指令需要用到I1加载的数据,所以而这只见存在数据相关,需要推迟I3到I1写回后,I4由于I3被阻塞,也跟着一起阻塞,等到I3开始进入译码阶段,由于I4需要用到I3的运算结果,所以存在数据相关,需要推迟ID段知道I3写回后,I5由于I4被阻塞所以也跟着一起阻塞,等到I4进入译码阶段,I5由于需要等待I4写回,所以继续推迟I5的ID段直到I4写回,最后I5执行完剩下的指令段。画出的时空图时间上共计17个时钟周期,即至少需要的时钟周期。
在这里插入图片描述
对于这类题目,先写出需要执行的指令,再分析指令之间存在的冲突,在解决冲突的基础上推迟对应的指令,从而绘制时空图。

猜你喜欢

转载自blog.csdn.net/weixin_43849505/article/details/108498804