108 ×
第 3 版 · OCR 辅助 · 原书检索 · 文字用于定位,公式与图表请回原页核验 · 本次导入快照
### 108 ×
MUX
800001801
Overflow
蟹
ALU
Zero
00
CLK
MUX
ALUctr
EPC
11
CLK
MUX
0°
cause
ALU局部
控制器
6{
CLK
MU)
MemtoReg ExtOp
ALUopR-type
IntCause
CauseWr
图5.31 带异常处理的多周期数据通路
<!-- page: 178 -->
中央处理器
图5.31中对两个寄存器 EPC和cause分别加入了以下两个“写使能”控制信号。
EPCWr:在需要保存断点时,该信号有效,使断点值PC写入EPC。
CauseWr:CPU发现异常(如非法指令、溢出)时,该信号有效,使异常类型写入
cause 中
此外,还需要一个控制信号IntCause来选择将正确的值写入到cause中。
发现异常后,需将异常查询程序的入口地址(MIPS为0x8000 0180)写入 PC,因此,图
中在原来 PCSource控制的多路选择器中需增加一路,其输入为0x8000 0180,用 PCSource=
11来控制选择,
5.4.3带异常处理的有限状态机
为实现异常处理,数据通路对应的控制器也必须进行修改,可以在图5.26所示的有限
状态机中增加异常响应状态来得到控制器对应的有限状态机。带异常响应处理的有限状态
机如图 5.32 所示。
0:IFetch
1:RFetch/ID
2:BrFinish
ALUop=addu
1:PCWr, IRWr
x:PCWrCond
RegDst⋯
ALUop=addu
beq
1:BrWr,ExiOp
ALUSc1B=11
jump
x:RegDst⋯
other
lw or sw
ori
R-type
3:jumpFinish
10:MemFetch
6:RExec
8:MemAdr
4:oriExec
E:ALUSelA
1:RegDst
12:Undefinstr
1:ALUSe1A
lorD,ExtOp
ALUSelA
lw
lorD, ExtOp
IntCause=0
MemtoReg
ALUSeIB-00
ALUSe1B=10
ALUSelA=0
ALUSe1B=10
ALUop=R-type
ALUop=addu
ALUSelB=01
ALUop=addu
x:lorD,⋯
5:oriFinish
ALUop=subu
PCSource=11
CauseWr=
sw
13:Overflow
11:1wfinish
EPCWr=1
9:swFinish
7:RFinish
PCWr=L
IntCause-
I:ALUSelA
1:ALUSelA
1:RegDst,
ALUSelA=0
lorD, ExtOp
lorD, ExtOp
/ALUSelA, RegWroverflow
ALUSelB-01
MemtoReg, RegWr]
MemWr
ALUop=subu
ALUSelB=00
ALUSclB=10
ALUSeIB=10
PCSource=11
ALUop=R-type
CauseWr=1
ALUop=addu
ALUop=addu
x:lorD,
EPCWr=1
PCWr=1
图5.32 带异常响应处理的有限状态机示意图
在图5.26所示的有限状态机中,已有状态0~状态11。在带有异常响应处理的有限状
态机中,通常一种异常响应增加一个状态,因此,两种异常对应的状态分别用状态12和状态
### 13 来表示(加黑加粗的两个圆)。
(1)状态12。“非法操作码”异常响应周期。若在状态1进行指令译码时发现OP字段
是一个未定义的编码,则进入状态12,其控制信号用来控制完成以下操作:①将0送 cause
寄存器;②PC减4送 EPC;③将0x80000180 送PC。
(2)状态13。“溢出”异常响应周期,当R-型指令或I-型算术类指令执行后在 ALU 输
第5章
161
<!-- page: 179 -->
计算机组成与系统结构(第3版)
162
出端的overflow为1时,则进入状态13。其控制信号用来控制完成以下操作:①将1送
cause 寄存器;②PC减4送 EPC;③将0x8000 0180 送 PC。
根据图5.32所示的有限状态机不难实现相应的控制逻辑。
5.5本 章 小 结
CPU的基本功能是周而复始地执行指令,并处理异常和中断。CPU 最基本的部分是
数据通路(datapath)和控制器(control unit)。数据通路中包含组合逻辑单元和存储信息的
状态单元。组合逻辑单元(如加法器、ALU、扩展器、多路选择器以及状态单元的读操作逻
辑等)用于对数据进行处理;状态单元包括触发器、寄存器和存储器等,用于对指令执行的中
间状态或最终结果进行保存。控制单元对取出的指令进行译码,与指令执行得到的条件码
或当前机器的状态、时序信号等组合,生成对数据通路进行控制的控制信号。
指令执行过程主要包括取指、译码、取数、运算、存结果、查中断。通常把取出并执行一
条指令的时间称为指令周期,现代计算机的每个指令周期直接由若干时钟周期组成。时钟
信号是CPU 中用于控制信号同步的信号。
每条指令的功能不同,因此每条指令执行时数据在数据通路中所经过的部件和路径也
可能不同。但是,每条指令在取指令阶段都一样。单周期处理器中,所有指令的取并执行都
在一个时钟周期完成,其CPI等于1;而多周期处理器中,每条指令的执行过程分成若干阶
段,指令周期由若干时钟周期组成,其CPI大于1。
控制器有两种不同的实现方式。硬连线控制器将指令执行过程中每个时钟周期所包含
的控制信号取值组合看成一个状态,每来一个时钟,控制信号会有一组新的取值。所有指令
的执行过程可以用一个有限状态转换图来描述。硬连线控制器用一个组合逻辑电路(一般
为PLA电路)来生成控制信号,而微程序控制器将指令执行过程中每个时钟周期所包含的
控制信号取值组合看成一个0/1序列,每个控制信号对应一个微命令,控制信号取不同的
值,就发出不同的微命令。
习题
1.给出以下概念的解释说明。
指令周期
数据通路
操作元件
状态元件
时钟周期
边沿触发
扩展器
通用寄存器组
转移目标地址
控制信号
控制存储器(CS)
微代码
固件
异常/中断检测
2.简单回答下列问题。
(1)CPU的基本组成和基本功能各是什么?
(2)取指令部件的功能是什么?
(3)控制器的功能是什么?
控制部件
建立时间
锁存延迟
暂存寄存器
硬连线控制器
微指令
异常/中断响应
执行部件
保持时间
多路选择器
指令译码器(ID)
微程序控制器
微程序
异常查询程序
<!-- page: 180 -->
中央处理器
(4)单周期处理器的CPI是多少?时钟周期如何确定?为什么单周期处理器的性能差?
(5)单周期方式下,在一个指令周期内某个部件能否被重复使用多次?为什么?
(6)多周期处理器的设计思想是什么?每条指令的CPI是否相同?为什么在一个指令周期内某个部
件可被重复使用?
(7)在控制器设计方法上,单周期处理器和多周期处理器的差别是什么?
(8)硬连线控制器和微程序控制器的特点各是什么?
(9)为什么CISC大多采用微程序控制器,RISC大多采用硬连线控制器?
(10)CPU 检测内部异常和外部中断的方法有什么不同?
3.右图给出了某CPU内部结构的一部分,MAR和 MDR直接
连到存储器总线(图中省略)。在CPU内部总线 A和 B之间的所有
数据传送都需经过算术逻辑部件ALU。ALU的部分控制信号及其
功能如下:
总线 A
总线 B
IR
MDR
MOVa:F=A;
MOVb:F=B;
a+1:F=A+1;
b+1:F=B+1;
MAR
a-1:F=A-1;
b-1:F=B-1。
PC
其中A和B是ALU的输入,F是ALU的输出。假定该 CPU
的指令系统中调用指令CALL占两个字,第一个字是操作码,第二
个字给出子程序的起始地址,返回地址保存在主存的栈中,用SP
(栈指示器)指向栈顶,存储器按字编址,每次按同步方式从主存读
取一个字。要求:
SP
Y
A1
Bt
ALU
(1)说明CALL指令的功能。
F
(2)写出读取并执行CALL指令所要求的控制信号序列(提
示:当前指令地址已在 PC中)。
4.某计算机字长16位,标志寄存器 Flag中的ZF、SF和OF分别是零标志、符号标志和溢出标志,采
用双字节定长指令字。假定该计算机中有一条bgt(大于零转移)指令,其指令格式如下:第一个字节指
明操作码和寻址方式,第二个字节为偏移地址Imm8,其功能是:
若(ZF+(SF⑥OF)==0),则PC=PC+2+1mm8,否则PC=PC+2。
完成如下要求并回答问题:
(1)该计算机存储器的编址单位是什么?
(2)画出实现 bgt 指令的数据通路。
5.假定图5.16所示单周期数据通路对应的控制逻辑发生错误,使得控制信号RegWr、RegDst、
ALUSre、Branch,MemWr、ExtOp、R-type,MemtoReg中某一个在任何情况下总是为0.则该控制信号为0
时哪些指令不能正确执行?要求分别讨论。
6.假定图5.16所示单周期数据通路对应的控制逻辑发生错误,使得控制信号RegWr、RegDst,
ALUSre、Branch、MemWr、ExtOp、R-type,MemtoReg中某一个在任何情况下总是为1,则该控制信号为1
时哪些指令不能正确执行?要求分别讨论。
7.要在 MIPS指令集中增加一条swap指令,可以有两种做法。一种做法是采用伪指令方式(即软件
方式),这种情况下,当执行到swap指令时,用若干条已有指令构成的指令序列来代替实现;另一种做法是
直接改动硬件来实现swap指令,这种情况下,当执行到 swap指令时,则可在CPU上直接执行。要求:
(1)写出用伪指令方式实现“swap rs,rt”时的指令序列(提示:伪指令对应的指令序列中不能使用其
他额外寄存器,以免破坏这些寄存器的值)。
(2)假定用硬件实现swap指令时会使每条指令的执行时间增加10则swap指令要在程序中占多
大的比例才值得用硬件方式来实现?
第5章
163
<!-- page: 181 -->
计算机组成与系统结构(第3版)
164
8.假定图5.25多周期数据通路对应的控制逻辑发生错误,使得控制信号PCWr、MemtoReg、IRWr、
RegWr、BrWr、MemWr、PCWrCond,R-type中某一个在任何情况下总是为0,则该控制信号为0时哪些指
令不能正确执行?要求分别讨论。
9.假定图5.25多周期数据通路对应的控制逻辑发生错误,使得控制信号PCWr、MemtoReg、IRWr、
RegWr、BrWr,MemWr、PCWrCond、R-type中某一个在任何情况下总是为1.则该控制信号为1时哪些指
令不能正确执行?要求分别讨论。
10.假定有一条 MIPS伪指令“bcmp $tl,$t2,$t3”,其功能是实现对两个主存块数据的比较,$tl
和$t2中分别存放两个主存块的首地址,$t3中存放数据块的长度,每个数据占4字节,若所有数据都相
等,则将0置入$tl;否则.将第一次出现不相等时的地址分别置入$t1和$t2并结束比较。若$t4和
$t5是两个空闲寄存器,请给出实现该伪指令的指令序列,并说明在类似于图5.25所示的多周期数据通
路中执行该伪指令时要用多少个时钟周期。
11.对于图5.25所示的MIPS多周期处理器,假定将访问数据的过程分成两个时钟周期,则可使时钟
频率从480MHz提高到560MHz,但这样会使得Iw和sw指令增加时钟周期数。已知基准程序CPUint
2000中各类指令的频率为:load—25??Store-10??Branch—11??Jump—2??ALU—52那么,以基
准程序CPUint 2000为标准,处理器时钟频率提高后的性能提高了多少?若将取指令过程再分成两个时
钟周期,则可进一步使时钟频率提高到640MHz,此时,时钟频率的提高是否也能带来处理器性能的提高?
为什么?
12.假设MIPS指令系统中有一条I型指令“bgt Rs,Rt,Imm16”,其功能为:
若Rs>Rt,则PC=PC+4+1mm16×4,否则PC=PC+4。
假定ALU能产生 ZF(零标志)、SF(符号标志)和OF(溢出标志)3个标志的输出,请在图5.25所示的
多周期数据通路中增加实现 bgt 指令的数据通路以及相应的控制信号。
13.对于多周期 CPU中的异常和中断处理,回答以下问题:
(1)对于除数为0、溢出、无效指令操作码、无效指令地址、无效数据地址、缺页、访问越权和外部中断,
CPU 在哪些指令的哪个时钟周期能分别检测到这些异常或中断?
(2)在检测到某个异常或中断后,CPU通常要完成哪些工作?简要说明CPU如何完成这些工作。
14.假定选择以下9条RV321指令作为实现目标设计单周期RISC-V处理器:3条R-型指令(“add rd,
rsl,rs2""slt rd,rsl,rs2""sltu rd.rsl,rs2");2条1型指令("orird,rsl,imm12""lw rd,rsl,imm12");
1条U-型指令(luird,imm20);1条S型指令(swrsl,rs2,imm12);1条B-型指令(beqrsl,rs2,imm12);
1条」型指令(jal rd,imm20),参照5.2节中MIPS单周期处理器设计方案,完成以下任务并回答问题。
(1)给出RISC-V处理器中扩展器的设计方案。
(2)给出RISC-V处理器中ALU的设计方案。
(3)给出 RISC-V 单周期数据通路和对应的控制逻辑。
(4)为何RISC-V处理器中无须专门的局部ALU 控制器?
<!-- page: 182 -->
第
章
6
指令流水线
## 第5章介绍的单周期处理器和多周期处理器的指令执行都是采用串行方式。串行方式
下,CPU 总是在执行完一条指令后才取出下条指令执行。显然,这种串行方式没有充分利
用执行部件的并行性,因而指令执行效率低。与现实生活中的许多情况一样,指令的执行也
可以采用流水线方式,将多条指令的执行相互重叠起来,以提高CPU执行指令的效率。
本章主要介绍指令流水线的基本概念、流水线数据通路和控制器的实现、指令流水线中
各种冲突(冒险)现象及其解决方法,并简要介绍一些高级流水线技术。
6.1流水线概述
6.1.1流水线的执行效率
一条指令的执行过程可被分成若干阶段,每个阶段由相应的功能部件完成。如果将各
阶段看成相应的流水段,则指令的执行过程就构成了一条指令流水线。例如,假定一条指令
流水线由如下5个流水段组成。
(1)取指令(IF):从存储器取指令。
(2)指令译码(ID):产生指令执行所需的控制信号。
(3)取操作数(OF):读取操作数。
(4)执行(EX):对操作数完成指定操作。
(5)写回(WB):将结果写回。
进入流水线的指令流,由于后一条指令的第i步与前一条指令的第i+1步同时进行,
从而使一串指令总的完成时间大为缩短。如图6.1所示,在理想状态下,完成4条指令的执
行只用了8个时钟周期,若是非流水线的串行执行处理,则需要20个时钟周期。
从图6.1可看出,理想情况下,每个时钟都有一条指令进入流水线;每个时钟周期都有
一条指令完成;每条指令的时钟周期数(即CPI)都为1。
为了更加清楚地了解流水线的执行效率,下面用一个例子来比较流水线处理器和单周
期处理器的指令执行情况。
对于第5章给定的具有11条指令的MIPS单周期处理器(其数据通路见图5.16),考虑
最复杂的lw指令的执行情况。假定lw指令的5个阶段所花的操作时间分别为:①取指一
200ps;②寄存器读—50ps;③ALU操作—100ps;④存储器读—200ps;⑤寄存器写一
<!-- page: 183 -->
计算机组成与系统结构(第3版)
166
输入
S?
取指
(IF)
S?
译码
(ID)
S?
取操作数
(OF)
指令
1
2
3
4
5
i
4
4
IF
ID
IF
OF
ID
IF
EX
OF
ID
IF
WB
EX
OF
ID
S?
执行
(EX)
6
7
WB
EX
OF
WB
EX
Ss
写回
(WB)
输出
8
时钟
WB
图6.1 一个5段指令流水线
50ps。不考虑控制单元、信号传递等延迟,lw指令的总执行时间为600ps。若某程序有N
条指令,在不考虑任何其他额外开销和冲突的情况下,单周期处理器所用的时间为
N×600ps。
对于流水线处理器,通常流水线设计的原则是:指令流水段个数以最复杂指令所用的
功能段个数为准;流水段的长度以最复杂的操作所花时间为准。考虑实现第5章所述的同
样11条指令的MIPS流水线处理器,按照以上流水线设计原则,该流水线处理器共有5个
流水段,每个流水段的长度为200ps,因而每条指令的执行时间为1ns,反而比单周期处理器
串行执行时增加了400ps,由此可见,流水线方式并不能缩短一条指令的执行时间。但是,
对于整个程序来说,流水线方式可以大大增加指令执行的吞吐率。
若流水段数为M,每个流水段的执行时间为T,则N条指令的执行总时间为(M+
N-1)×T。例如,对于上述11条指令的5段流水线的例子,流水线处理器所用时间为
(4+N)×200ps。当N很大时,流水线方式是串行执行方式的3倍。显然,如果每个功能
段划分均匀,使得执行时间大致相等的话,提高倍数应为5,即为流水段的个数。
6.1.2适合流水线的指令集特征
具有什么特征的指令集有利于实现指令流水线呢?
首先,指令长度应尽量一致。这样,有利于简化取指令和指令译码操作。例如,32 位
MIPS架构中指令都是32位,每条指令占4个存储单元,因此,每次取指令都是读取4个单
元,且下址计算也方便,只要PC+4即可;而IA-32架构中指令长度从1字节到15字节不
等,取指令部件极其复杂,取指令所花时间也长短不一,而且也不利于指令译码。
其次,指令格式应尽量规整,尽量保证源寄存器的位置相同。这样,有利于在指令未译
码时就可取寄存器操作数。例如,MIPS指令格式中,源操作数寄存器Rs和Rt的位置总是
分别固定在IR<25:21>和IR<20:16>,在指令译码的同时就可读取寄存器Rs和Rt中
的内容。若源操作数寄存器的位置随指令不同而不同,则必须先译码后才能确定指令中各
寄存器编号的位置,因此,从寄存器取数的工作就不能提前到和译码操作同时进行。
第三,采用装入/存储型指令风格,可以保证除load/store指令外的其他指令(如运算指
令)都不访问存储器,这样,可把load/store 指令的地址计算和运算指令的执行步骤规整在
同一个周期中,因此,有利于减少操作步骤,规整流水线。像在IA-32之类的非装入/存储型
体系结构中,运算类指令的操作数可以是存储器数据,这样,在指令执行过程中,需要有存储
<!-- page: 184 -->
指令流水线
器地址计算、存储器访问和运算等,因而这类指令的执行要多出一些功能段,与简单指令的
功能段划分相差很大,不利于流水线的规划。
此外,数据和指令在存储器中要“对齐”存放。这样,有利于减少访存次数,使所需数据
在一个流水段内就能从存储器中得到。
总之,规整、简单和一致等特性有利于指令的流水线执行。
6.2流水线处理器的实现
为便于和单周期处理器、多周期处理器比较,假定后面介绍的流水线处理器的实现目标
也是第5章提出的11条MIPS指令。以下主要介绍支持该11条指令的流水线数据通路和
控制器的实现。
6.2.1每条指令的流水段分析
指令流水线设计的第一步是要对每条指令的执行过程进行分析,以确定流水线每个功
能段的功能和执行时间。
每条指令前两个功能段都一样。Ifetch:取指并计算PC+4。Reg/Dec:寄存器取数并
译码。后面的功能段随各指令功能的不同而不同。
1.R-型指令功能段划分
R-型指令都涉及在ALU中对Rs和Rt内容进行运算,最终把ALU的运算结果送目的
寄存器 Rd。像 add和sub等指令还要判断结果是否溢出,只有不溢出时才写结果到Rd,否
则转异常处理程序执行。
根据R-型指令的功能,对照第5章多周期数据通路设计,很容易给出R-型指令的功能
段划分。如图6.2所示,在Ifetch和Reg/Dec两个公共功能段后,其余的是:Exec功能段用
于在ALU中计算;Write功能段用于将 ALU中的计算结果写回寄存器。
时钟周期
2
3
4
Ifetch
Reg/Dee
Exec
Write
图6.2 R-型指令的功能段划分
2.I-型运算类指令功能段划分
I-型带立即数的运算类指令都涉及对16位立即数进行符号扩展或零扩展,然后和Rs
的内容进行运算,最终把ALU的运算结果送目的寄存器 Rt。显然,I-型运算类指令的功能
段划分与R-型指令相同。
3. Iw 指令功能段划分
lw指令的功能为R[Rt]-M[R[Rs]+SEXT(imm16)]。其功能段的划分如图6.3所
示,除公共的两个功能段外,其余的是:Exec功能段用于在ALU中计算地址;Mem功能段
用于从存储器中读数据;Write 功能段用于将数据写入寄存器。
第6章
167
<!-- page: 185 -->
计算机组成与系统结构(第3版)
168
时钟周期
1
2
3
4
5
Ifetch
Reg/Dec
Exec
Mem
Write
图6.3 lw指令的功能段划分
4.sw指令功能段划分
sw指令的功能为M[R[Rs]+SEXT(imm16)]-R[Rt],即把寄存器内容写入存储器
中,与lw指令相比,少了一步写寄存器的工作,其功能段划分如图6.4所示。其中,后面两
个功能段的功能是:Exec用于在 ALU中计算地址;Mem用于将数据写入存储器中。
时钟周期
1
2
3
4
Ifetch
Reg/Dec
Exec
Mem
图6.4 sw指令的功能段划分
5.beq 指令功能段划分
beq指令的功能为if(R[Rs]=R[Rt])then PC-PC+4+(SEXT(imm16)×4)else PC
-PC+4。除了前面两个公共功能段外,其后各功能段可以划分为:Exec用于在 ALU中
做减法以比较是否相等,同时用一个加法器计算转移地址;WrPC功能段用于在比较相等的
情况下将转移目标地址写到 PC中。因为写入 PC的操作(WrPC)比存储器访问操作
(Mem)的时间短,所以,可以将功能段WrPC向功能段Mem靠,即最后的功能段用 Mem
表示,在 Mem功能段时间内完成 PC写入操作。因此.beq指令的功能段划分类似于sw指
令,如图6.4所示。
6.j指令功能段划分
j指令是无条件转移指令,其功能是直接将目标地址送PC中。所以,其功能段的划分
很简单,除了两个公共的功能段外,就只有一个功能段WrPC,其操作时间比 Exec段时间
短,因而可合并到Exec段。
从以上对各指令功能段的分析可看出,最复杂的是lw指令,它有5个功能段,其他指令
都可以通过加入“空”功能段来向lw 指令靠齐。
在插入“空”段时,应遵循两个原则:①每个功能部件每条指令只能用一次(如寄存器写
口不能用两次或以上);②每个功能部件必须在相同的阶段被使用(如寄存器写口总是在第
5阶段被使用)。
因此,R-型指令、I-型运算类指令需在Write之前加一个空的Mem段,使得其Write段
和lw指令的Write对齐,都在第5段;sw指令和beq指令在第4个功能段后加一个空的
Write段;j指令则在后面添加两个空段Mem和Write。这样,所有指令都有5个功能段。
因此,该处理器的指令流水线可以设计成5个流水段。
6.2.2流水线数据通路的设计
根据对11条指令的分析,可以得到执行这11条指令的5段流水线数据通路基本框架,
<!-- page: 186 -->
指令流水线
如图6.5所示。
CLK
Ifetch(IF)
Reg/Dec(ID)
RegWr:
Exec(Ex)
ExtOp:
:AL.Uop
Mem
Branch
Jump?
Write(Wr)
名
0
PC+4
Ad
Unit
PC131:28
PC+4
PC[31:28]ltarget|00
func
山0
imm16
Rs
WE
Ra
Rt
Rb
RFile
Rw Di
Rt
Rd
ID/Ex
Btarg
PC+4
Jtang
Jtarg
func
imm16
busA
busB
Exec
Unit
Zero
Overflow
Ex/Mem
Data
Mem
RA Do
WA
Di
Mem/Wr
0
RegDst
R-type
ALUSre
MemWr
MemtoReg
图6.5 5段流水线数据通路基本框架
在图6.5所示的流水线数据通路中,每条指令的执行都经历5个流水段:IF、ID、Ex、
Mem和Wr,每个流水段都在不同的功能部件中执行。流水段之间有一个流水段寄存器,例
如,IF/ID寄存器是介于IF段和ID段之间的寄存器。每个流水段寄存器用来存放从当前
流水段传到后面所有流水段的信息。因为每个段间传递的信息不一样,所以各流水段寄存
器的长度也不一样。
图6.5中给出了数据通路用到的所有控制信号,用虚线连到所控制的功能部件。可以
看出,PC和各个流水段寄存器都没有写使能信号。这是因为每个时钟都会改变PC的值,
所以 PC不需要写使能控制信号;每个流水段寄存器在每个时钟都会写入一次,因此,流水
段寄存器也不需要写使能控制信号。此外,前两个流水段的功能每条指令都相同,是公共流
水段,因此,也不需控制信号。其余段的控制信号如下。
Exec 段的控制信号有以下5个。
(1)ExtOp(扩展器操作):1—符号扩展;0—零扩展。
(2)ALUSrc(ALU的B口来源):1—来源于扩展器;0—来源于busB。
(3)ALUop(用于辅助局部ALU控制逻辑来决定ALUctr的操作信号):3位编码。
(4)RegDst(指定目的寄存器):1—Rd;0—Rt。
(5)R-type(区分是否为R-型指令):1—R-型指令;0—非R-型指令。
Mem 段的控制信号有以下3个。
(1)MemWr(数据存储器 DM的写信号):sw指令时为1,其他指令为0。
第6章
169
<!-- page: 187 -->
计算机组成与系统结构(第3版)
170
(2)Branch(是否为分支指令):分支指令时为1,其他指令为0。
(3)Jump(是否为无条件转移指令):无条件转移指令时为1,其他指令为0。
Wr段的控制信号有两个。
(1)MemtoReg(寄存器的写入源):1—DM输出;0—ALU 输出。
(2)RegWr(寄存器堆写信号):结果写寄存器的指令都为1,其他指令为0。
以下分别介绍各流水段的功能、功能部件、保存到流水段寄存器的信息和控制信号
取值。
1.Ifetch(IF)段
IF 流水段的功能是:将PC的值作为地址到指令存储器1M(instruction memory)中取
指令,并计算PC+4,送 PC输入端。这些功能由取指部件(IUnit)来完成,其具体实现如
图6.6所示。
CLK
Ifetch(IF)
-Reg/Dec(ID)
PC=16
12
4·
Ad
IM
Adde
IF/ID
图6.6 取指令部件IUnit的内部实现
假定当前指令地址为12,则当时钟 CLK的下降沿到来时,在 PC输入端的值12 经过
“Clk-to-Q”时延后,被送到IM的地址输入端Ad,并同时送加法器。在IM中经过一个存取
时间后,指令被送到IM的输出端。在加法器中PC与4相加后送到一个多路选择器,若是
顺序执行,则下个时钟到来时PC为16。但指令不总是顺序执行,当执行到分支指令或无条
件转移指令时,PC的值可能被修改,因此PC的输入来自一个多路选择器。当需要转移时,
可控制选择转移目标地址送PC。
IF段执行的结果被送到IF/ID寄存器的输入端,下个时钟到来时,在IF/ID寄存器输
入端的信息开始送到ID段继续被处理。那么,IF/ID寄存器中需要保存的结果是哪些呢?
显然,从IM中取出的指令要被继续处理,因而,需要保存在IF/ID寄存器中;此外,如果当
前指令是分支指令,则 PC+4的值在后面的流水段中需要用来计算分支转移目标地址
(Btarg),因此 PC+4的值需保存在IF/ID寄存器中;如果是无条件转移指令,则 PC高4位
PC[31:28]需要用来计算无条件转移目标地址(Jtarg),因此 PC[31:28]也需保存在 IF/ID
寄存器中。
该段唯一的控制点是多路选择器的控制端,从图6.5看出,多路选择器的控制端由在
Mem段产生的 Branch信号和Zero标志,以及Jump信号来控制,显然,Branch 信号只有在
对分支指令beq译码后才取值为1,Jump信号在对j指令译码后才取值为1,只要不是分支
<!-- page: 188 -->
指令流水线
指令和无条件转移指令,Branch和Jump两个信号就都取值为0,因而多路选择器的输出为
PC+4。在Mem阶段若执行的是beq指令且Zero=1,则将Ex阶段计算得到的分支转移
目标地址(Btarg)选择送到 PC的输入端;在Mem阶段若执行的是j指令,则将Ex阶段计
算得到的无条件转移目标地址(Jtarg)选择送到 PC的输入端。
2.Reg/Dec(ID)段
ID流水段的功能是:根据指令中的Rs和Rt的值到寄存器堆中取出相应寄存器的值,
同时对指令中的操作码OP字段进行译码,生成相应的控制信号。寄存器堆可看成是寄存
器读口和寄存器写口两个功能部件。ID段的功能由寄存器读口和控制器完成,如图6.5所
示。有关流水线处理器的控制器实现在6.2.3节介绍。
该阶段可以将IF/ID寄存器中传递过来的PC[31:28]与指令中的低 26位(J-型指令中
的target 字段)进行拼接,最后再添两个0,得到无条件转移目标地址Jtarg。这样,如果当
前指令为J-型指令,则在Mem阶段可以更新 PC,以跳转到转移目标地址处执行。
ID段执行的结果被送到ID/Ex寄存器的输入端,下个时钟到来时,在ID/Ex寄存器输
入端的信息开始送到 Ex段继续被处理。这些信息包括PC+4、Jtarg、func、imm?6、R[Rs]、
R[Rt]、Rt、Rd等。因为指令中需要的信息(如Rt、Rd、imm16、func等字段)已被保存,所以
指令本身就不再需要保存在ID/Ex寄存器中。
3. Exec(Ex)段
Ex段的功能由具体指令确定,不同指令经ID段译码后得到不同的控制信号,用来控制
执行部件进行不同的操作。图6.7是执行部件(exec unit)的示意图。
CLK
Exec
-Mem
PC+4
32
左移
(2位
Adder
Btarg
Jtarg
0e2
busA
Zero
32
ALU
Overflow
busB
ALUout
0
32
MUX
1ALUctr
打展器
imm16
83
Ml
16
32
func
3
6
局部 ALU
控制器
ExMem
ExtOp
ALUSre
ALUop
R-type
图6.7 执行部件 exec unit 的内部实现
根据每类指令的功能,综合考虑图6.5和图6.7,得到 Ex流水段中每条指令的执行流程
及其控制信号取值如下。
第6章
171
<!-- page: 189 -->
计算机组成与系统结构(第3版)
172
1)R-型指令的执行
11条目标指令中的 add、sub、subu、slt和 sltu都是R-型指令,它们在 ALU 中由
ALUetr控制分别执行 add、sub、subu,slt和sltu运算,ALUetr 操作控制信号由局部 ALU
控制器根据func字段产生。R-型指令的目的寄存器是Rd,ALU的操作数来自busA 和
busB,不需要扩展操作。最终,将ALU得到的结果ALUout以及Overflow 标志和 Zero 标
志一起送到 Ex/Mem寄存器的输入端。综上所述,得到控制信号的取值为RegDst=1,ExtOp=
x,ALUSre=0,ALUop=xxx,R-type=1。
2)I-型运算类指令的执行
11条目标指令中的ori和 addiu是I-型运算类指令,它们在ALU中由 ALUctr 控制分
别执行 or和 addu运算,ALUetr操作控制信号由主控制器根据指令操作码OP字段产生。
1-型运算类指令的目的寄存器是Rt,ALU的操作数来自busA和扩展器的输出,逻辑运算
进行零扩展,而算术运算则为符号扩展。与R-型指令一样,最终将ALU中得到的结果
ALUout 以及Overflow 标志和 Zero 标志一起送到 Ex/Mem寄存器的输入端。综上所述,
ori指令控制信号取值为RegDst=0,ExtOp=0,ALUSre=1,ALUop=or,R-type=0。
addiu指令控制信号取值为RegDst=0,ExtOp=1,ALUSre=1,ALUop=addu,R-type=0。
3)lw 指令的执行
首先要在 ALU 中进行地址计算,ALU的操作数来自busA和扩展器输出,采用符号扩
展,在ALU中由ALUctr控制执行addu运算,目的寄存器是Rt。最终在ALU 中得到的存
储器地址被送到Ex/Mem寄存器的输入端。综上所述,得到控制信号取值为RegDst=0,
ExtOp=1,ALUSrc=1,ALUop=addu,R-type=0。
4)sw 指令的执行
同1w指令一样,需要进行存储器地址计算并送下一级流水线寄存器。因为该指令不会
写结果到寄存器,所以,RegDst的取值可任意,不会影响结果。综上所述,得到控制信号的
取值为RegDst=x,ExtOp=1,ALUSrc=1,ALUop=addu,R-type=0。
5)beq指令的执行
beq指令需要比较寄存器Rs和Rt的值,通过在 ALU中做减法生成 Zero标志来实现
比较。因此,ALU两个操作数来源是busA和busB,ALUctr操作控制信号为subu;同时,
将imm16送到扩展器,然后在ExtOp的控制下进行符号扩展,扩展结果左移两位(×4),再
和PC+4相加,生成分支转移目标地址(Btarg)。执行阶段生成的Zero标志和转移目标地
址 Btarg被送到Ex/Mem寄存器的输入端。因为不改变任何通用寄存器的值,所以控制信
号 RegDst 的值任意。综上所述,得到控制信号的取值为RegDst=x,ExtOp=1,ALUSrc=0,
ALUop=subu,R-type=0。
6)j指令的执行
只要将ID阶段生成的无条件转移目标地址 Jtarg=PC<31:28>l|target<25:0>
00,直接传送到Ex/Mem寄存器的输入端即可。控制信号的取值为RegDst=x,ExtOp=x,
ALUSrc=x,ALUop=xxx,R-type=x。
4.Mem 段
Mem流水段的功能也由具体指令确定。从图6.5知,这个流水段有 MemWr、Branch
和Jump3个控制信号。各条指令在Mem段的执行流程和控制信号取值如下。