计算机流水线处理机及其设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

6 流水线处理机及其设计
6.1 引 言
流水线(pipeline )是一种能够使多条指令重叠操作的处理机的实现技术,它已成为现代处理机设计中最为关键的技术。

流水线技术并不是处理机设计领域所独有的。

早在计算机还没有出现之前,流水线技术已被广泛应用于工业生产中了.尤其是现在,几乎所有的现代化工厂的生产线都采用流水线技术.一件产品往往需要几道工序才能完成。

每道工序只完成生产过程中的一小部分操作,即送往下——道工序。

如果单从—-件产品从开始到完成来看,生产所需要的时间,与非流水线相比,似乎并没有缩短。

但从整体来看,产品的出产率却大大提高了。

流水线处理机也是这样,单条指令的执行时间没有缩短,但每个时钟周期都会有一条指令执行完毕。

试想,非流水线多周期处理机执行一条指令平均要花费大约4个时钟周期。

假设执行1万条指令,就要用4万个时钟周期。

而流水线处理机执行一条指令可能需要5个时钟周期,但由于多条指令,例如5条,可以重叠操作,总体上,平均每条指令所花费的时间大致为1个时钟周期,总共只需要大约1万个时钟周期。

这就是所谓的“吞吐率”的提高。

流水线处理机把一条指令的执行分成几个步骤,或称级(stages).每一级在一个时钟周期内完成。

在每个时钟周期,处理机启动执行一条指令。

如果处理机的流水线有m 级,则同时可重叠执行的指令总条数将为m ,每条指令处在不同的执行阶段。

如果分级分得好的话,那么每-级都没有时间上的浪费。

这是最理想的情况。

流水线处理机在这种理想的情况下,与非流水线处理机的性能加速比为
/np np p mp I CPI T CPI S m I CPI T
CPI m
⨯⨯=
=
=⨯⨯
其中,I 为一个程序被执行的总的指令条数。

它在流水线处理机和非流水线处理机中是相等的.CPI 是每条指令总体平均所需的时钟周期数。

CPI np 是非流水线处理机的CPI ,CPI n 是流水线处理机的CPI 。

因为流水线处理机把一条指令的执行时间理想地分成了阴级,有m 条指令在同时(重叠)执行,则CPI p =CPI np /m 。

也可理解为CPI p =1,而CPI np =m 。

T 是每个时钟周期的时间长度,假设它在两种处理机中也是相同的.最后总的加速比为m ,即等于流水线的级数。

这岂不是说,把流水线级数分得越多处理机的性能就越好?但是,实际的情况往往要受很多条件的限制。

流水线处理机性能提高的关键在于每个时钟周期处理机都能启动一条指令的执行。

这意味者流水线每级中的执行部件要有能力在每个时钟周期接收一条新的指令。

例如,如果ALU 完成一次操作要用10ns 的话,那么一个ALU 接收一条指令操作的周期不能短于10ns 。

指令存储器以及数据存储器也有这样的限制。

也假设它们的访问周期是10ns,则每隔10ns 才能从指令存储器取出一条指令,或者每隔10ns 才能读写一次数据存储器。

在本章以下的讨论中,我们仍使用5章中定义的指令系统。

它们是,ALU 操作类型的
指令,包括and,of,add和:sub;存储器访问指令10ad和store;条件转移指令bne和beq,以及无条件转移指令branch,共9条。

ALU指令除了把运算结果写入寄存器堆之外,也把ZERO标志写入Z寄存器。

条件转移指令使用Z标志决定是否转移,其它指令不影响Z寄存器.处理机的指令系统及指令格式如表6.1所示。

这些指令执行时用到的主要功能部件和它们所需的时间如下:
指令存储器和数据存储器:10ns;ALU和地址加法器:10ns;寄存器堆:5ns;假定其它部件,如PC寄存器、多路器、控制部件等花费的时间为o.表6.2列出了各指令执行时所需要的时间。

表6。

2 各类指令执行时所需要的时间ns
10 5 10 10 5
ALU指令指令存储器寄存器堆ALU 寄存器堆30 load指令指令存储器寄存器堆ALU 数据存储器寄存器堆40 store指令指令存储器寄存器堆ALU 数据存储器35 转移指令指令存储器加法器(10)20
在设计非流水线单周期处理机时,定义时钟周期长度要以执行时间最长的指令为基准。

以上的指令系统中,load指令执行时间最长,需要40ns,因此我们定义时钟周期长度为40ns.在5章中,我们也描述了非流水线多周期处理机的设计。

它的时钟周期定义为10ns.在这种情况下,ALU指令的执行用4个时钟周期,load指令用5个时钟周期,store指令用4个时钟周期,转移(无条件转移和条件转移)指令用2个时钟周期。

假设流水线处理机的时钟周期也定义为10ns,流水线级数是5级。

这意味着有5条指令能被同时执行。

表6.3列出了使用流水线技术后指令执行所需要的时间。

表6.3 使用流水线技术后指令执行所需要的时间ns
10 10 10 10 10
ALU指令指令存储器寄存器堆ALU 寄存器堆50 load指令指令存储器寄存器堆ALU 数据存储器寄存器堆50 store指令指令存储器寄存器堆ALU 数据存储器40 转移指令指令存储器加法器20
3种处理机的指令执行时序如图6.1所示。

其中,IF代表取指令,ID代表指令译码及读寄存器操作数,EXE代表ALU指令操作及存储器有效地址计算,MEM代表存储器访
图6.1 3种处理机执行时序比较
(a)单周期;(b)多周期;(c)流水线
问,WB代表结果写回寄存器。

从流水线处理机的时序中可以看出,每个时钟周期处理机取出一条指令加以执行.
在流水线处理机和非流水线多周期处理机设计中,一个时钟周期要能容下所有类型的功能部件中所需时间最长的部件的执行时间。

我们把时钟周期定义为10ns.尽管读写寄存器堆只需5ns,也仍然要分配给它一个整个周期.对于非流水线多周期处理机来讲,与单周期处理机相比,它加长了指令的执行时间。

例如,执行load指令时,单周期处理机用40ns,而多周期处理机需要5个时钟周期,即50ns。

50ns过后,开始执行下一条指令。

流水线处
理机也是这样。

单看一条指令的执行,也要5个时钟周期。

但是,这对流水线处理机的性能影响很小。

这是由于流水线处理机性能提高的关键在于每个时钟周期都能启动一条指令的执行。

若流水线级数为m ,总共执行n 条指令,则所需总的时钟周期数为m+n 一1.因此流水 线处理机平均每条指令所需的准确的时钟周期数为
1
p m n CPI n
+-=
例如,当n =1,,n =5时,CPI+=5,它与非流水线处理机是一样的。

但当"很大时,例如n =100 000,则CPI p =100 004/100 0001,m 的影响可以忽略不计。

这就是我们前面所说的流水线处理机中单条指令执行时间变长将对性能造成很小影响的原因。

从本章后面的讨论中,我们会发现,它也影响流水线处理机控制电路的设计,主要体现在解决流水线处理机所固有的数据相关的问题变得更复杂了。

因此在设计流水线处理机时我们应考虑的问题有两个,一个是缩短单条指令的执行时间,另一个是提高流水线处理机的吞吐率。

应该说后者更重要一些。

流水线技术的好处在于它既能把指令间的操作并行性充分发挥出来,同时又不对用户编程提出新的要求,即它对用户来讲是“透明的”。

本章随后的几节将讨论如何实现我们所定义的指令系统的流水线操作,介绍流水线技术所带来的问题,以及描述为解决这些问题所采取的方法.
6.2 流水线处理机的数据路径
流水线处理机是比较难于理解的。

我们将通过具体的例子,对它的工作原理及工作过程作较为详细的描述。

6.2。

1 流水线级
图6.2给出的是我们在5章中描述过的非流水线单周期处理机的组成结构。

我们把执行指令的过程分为5部分,使其能够按流水线方式执行指令.分成5部分的意思就是同时可重叠执行的指令为5条,即5级流水线.每一级所使用的名字及其要完成的动作如下:
(1)IF(instruction fetch )取指令;
(2)ID (instructiondecode )指令译码并读寄存器操作数; (3)EXE(execution)执行;
(4)MEM (memoryaccess )存储器访问; (5)WB(write back )写回。

图6.2 把单周期处理机的指令执行分为5级
如图中的箭头方向所示,指令执行时从左移向右通过电路.但有两处从右向左的例外:一处是WB级,它把运算结果写回中间靠左位置的寄存器堆中;另一处是IF级,它把经过计算的下一条指令的地址写入程序计数器PC中。

下一条指令地址的计算方法有两种,一种是当前PC加1,另一种是当前PC加字地址偏移量,偏移量在指令中定义出。

流水线处理机的最大特点是每一个时钟周期取出一条指令来执行。

所有的指令按取出的先后次序通过图6.2中的从左至右的数据路径.依照指令类型的不同,每种指令在执行过程中可能会用到数据路径的不同的部分。

例如,图6.3中画出的是处理机连续执行load 指令时所要使用的数据路径中的功能部件。

load指令实际上是使用功能部件最多的指令。

图6.3中,IM(instruction memory)代表指令存储器。

在第一级,IF级,指令计数器PC中的内容作为访问IM的地址,送到IM的地址输入端。

第二级中,REG(register file)代表寄存器堆或者指令中立即数的扩展。

load指令访问存储器时所使用的地址由下面两个数据相加得到,一个数据是寄存器操作数,另一个数据是经符号扩展的立即数。

第三级的ALU做算术逻辑运算。

针对load指令来讲,ALU完成加法运算。

第四级中,DM(data memory)代表数据存储器。

存储器数据将在这一级中被读出。

存储器的地址输入就是ALU计算出的结果。

在第五级,从存储器中取出的数据被写回到寄存器堆中。

这一级中的REG就是第二级中的REG。

第二级读REG,第五级写REG。

在单周期处理机中,如果一条指令还没有执行完毕,PC的内容不会改变。

这就使得在
图6.3 流水线处理机连续执行load指令时的情形
一条指令的整个执行过程中,IM始终输出当前指令。

与单周期处理机不同,流水线处理机每个时钟周期都要取出一条指令。

这意味着,当流水线处理机已从存储器取出一条指令并把它送到ID级去译码时,下一条指令也正在从存储器中取出.如果先取出的指令没被保存,则它后面正在被取出的指令会对它造成影响。

也就是说,我们必须要使用寄存器来保存从存储器取出的指令。

推而广之,我们必须要在流水线的各级之间安排一组寄存器,用以保存当前时钟周期运算出的结果,以便为下个周期使用(我们只能使用触发器寄存器,它把时钟上升沿时数据输入端的信息打人寄存器中;而不能使用锁存器,因为锁存器的输出在时钟高电平时跟随输入的变化而变化。

有关触发器与锁存器的区别,见2章中的描述)。

我们称这些寄存器为流水线寄存器。

从广义上讲,如果把非流水线单周期处理机执行一条指令的整个过程看作是流水线处理机的一级的话,PC则相当于流水线寄存器,在该级的执行还没有完成时,不应该改变这个寄存器的内容。

由此,我们能够初步设想出流水线处理机应有图6.4所示的结构.
我们可以很自然地把PC作为一个特殊的流水线寄存器来看待,因为在非流水线处理机中PC也是需要的。

由于流水线处理机每个时钟周期都从指令存储器取出一条指令,它的值在每次周期结束时都将被改变.程序不发生转移时,PC加l;转移时,PC加符号扩展的偏移量。

图中的DSE(displacement sign-extend)表示对指令字偏移量进行符号扩展。

在第一级与第二级之间,我们使用了一个被称为IR(instruction register)的指令寄存器.对于字长为32位的处理机来讲,PC一般有30位,它存放的是32位指令的字地址。

1只有32位,用来存放一条指令。

第二和第三级之间需要较多的寄存器.首先,从寄存器堆中读出的两个32位数据A和B必须要保存。

再者,经符号扩展后的32位立即数I也要保存。

图中的ISE(immediate sign-extend)代表指令中立即数的符号扩展。

一般的ALU操作指令,要么是A与B操作,要么是A与I操作。

我们能不能增加一个多路器而省去B或I寄存器,只使用一个32位寄存器呢?答案是否定的。

原因出在store指令上。

store指令同时使用A,B 和I。

A和I用来计算存储器地址,B用来保存写入存储器的数据。

在流水线处理机中,这些数据必须要.在一个时钟周期中同时产生,以保证不引起资源冲突。

还有一个d寄存器,它被用来保存目的寄存器号;因为指令的操作结果要在WB级写入寄存器堆,目的寄存器
号也要在那时使用,因此必须要同步跟随过去。

图6.4 流水线处理机每级之间的流水线寄存器
第三级和第四级之间除了d之外,还有2,R和S.2用于存放ALU的一位ZERO标志。

当ALU指令的运算结果为全0时,ZERO输出1,否则输出0。

在执行条件转移指令时,Z 用来决定是否真正转移。

R保存32位ALU运算结果。

S专为store指令而设,用来存放要被写入存储器中的数据.
第四级和第五级之间的寄存器如下:D存放load指令从存储器中读出的数据;C只是保存前一级的R,即ALU指令的结果。

这一级d寄存器的输出用于指定目的寄存器,D或C 的数据要被写入由d所指定的目的寄存器中。

我们不妨把寄存器雄看作是最后一级流水线寄存器。

下面我们描述每级流水线的操作。

6.2.2 流水线各级的操作
1.IF级
在第一级(取指令级)(图6.5)处理机使用PC的内容访问指令存储器,取出指令,并在该级结束时,把指令打人1只寄存器。

下一条指令的地址也在这一级计算出,并把它打人PC寄存器。

新的PC的计算有两种情况:程序不发生转移时,新的PC地址由当前PC 值加1得到(1是指令字偏移量,相当于字节地址偏移量的4),即指向下一条/顷序的指令;发生转移时的情况比较复杂,我们将在后面进行描述.
图6.5 流水线第一级——取指令级
2.ID级
指令译码级(图6.6)有两件事情要做:第一件是数据路径要完成的工作,主要是从寄存器堆中读寄存器操作数和对指令中的立即数部分进行符号扩展;第二件工作由控制部件完成。

控制部件根据指令操作码OPCODE,产生所有的控制信号。

有关控制信号如何产生的问题,我们将在下一节描述。

正如前面提到的,目的寄存器号要保存在流水线寄存器中,以便在WB级指定把结果写入哪一个寄存器中。

寄存器堆A2输入端前面的多路器为store 指令而设。

不是store指令时,多路器选择指令中的rs2;是store指令时,多路器选择指令中的rd。

转移指令将在本级结束,我们稍后再详细讨论它。

图6.6 流水线第二级—-指令译码级
3.EXE级
执行级(图6.?)的工作均由ALU来做。

ALU运算类型的指令将在本级由ALU计算出结果,并把它打人R寄存器。

同时,ALU的ZERO输出也被打人Z寄存器。

ALU的两个操作数,一个来自于寄存器rsl,它在前一级已被打人流水线寄存器A中了;另一个可能是寄存器rs2操作数(流水线寄存器B中的内容),也可能是立即数(流水线寄存器I中的内容)。

load和store指令要在本级中计算存储器地址(ALU做加法).两个源操作数一个来自于A,一个来自于I。

若是store指令,B的内容将被打人流水线寄存器S.
图6。

7 流水线第三级一一执行级
4.MEM级
存储器访问级<图6.8)专为10ad/store指令而设。

两条指令均使用流水线寄存器R 的输出作为访问存储器的地址.store指令把S中的内容写入存储器。

10ad指令读存储器,并把读出的数据打人流水线寄存器D。

ALU指令在本级所做的事情就和移位寄存器一样,简单地把R的内容打人C。

图6.8 流水线第四级-—存储器访问级
5.WB级
写回级(图6.9)把指令结果写回到寄存器堆.目的寄存器由从ID级一直传递过来的目的寄存器号指定。

要写入的数据来源有两个,一个是流水线寄存器D中的内容,即存储器数据;另一个是流水线寄存器C的内容,即ALU指令的计算结果。

图6.9 流水线第五级-—写回级
图6.10 ALU指令执行时用到的流水线数据路径
我们把ALU运算类型的指令、1。

ad和store指令执行时用到的流水线数据路径分别在图6.10、图6.11和图6.12中给出.
图6.11 load指令执行时用到的流水线数据路径
图6.12 store指令执行时用到的流水线数据路径
6.3 流水线处理机的控制
通过阅读第5章,我们已经学会了如何设计非流水线处理机的控制部件。

为非流水线多周期处理机设计控制部件时,有两种方法可供我们选择使用,一种是有限状态机的硬布线方法,另一种是微程序控制方法。

虽然流水线处理机也是多周期处理机,但是,由于多条指令的重叠执行,使得我们很难描述某个时钟周期处理机到底处在何种状态,因为有太多的不同指令间的组合情况。

微程序控制方法也会遇到类似的问题,因为它终究是按一条条指令顺序执行的思路来设计的。

6.3.1 算术操作和存储器访问控制
实际上,我们可以借鉴非流水线单处理机控制部件的设计方法。

首先,让我们通过下面程序的例子,研究流水线处理机多条指令重叠操作的过程,然后依此设计出它的控制部件。

addi rl,r2, 4 ;r1←r1十4
load r2,100(r3);r2←memory[r3+100]
sub r4, r5,r6;r4←r5一r6 ,
add r7,r5, r6;r7←r5+r6
store r8, 200(r9) ;memory[r9+200]←r8
subi r10,r10,1 ;r10←r10一1
以上的例子比较简单,指令之间没有任何数据相关。

注意,在注释一列,我们采用了简单的表达方式。

例如,第一条指令addirl,r2,4完成的操作是读取寄存器r2的内容,把它加上4,结果写回寄存器r1。

比较合适的表达方法应该是rl一(r1)+4。

其它的也是一样,如loadr2,100(r3),应写成r2一memory[(r3)+100]的形式,即寄存器r3的内容加100,得到存储器的有效地址,用它访问存储器,从地址指定的单元读出数据,再把数据写人寄存器r2.store 指令完成的操作与load相反,这时的r8不是目的寄存器,而应看作是源寄存器。

它的内容要被存放到存储器中,其地址由寄存器r9的内容加200得到。

程序的执行时序图用图6.13(a)的图形方式画出.横坐标表示时间,纵坐标从上到下表示指令的执行次序。

这里还有另外一种图形表示方法,如图6.13(b)所示。

横坐标依然是时间,但纵坐标是流水线的级,从上至下为IF,ID,EXE,MEM和WB。

一条指令执行的5级按从左上至右下标出,即时钟周期增1(向右),流水线前进一级(向下)。

这种表示方法虽然不太直观,但它的好处是只要5行就够了,不像图6.13(a)那样,无限制的向右下方向延伸过去。

以下我们按顺序描述每个周期流水线数据路径的操作以及所需的控制信号。

注意,前4个周期,指令还没有充满流水线。

从第五个周期开始,指令充满流水线。

但由于例子中总共只有6条指令,从第七个周期开始,不再有新的指令被取采.随着指令不断地完成执行,流水线将在第11个周期完全变空。

在实际的计算机系统中,处理机总是能取到指令来执行。

当没有用户程序时,处理机转去执行操作系统程序。

1.第一个时钟周期(图6.14)
图6.14 程序例子执行时的第一+gl期
假设第一条指令的地址为0。

如果我们采用字节编址的话,则后续指令的字节地址依次为4,8,12,16,20。

图中左上角的1是字偏移量,它相当于字节偏移量的4。

为了叙述的
方便,这里我们使用字地址。

例中的6条指令地址分别为0,l,2,3,4,5。

第一个时钟周期是第一条指令的IP级。

PC输出0,从存储器取出第一条指令addirl,r2,4。

同时,地址加法器前面的多路器选择1,与当前PC值相加,得到字地址l,即下一条指令的地址.在该周期结束时,时钟的上升沿把取出的指令五条件地写人指令寄存器IR。

同时也把1写入PC.我们定义多路器的选择信号为BTAKEN(branchtaken),其意义为转移发生。

当它为1时,多路器选择经符号扩展的偏移量,与当前PC值相加,加法器输出转移地址.由于本例中没有转移指令,因此转移总也不发生,即BTAKEN=0。

第一个时钟周期结束后,即刚进入第二个周期时,PC输出1;IR输出第一条指令addi rl,r2, 4.
2.第二个时钟周期(图6.15)
这时第一条指令进入ID级,第二条指令进入IF级。

两条指令的操作在各自的级同时进行:
图6.15 程序例子执行时的第二个周期
(1)处在ID级的第-—条指令addirl,r2,4完成译码操作,并根据指令格式中各字段的值,对立即数部分做符号扩展,从寄存器堆中读出两个寄存器¨和r4的内容。

在本周期结束时,把上述3个数分别写入流水线寄存器I,A和B中。

实际上,寄存器r4的内容不被使用。

这个4来自于立即数中的4,因为它们在指令格式中处在相同的位置。

也就是说,把寄存器r4的内容打入B中做的是无用功。

但这没关系,因为下——个周期不使用它。

这样做的原因是为了简化控制电路,即流水线寄存器不要求配置写使能端了(以下,如果数据不被使用,我们不再描述它).目的寄存器号也被打人流水线寄存器d,以备在WR级用它来指定目的寄存器,向其中写入操作结果。

寄存器地址A2输入端前面的多路器选择指令格式中的rs2字段或者rd字段。

选择端的名字定义为SST(selectstore).当指令译码时发现是store指令,SST=1,选择rd,否则SST=0,选择rs2。

本例中不使用第二个寄存器操作数i 因此SST是什么都没关系.
(2)与此同时,与前面描述的-·样,从存储器取出第二条指令loadr2,100(r3),在周期结束时打人IR。

BTAKEN=0,把2(PC+1)打人PC。

第二个时钟周期结束后,即刚进入第三个周期时,PC输出2;IR输出第二条指令
loadr2,100(r3);I输出32位的4,A输出寄存器r1的内容,d输出l(目的寄存器是r1).
3.第三个时钟周期(图6.16)
这时第一条指令进入EXE级,第二条指令进入ID级,第三条指令进入IF级。

3条指令的操作在各自的级同时进行:
(1)处在EXE级的第—,条指令add rl,r1,4由ALU完成加法操作。

多路器的选择信号SIMM(select immediate)为1,意为选择立即数.ALU的两个源操作数分别来自流水线寄存器A和I。

ALU右端的流水线寄存器d,R,S被五条件地打人数据,而只有当指令为ALU运算类型时,写使能信号WZ=1,才把ALU的ZERO输出打人一位流水线寄存器Z。

这是因为并不是所有的指令都修改Z标志寄存器。

(2)处在ID级的第二条指令loadr3,100(r2)完成译码、立即数符号扩展以及读寄存
图6.16 程序例子执行时的第三个周期
器操作.SST=0,选择rs2。

在本周期结束时,把32位的100和r2的内容分别写人流水线寄存器I和A。

目的寄存器号3也被打人流水线寄存器d,以备在WR级用它来指定目的寄存器r3,向其中写入从存储器取来的数据。

(3)PC输出2,从存储器取出第三条指令sub r4,r5,r6,在周期结束时打人IR。

BTAKEN 二0,周期结束时把3打人PC。

第三个时钟周期结束后,即刚进入第四个周期时,PC输出3,指向第四条指令;IR输出第三条指令subr4,r5,r6;I输出32位的100,A输出寄存器r3的内容(第二条指令);R 输出第一条指令的加法结果。

4.第四个时钟周期(图6.17)
图6.17 程序例子执行时的第四个周期
这时第一条指令进入MEM级,第二条指令进入EXE级,第三条指令进入ID级,鲜四条指令进入IF级。

4条指令的操作在各自的级同时进行:
(1)R的内容直接传递到C。

(2)处在EXE级的第二条指令loadr3,100(r2)由ALU计算存储器地址。

多路器的
选择信号SIMM=1,选择立即数。

ALU的两个源操作数分别来自流水线寄存器A和
I.WZ=0,不打人流水线寄存器Z。

(3)处在Ⅲ级的第三条指令subr4,r5,r6完成译码、立即数符号扩展以及读寄存器操作。

SST=0,选择rs2。

在本周期结束时,寄存器r5和r6的内容分别写入流水线寄存器A和B。

目的寄存器号4也被打人流水线寄存器d,以备在WR级用它来指定目的寄存器r4,向其中写入减法操作的结果。

(4)PC输出3,从存储器取出第四条指令add r?,r5,r6,在周期结束时打人IR。

BTAKEN =0,周期结束时把4打入PC。

第四个时钟周期结束后,即刚进入第五个周期时,PC输出4,指向第五条指令;IR输出第四条指令addr7,r5,r6;A和B分别输出寄存器r5和r6的内容<第三条指令);R输出存储器地址(第二条指令);C输出第一条指令的加法结果.
5.第五个时钟周期(图6.18)。

相关文档
最新文档