MIPS指令五级流水CPU设计精讲
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
25:21
0
0
PCSrc
31:26 5:0
CLK A1 A2 A3
1 WE3 RD1 1 RD2 0 1 0 0 WriteReg4:0 1 SrcA
CLK 010 Zero ALUResult A
0 WE 1 ReadData 0 1
ALU
Instruction Memory
20:16
SrcB
Register WD3 File
并在这些寄存器堆上标明所连接的流水段。
– 所有用于在同一条指令的各个时钟周期之间保存临时数据的寄存器, 都归入流水线寄存器这一类中。 – 流水线寄存器保存着从一个流水段传送到下一个流水段的所有数据和 控制信息。
PC多路选择器被移到IF段,这样做的目的是保证对PC值的写操 作只出现在一个流水段内,否则当分支转移成功的时候,流水线 中两条指令都试图在不同的流水段修改PC值,从而发生写冲突。 每个时刻,每条指令都只在一个流水段上是活动的,因此,任何 指令所作的任何动作都发生在一对流水线寄存器之间,具体操作 由指令类型决定。
程序执行顺序(指令序列)
IM
Reg
AL U
SUB R4, R1, R5
AL U
DM
Reg
IM
Reg
AL U
AND R6, R1, R7
DM
IM
Reg
XOR R10, R1, R11
IM
Reg
AL U
OR R8, R1, R9
旁路技术对数据通路的修改
WriteRegE4:0
WriteRegM4:0
WriteRegW 4:0
+
SignImmE
15:0
PCPlus4F
PCPlus4D
PCPlus4E
+
4
Sign Extend
<<2
PCBranchM
ResultW
Fetch
Decode
Execute
Memory
Writeback
在水线的各个流水段之间加入被称为流水线寄存器的寄存器堆,
指令预取
取指令 3 执行指令 3
若 取指 和 执行 阶段时间上 完全重叠 指令周期 减半 速度提高 1 倍
时间?
二、 流水线操作时空图
空间 执行操作 取数操作 分析指令 1 I 2 2 3 3 4 4 5 5 6 6 7 7
1
1
2
2
3
3
4
4
5
5
6
6
7
7
取指令 1 2 3 4 5 6 7 T0 T1 T2 T3 T4 T5 T6 装入阶段 稳定流水阶段
各步骤占用的资源
多周期CPU适合指令流水实现吗? – 已分解为多个步骤,但步骤间的资源冲突比较频繁
写入PC的指令地址
WritePC IODR WriteMEM WriteIR
节拍 信号产生
ALUsrcB
PCsrc
控制部件
MEMtoREG SE REGds WriteREG ALUsrcA
ALUop
2. 数据相关
不同指令因重叠操作,可能改变操作数的 读/写 访问顺序 • 写后读相关(RAW) SUB R1,R2,R3 ;(R2) (R3) ;(R5)+(R1) ;(R2) R1 R4 ADD R4,R5,R1 • 读后写相关(WAR) STA M,R2 ADD R2,R4,R5 M 存储单元 R2 R3 R3 ;(R4)+(R5) ;(R2)× (R1) ;(R4) (R5)
– 但是,每个部件执行的不是同一条指令
解决方案
– 把控制信号和数据一样流动起来
– 为区分起见,把控制信号前面加上标记,如_IF等
– 每个时钟周期往下一步骤传递控制信号
使正确的控制信号到达正确的位置
流水控制的实现
在RF/ID阶段生成控制信号
– 1个时钟周期后使用EX要用的控制信号
– 2个时钟周期后使用MEM要用的控制信号 – 3个时钟周期后使用WB要用的控制信号
+
15:0
PCPlus4F
PCPlus4D
PCPlus4E
+
4
Sign Extend
SignImmE
<<2
PCBranchM
ResultW
三种CPU比较
三、冲突时的解决方案
时间(时钟周期) CC1 CC2 CC3 CC4 CC5 CC6 CC7 CC8 CC9
MEM
Reg
ALU
Load
MEM
Reg
Control MemtoRegD Unit
MemWriteD BranchD
31:26 5:0
Op Funct
ALUControlD ALUSrcD RegDstD
CLK 0 1
PC' PCF
CLK
InstrD
25:21
CLK A1 A2 A3 WD3
20:16 15:11
CLK WE3 RD1 RD2 Register File
流水线的每个阶段完成一条指令执行过程的一部分 不同阶段并行完成不同指令执行过程的不同部分。
多条指令同时运行,占用CPU不同的资源。 流水线并没有缩短单条指令的时间,但提高了整个 系统的吞吐率。 连续不断地提供指令才能发挥流水线的效率。
四、影响指令流水线性能的因素
程序中相近的指令之间出现某种关联 1. 结构相关 不同指令争用同一功能部件产生资源冲突
MEM
Reg
ALU
指令1
MEM
Reg
MEM
Reg
ALU
指令2
MEM
Reg
MEM
Reg
ALU
指令3
MEM
Reg
MEM
Reg
ALU
指令4
MEM
Reg
1.结构冲突
如果因资源冲突而无法使用某种指令组合,那么就称流水线产 生了结构冲突。
– 暂停流水线执行,插入等待周期 – 增加资源,解决资源冲突
时间(时钟周期) CC1 CC2 CC3 CC4 CC5 CC6 CC7 CC8 CC9
• 写后写相关(WAW)
MUL R3,R2,R1 SUB R3,R4,R5
解决办法 • 采用 旁路技术 •采用乱序执行法解决
3. 控制相关
控制相关的冲突问题是由转移指令引起的。 无条件转移指令 条件转移指令 子程序调用指令 中断指令 解决流水线中主要问题的几种方法: 1.采用等待法解决指令相关的问题;
T7 T8
T9
时间
排空阶段
指令的流水线结构类似于工厂中的装配流水线,使连续操作的多条指令, 依次流入四个功能部件,使四个功能部件不停地依次处理不同指令的执行要 求,这样在每隔一个部件工作时间t,就可送入一条新的指令,每经过时间t
就可得到一条指令执行的结果,指令执行速度可提高四倍。
三、指令流水线的特点
RtE RdE SrcAE ZeroM
WE A RD Data Memory WD
ReadDataW
ALU
A
RD
0 1
ALUOutM
Instruction Memory
20:16
0 SrcBE 1
WriteDataEBiblioteka Baidu
WriteDataM
0 1
WriteRegE4:0
WriteRegM4:0
WriteRegW 4:0
各部件利用率依然偏低
– CPI > 1
– 可以如何改进呢?
4.5.2 指令流水基本概念
一、指令的几种执行方式 1. 指令的串行执行
取指令 1 执行指令 1 取指令 2 执行指令 2 …
取指令
取指令部件
完成
总有一个部件 空闲
执行指令
执行指令部件 完成
2. 指令的二级流水
取指令 1 执行指令 1 取指令 2 执行指令 2
程序执行顺序(指令序列)
IM
Reg
ALU
SUB R4, R1, R5
ALU
DM
Reg
IM
Reg
ALU
AND R6, R1, R7
DM
IM
Reg
XOR R10, R1, R11
IM
Reg
ALU
OR R8, R1, R9
旁路技术解决RAW冲突
– 将结果尽快传送到需要使用它的位置
时间(时钟周期) CC CC 1 2 ADD R1, R2, R3 IM Reg CC 3 CC 4 DM CC 5 Reg CC 6
– 执行/有效地址计算周期(EX)
– 存储器访问/分支完成周期(MEM)
– 写回周期(WB)
不同类型的指令在以上5个时钟周期中进行的操作各 不相同。
划分流水段
CLK CLK CLK 0 1
PC' PCF ALUOutW
CLK
InstrD
25:21
CLK A1 WE3 RD1
CLK
SrcAE ZeroM
确定分支指令 是否转移的 条件信号Z
2 1
op func target
左移2位 PC[31..28]
0
0
指 令 内 容 IR
rs rt
rd
0 1
N1 寄 Q1 存 N2 器 堆 ND DI Q2
A 寄 存 器
1
A A L U
Z
PC
0 1
存 A 储 D 器
B 寄 存 器
4
1 0 2 3
B
R
结 果 寄 存 器
支持流水的CPU
CLK
RegWriteD RegWriteE MemtoRegE MemWriteE BranchE ALUControlE2:0 ALUSrcE RegDstE ALUOutW
CLK
RegWriteM MemtoRegM MemWriteM BranchM PCSrcM
CLK
RegWriteW MemtoRegW
MEM
Reg
ALU
Load
MEM
Reg
MEM
Reg
ALU
指令1
MEM
Reg
MEM
Reg
ALU
指令2
MEM
Reg
暂停
气泡
气泡
气泡
气泡
气泡
MEM
Reg
ALU
指令3
MEM
Reg
2. 数据冲突
时间(时钟周期) CC1 ADD R1, R2, R3 IM CC2 Reg CC3 CC4 DM CC5 Reg CC6
CLK WE A RD Data Memory WD
ReadDataW
ALU
A
RD
ALUOutM
Instruction Memory
0 1
20:16
A2 RD2 A3 Register WD3 File
RtE RdE
0 SrcBE 1
WriteDataE
WriteDataM
20:16 15:11
0 1
MEM
Reg
ALU
Load
MEM
Reg
MEM
Reg
ALU
指令1
MEM
Reg
MEM
Reg
ALU
指令2
MEM
Reg
MEM
Reg
ALU
指令3
MEM
Reg
MEM
Reg
ALU
指令4
MEM
Reg
消除结构冲突的最简单方法就是引入暂停周期,这必然 要降低流水线的性能。
时间(时钟周期) CC1 CC2 CC3 CC4 CC5 CC6 CC7 CC8 CC9
WO EI FO CO DI FI
WO EI FO CO DI FI
WO EI FO CO DI
WO EI WO FO EI WO CO FO EI WO
停顿(插入汽泡) 解决办法 : 4• 冲突 指令 1 与指令 指令1、指令3、指令 6 冲突 • 冲突 指令存储器和数据存储器分开 … 指令 2 与指令 5
4.5 MIPS指令五级流水CPU设计
4.5.1 多周期CPU回顾 4.5.2 指令流水基本概念 4.5.3 MIPS指令流水的实现
4.5.1 多周期CPU回顾
多周期CPU特点 – 指令的执行划分为多个步骤 – 每个步骤占用一个CPU周期 – 不同指令的指令周期不同 – 指令串行执行
– 提高了整体性能
使指令流水出现停顿,影响流水线效率
1
指令 1 FI 指令 2 指令 3 指令 4 指令 5 指令 6 指令 7 指令 8 指令 9 t
2
3
4
5
6
7
8
9
10
11
12 13
14
DI CO FO EI WO FI DI CO FO EI WO FI DI CO FO EI FI DI CO FO FI DI CO FI DI FI
各阶段寄存器保存的值
IF/ID
– PC+4 – IR
ID/EXE
– A、B、imm、PC+4、func – rt/rd
EXE/MEM
– 运算结果:PC、ALU、结果状态 – 中间结果:B、目的寄存器
MEM/WB
– 目的寄存器、ALU结果、存储器读出的结果
二、流水线的控制
控制到每个功能部件
DR
1 0
Immediate
Clock
扩展
左移2位
单周期CPU容易实现指令流水吗?
MemtoReg Control MemWrite Unit Branch ALUControl 2:0 Op Funct ALUSrc RegDst RegWrite CLK 0 1 PC' PC A RD Instr
2.采用分支预测: 静态 、动态预测.
4.5.3 MIPS指令流水的实现
指令执行步骤
– – – – – – – – – – 取指令(IF) 指令译码(ID/RF) 指令执行(EXE) 读存储器(MEM) 写回(WB) IF:IM、PC ID/RF:寄存器组、控制信号生成部件 EXE:ALU MEM:DM WB:寄存器组
20:16 15:11
WriteData
RD Data Memory WD
+
PCPlus4
15:0
SignImm 4 Sign Extend
<<2
+
PCBranch
Result
一、流水线的实现
每条指令的实现至多需要5个时钟周期,时钟周期如下 – 取指令周期(IF)
– 指令译码/读寄存器周期(ID)
0
0
PCSrc
31:26 5:0
CLK A1 A2 A3
1 WE3 RD1 1 RD2 0 1 0 0 WriteReg4:0 1 SrcA
CLK 010 Zero ALUResult A
0 WE 1 ReadData 0 1
ALU
Instruction Memory
20:16
SrcB
Register WD3 File
并在这些寄存器堆上标明所连接的流水段。
– 所有用于在同一条指令的各个时钟周期之间保存临时数据的寄存器, 都归入流水线寄存器这一类中。 – 流水线寄存器保存着从一个流水段传送到下一个流水段的所有数据和 控制信息。
PC多路选择器被移到IF段,这样做的目的是保证对PC值的写操 作只出现在一个流水段内,否则当分支转移成功的时候,流水线 中两条指令都试图在不同的流水段修改PC值,从而发生写冲突。 每个时刻,每条指令都只在一个流水段上是活动的,因此,任何 指令所作的任何动作都发生在一对流水线寄存器之间,具体操作 由指令类型决定。
程序执行顺序(指令序列)
IM
Reg
AL U
SUB R4, R1, R5
AL U
DM
Reg
IM
Reg
AL U
AND R6, R1, R7
DM
IM
Reg
XOR R10, R1, R11
IM
Reg
AL U
OR R8, R1, R9
旁路技术对数据通路的修改
WriteRegE4:0
WriteRegM4:0
WriteRegW 4:0
+
SignImmE
15:0
PCPlus4F
PCPlus4D
PCPlus4E
+
4
Sign Extend
<<2
PCBranchM
ResultW
Fetch
Decode
Execute
Memory
Writeback
在水线的各个流水段之间加入被称为流水线寄存器的寄存器堆,
指令预取
取指令 3 执行指令 3
若 取指 和 执行 阶段时间上 完全重叠 指令周期 减半 速度提高 1 倍
时间?
二、 流水线操作时空图
空间 执行操作 取数操作 分析指令 1 I 2 2 3 3 4 4 5 5 6 6 7 7
1
1
2
2
3
3
4
4
5
5
6
6
7
7
取指令 1 2 3 4 5 6 7 T0 T1 T2 T3 T4 T5 T6 装入阶段 稳定流水阶段
各步骤占用的资源
多周期CPU适合指令流水实现吗? – 已分解为多个步骤,但步骤间的资源冲突比较频繁
写入PC的指令地址
WritePC IODR WriteMEM WriteIR
节拍 信号产生
ALUsrcB
PCsrc
控制部件
MEMtoREG SE REGds WriteREG ALUsrcA
ALUop
2. 数据相关
不同指令因重叠操作,可能改变操作数的 读/写 访问顺序 • 写后读相关(RAW) SUB R1,R2,R3 ;(R2) (R3) ;(R5)+(R1) ;(R2) R1 R4 ADD R4,R5,R1 • 读后写相关(WAR) STA M,R2 ADD R2,R4,R5 M 存储单元 R2 R3 R3 ;(R4)+(R5) ;(R2)× (R1) ;(R4) (R5)
– 但是,每个部件执行的不是同一条指令
解决方案
– 把控制信号和数据一样流动起来
– 为区分起见,把控制信号前面加上标记,如_IF等
– 每个时钟周期往下一步骤传递控制信号
使正确的控制信号到达正确的位置
流水控制的实现
在RF/ID阶段生成控制信号
– 1个时钟周期后使用EX要用的控制信号
– 2个时钟周期后使用MEM要用的控制信号 – 3个时钟周期后使用WB要用的控制信号
+
15:0
PCPlus4F
PCPlus4D
PCPlus4E
+
4
Sign Extend
SignImmE
<<2
PCBranchM
ResultW
三种CPU比较
三、冲突时的解决方案
时间(时钟周期) CC1 CC2 CC3 CC4 CC5 CC6 CC7 CC8 CC9
MEM
Reg
ALU
Load
MEM
Reg
Control MemtoRegD Unit
MemWriteD BranchD
31:26 5:0
Op Funct
ALUControlD ALUSrcD RegDstD
CLK 0 1
PC' PCF
CLK
InstrD
25:21
CLK A1 A2 A3 WD3
20:16 15:11
CLK WE3 RD1 RD2 Register File
流水线的每个阶段完成一条指令执行过程的一部分 不同阶段并行完成不同指令执行过程的不同部分。
多条指令同时运行,占用CPU不同的资源。 流水线并没有缩短单条指令的时间,但提高了整个 系统的吞吐率。 连续不断地提供指令才能发挥流水线的效率。
四、影响指令流水线性能的因素
程序中相近的指令之间出现某种关联 1. 结构相关 不同指令争用同一功能部件产生资源冲突
MEM
Reg
ALU
指令1
MEM
Reg
MEM
Reg
ALU
指令2
MEM
Reg
MEM
Reg
ALU
指令3
MEM
Reg
MEM
Reg
ALU
指令4
MEM
Reg
1.结构冲突
如果因资源冲突而无法使用某种指令组合,那么就称流水线产 生了结构冲突。
– 暂停流水线执行,插入等待周期 – 增加资源,解决资源冲突
时间(时钟周期) CC1 CC2 CC3 CC4 CC5 CC6 CC7 CC8 CC9
• 写后写相关(WAW)
MUL R3,R2,R1 SUB R3,R4,R5
解决办法 • 采用 旁路技术 •采用乱序执行法解决
3. 控制相关
控制相关的冲突问题是由转移指令引起的。 无条件转移指令 条件转移指令 子程序调用指令 中断指令 解决流水线中主要问题的几种方法: 1.采用等待法解决指令相关的问题;
T7 T8
T9
时间
排空阶段
指令的流水线结构类似于工厂中的装配流水线,使连续操作的多条指令, 依次流入四个功能部件,使四个功能部件不停地依次处理不同指令的执行要 求,这样在每隔一个部件工作时间t,就可送入一条新的指令,每经过时间t
就可得到一条指令执行的结果,指令执行速度可提高四倍。
三、指令流水线的特点
RtE RdE SrcAE ZeroM
WE A RD Data Memory WD
ReadDataW
ALU
A
RD
0 1
ALUOutM
Instruction Memory
20:16
0 SrcBE 1
WriteDataEBiblioteka Baidu
WriteDataM
0 1
WriteRegE4:0
WriteRegM4:0
WriteRegW 4:0
各部件利用率依然偏低
– CPI > 1
– 可以如何改进呢?
4.5.2 指令流水基本概念
一、指令的几种执行方式 1. 指令的串行执行
取指令 1 执行指令 1 取指令 2 执行指令 2 …
取指令
取指令部件
完成
总有一个部件 空闲
执行指令
执行指令部件 完成
2. 指令的二级流水
取指令 1 执行指令 1 取指令 2 执行指令 2
程序执行顺序(指令序列)
IM
Reg
ALU
SUB R4, R1, R5
ALU
DM
Reg
IM
Reg
ALU
AND R6, R1, R7
DM
IM
Reg
XOR R10, R1, R11
IM
Reg
ALU
OR R8, R1, R9
旁路技术解决RAW冲突
– 将结果尽快传送到需要使用它的位置
时间(时钟周期) CC CC 1 2 ADD R1, R2, R3 IM Reg CC 3 CC 4 DM CC 5 Reg CC 6
– 执行/有效地址计算周期(EX)
– 存储器访问/分支完成周期(MEM)
– 写回周期(WB)
不同类型的指令在以上5个时钟周期中进行的操作各 不相同。
划分流水段
CLK CLK CLK 0 1
PC' PCF ALUOutW
CLK
InstrD
25:21
CLK A1 WE3 RD1
CLK
SrcAE ZeroM
确定分支指令 是否转移的 条件信号Z
2 1
op func target
左移2位 PC[31..28]
0
0
指 令 内 容 IR
rs rt
rd
0 1
N1 寄 Q1 存 N2 器 堆 ND DI Q2
A 寄 存 器
1
A A L U
Z
PC
0 1
存 A 储 D 器
B 寄 存 器
4
1 0 2 3
B
R
结 果 寄 存 器
支持流水的CPU
CLK
RegWriteD RegWriteE MemtoRegE MemWriteE BranchE ALUControlE2:0 ALUSrcE RegDstE ALUOutW
CLK
RegWriteM MemtoRegM MemWriteM BranchM PCSrcM
CLK
RegWriteW MemtoRegW
MEM
Reg
ALU
Load
MEM
Reg
MEM
Reg
ALU
指令1
MEM
Reg
MEM
Reg
ALU
指令2
MEM
Reg
暂停
气泡
气泡
气泡
气泡
气泡
MEM
Reg
ALU
指令3
MEM
Reg
2. 数据冲突
时间(时钟周期) CC1 ADD R1, R2, R3 IM CC2 Reg CC3 CC4 DM CC5 Reg CC6
CLK WE A RD Data Memory WD
ReadDataW
ALU
A
RD
ALUOutM
Instruction Memory
0 1
20:16
A2 RD2 A3 Register WD3 File
RtE RdE
0 SrcBE 1
WriteDataE
WriteDataM
20:16 15:11
0 1
MEM
Reg
ALU
Load
MEM
Reg
MEM
Reg
ALU
指令1
MEM
Reg
MEM
Reg
ALU
指令2
MEM
Reg
MEM
Reg
ALU
指令3
MEM
Reg
MEM
Reg
ALU
指令4
MEM
Reg
消除结构冲突的最简单方法就是引入暂停周期,这必然 要降低流水线的性能。
时间(时钟周期) CC1 CC2 CC3 CC4 CC5 CC6 CC7 CC8 CC9
WO EI FO CO DI FI
WO EI FO CO DI FI
WO EI FO CO DI
WO EI WO FO EI WO CO FO EI WO
停顿(插入汽泡) 解决办法 : 4• 冲突 指令 1 与指令 指令1、指令3、指令 6 冲突 • 冲突 指令存储器和数据存储器分开 … 指令 2 与指令 5
4.5 MIPS指令五级流水CPU设计
4.5.1 多周期CPU回顾 4.5.2 指令流水基本概念 4.5.3 MIPS指令流水的实现
4.5.1 多周期CPU回顾
多周期CPU特点 – 指令的执行划分为多个步骤 – 每个步骤占用一个CPU周期 – 不同指令的指令周期不同 – 指令串行执行
– 提高了整体性能
使指令流水出现停顿,影响流水线效率
1
指令 1 FI 指令 2 指令 3 指令 4 指令 5 指令 6 指令 7 指令 8 指令 9 t
2
3
4
5
6
7
8
9
10
11
12 13
14
DI CO FO EI WO FI DI CO FO EI WO FI DI CO FO EI FI DI CO FO FI DI CO FI DI FI
各阶段寄存器保存的值
IF/ID
– PC+4 – IR
ID/EXE
– A、B、imm、PC+4、func – rt/rd
EXE/MEM
– 运算结果:PC、ALU、结果状态 – 中间结果:B、目的寄存器
MEM/WB
– 目的寄存器、ALU结果、存储器读出的结果
二、流水线的控制
控制到每个功能部件
DR
1 0
Immediate
Clock
扩展
左移2位
单周期CPU容易实现指令流水吗?
MemtoReg Control MemWrite Unit Branch ALUControl 2:0 Op Funct ALUSrc RegDst RegWrite CLK 0 1 PC' PC A RD Instr
2.采用分支预测: 静态 、动态预测.
4.5.3 MIPS指令流水的实现
指令执行步骤
– – – – – – – – – – 取指令(IF) 指令译码(ID/RF) 指令执行(EXE) 读存储器(MEM) 写回(WB) IF:IM、PC ID/RF:寄存器组、控制信号生成部件 EXE:ALU MEM:DM WB:寄存器组
20:16 15:11
WriteData
RD Data Memory WD
+
PCPlus4
15:0
SignImm 4 Sign Extend
<<2
+
PCBranch
Result
一、流水线的实现
每条指令的实现至多需要5个时钟周期,时钟周期如下 – 取指令周期(IF)
– 指令译码/读寄存器周期(ID)