指令流水线设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微处理器外部时序
地址总线AB
微处理器 CPU
存储器
输入/输出 接口电路
外围 设备
数据总线DB 控制总线CB
clk AB[31:2] DB[31:0] rd IR[31:0]
5BFF_C000 5BFF_C001
00000000
5BFF_C000
00000001
00000002
5BFF_C001
数据通路
指令格式
•
指令的功能由OP 域和 域决定。 域和f 域决定。 指令的功能由
• •
src1:源操作数1寄存器 :源操作数 寄存器 src2:源操作数2寄存器 :源操作数 寄存器
• •
dst:目的操作数寄存器 : lit:8位立即数(有符号数) : 位立即数 有符号数) 位立即数(
指令机器码
1. 2. 3. 4. 5. move move move addi cmpi r31, r30, r1, r0, r0, r31, r31, r31, r31, r0, #0 #FF #1 r30 r30
IF
DE
EX MEM WB
三级指令流水线
• 取指级(IF):从存储器取指令,每个周期取出一条指令。PC加4 取指级( ) 从存储器取指令,每个周期取出一条指令。PC加 • 译码级(DE):译出所要执行的指令的功能并识别出所需的资源,这 译码级( ) 译出所要执行的指令的功能并识别出所需的资源, 些资源包括通用寄存器、总线和功能部件,提供流水线控制互锁, 些资源包括通用寄存器、总线和功能部件,提供流水线控制互锁,并 从寄存器读出操作数。 从寄存器读出操作数。 • 执行和写回:完成指令功能,将结果写入寄存器。 执行和写回:完成指令功能,将结果写入寄存器。
• 地址端口 • 寄存器组 •桶式移位器 桶式移位器 • ALU • 数据端口
通用寄存器组
• 通用寄存器:32个32位寄存器 0~R31。 通用寄存器: 个 位寄存器 位寄存器R • ERA[31:0]:ERA[i]为1则读寄存器 中的数据到 总线 : 则读寄存器Ri中的数据到 为 则读寄存器 中的数据到A总线 • ERB[31:0]: ERB[i]为1则读寄存器 中的数据到 总线 : 则读寄存器Ri中的数据到 为 则读寄存器 中的数据到B总线 • EWR[31:0]:EWR[i]为1则将 总线上的数据写入寄存器 : 则将C总线上的数据写入寄存器 为 则将 总线上的数据写入寄存器Ri
RC
op f
EWRC
译码
RC总线 总线
写回
寄存器
REWR[31:0]
译码
Rdst
dst
仿真波形
001011_11111_00000_000_00000_110_11110
取指
执行
写回
译码
REG3指令执行过程 指令执行过程
• 取指级:从程序存储器读取指令字并保存到IR。 取指级:从程序存储器读取指令字并保存到IR。 IR • 译码级:译出指令执行所需要的BS、ALU控制信号并在周期末保存到D触 译码级:译出指令执行所需要的BS ALU控制信号并在周期末保存到 BS、 控制信号并在周期末保存到D 发器。IR寄存器中源操作数 域经译码后得寄存器组读信号, 寄存器中源操作数1 发器。IR 寄存器中源操作数1 域经译码后得寄存器组读信号, 在下半时 钟周期读取源操作数到A,将指令中的立即数送到B总线。 A,将指令中的立即数送到 钟周期读取源操作数到 A, 将指令中的立即数送到B 总线。指令字中目的 寄存器场dst dst由 位寄存器Rdst保存。 Rdst保存 寄存器场dst由5位寄存器Rdst保存。 • 执行级 :ALU 、 BS 根据译码级译出的控制信号完成相应的动作 ,并将结 执行级:ALU、BS根据译码级译出的控制信号完成相应的动作 根据译码级译出的控制信号完成相应的动作, 果输出到C总线上并周期末锁存。 Rdst寄存器进行译码并保存到写信 果输出到C 总线上并周期末锁存 。对Rdst 寄存器进行译码并保存到写信 号寄存器EWR 对于条件传送指令,在执行级对条件是否成立进行判断。 EWR。 号寄存器 EWR 。 对于条件传送指令,在执行级对条件是否成立进行判断 。 • 写回级:在上半时钟周期将结果数据写入寄存器。 写回级: 上半时钟周期将结果数据写入寄存器。 周期将结果数据写入寄存器
• 001_011_11111_00000_000_00000_11_0_11110 //3 addi r0, r31, r30 • 001_101_00000_00000_001_00000_11_0_11110 //4 cmpi r0, r0, r30
指令流水线—空间换取时间 指令流水线 空间换取时间
•
•
控制信号产生
IF DE EX
op
DB[31:0]
f IR
译 码 逻 辑
D 触 发 器
Cin S[3:0] M
ALU
RC[31:0]
src1 5-32 src2 5-32 dst
ERA[31:0] ERB[31:0] dst[4:0]
RF
5-32 EWR[31:0]
WB
控制信号产生
clk AB[31:2] DB[31:0] rd IR[31:0]
指令流水线
• 如果一个微处理器有 个流水级,与一个相同的没有流水线的设 如果一个微处理器有10个流水级, 个流水级 计相比,其理想性能能达到多少? 计相比,其理想性能能达到多少? • 如果流水线越深,性能越好。那为什么不只增加流水级来获得更 如果流水线越深,性能越好。 高的性能? 高的性能?
• • • •
取指
00000000
5BFF_C000
译码
00000001
执行
00000002
写回
00000002
5BFF_C001
5BFF_C000
5BFF_C001
5BFF_C001
IR
Src译码 RF读 ALU执行 Dst译码 RF写
ALU控制译码 Dst域保存
地址输出 取指 PC +4 选择
数据输出
数据输入
//0 move R31, R31, #0 //1 move r30, r31, #FF //2 move r1, r31, #1
• 010_110_11111_11111_110_00000_00000000 • 010_110_11111_11110_110_00000_11111111 • 010_110_11111_00001_110_00000_00000001
5BFF_C000 5BFF_C001
00000000
5BFF_C000
00000001
00000002
5BFF_C001
REG2指令执行过程 指令执行过程
• •
ቤተ መጻሕፍቲ ባይዱ
取指级:从程序存储器读取指令字并保存到IR。 加 取指级:从程序存储器读取指令字并保存到IR。PC加4 IR 译码级:译出指令执行所需要的BS、ALU控制信号并在周期末保存到D 译码级:译出指令执行所需要的BS、ALU控制信号并在周期末保存到D触 BS 控制信号并在周期末保存到 发器。IR寄存器中源操作数 寄存器中源操作数src1和源操作数src2 发器。 IR 寄存器中源操作数 1 和源操作数 2 域经译码后得到寄存器 组读信号,在下半时钟周期读取源操作数到A 总线。 组读信号,在下半时钟周期读取源操作数到A、B总线。指令字中目的寄 存器场dst dst由 位寄存器Rdst保存传递到执行级。 Rdst保存传递到执行级 存器场dst由5位寄存器Rdst保存传递到执行级。 执行级:ALU、BS根据译码级译出的控制信号完成相应的动作 根据译码级译出的控制信号完成相应的动作, 执行级:ALU、BS根据译码级译出的控制信号完成相应的动作,将结果 输出到C总线并在周期末锁存。 Rdst寄存器进行译码并保存到写信号 输出到C 总线并在周期末锁存。 对Rdst 寄存器进行译码并保存到写信号 寄存器EWR 对于条件传送指令,在执行级对条件是否成立进行判断。 EWR。 寄存器EWR。对于条件传送指令,在执行级对条件是否成立进行判断。 写回级: 上半时钟周期将结果数据写入寄存器。 写回级:在上半时钟周期将结果数据写入寄存器。 周期将结果数据写入寄存器
在一个时钟周期内完成的工作量就少了。 在一个时钟周期内完成的工作量就少了。 流水线停顿的损失很高,会抵消深流水线带来的增益。 流水线停顿的损失很高,会抵消深流水线带来的增益。 流水线越深,控制逻辑就越复杂。 流水线越深,控制逻辑就越复杂。如果控制逻辑在一定程度上成为 关键路径,使流水线再深也是无效的。 关键路径,使流水线再深也是无效的。 流水周期至少在单个门延时的20倍以上。 流水周期至少在单个门延时的20倍以上。 20倍以上
Sequential fetch decode execute Inst1 fetch decode execute Inst2 fetch decode execute Inst3 Total=9 cycles
指令流水线模型
L 输入⇒
S1 ⇒
L
S2 ⇒
L
……
L
⇒ Sk
L
⇒
输出
时钟 τ τm
d
• 触发器将流水级输入/输出隔离 • 流水级由组合逻辑构成,并要求各段的时延大致相等 • 时钟脉冲宽度等于τm+d,通常τm>>d约1到2个数量级 τ 约 到 个数量级
IF
DE IF
EX DE IF
EX DE
EX
存储器访问 (MEM):若需 ) 要,在流水线中插 入一个周期
四级指令流水线
• 取指级(IF):从存储器取指令,每个周期取出一条指令。PC加4 取指级( ) 从存储器取指令,每个周期取出一条指令。PC加 • 译码级(DE):译出所要执行的指令的功能并识别出所需的资源, 译码级( ) 译出所要执行的指令的功能并识别出所需的资源, 这些资源包括通用寄存器、总线和功能部件,提供流水线控制互锁, 这些资源包括通用寄存器、总线和功能部件,提供流水线控制互锁, 并从寄存器读出操作数。 并从寄存器读出操作数。 • 执行级(EX):完成指令功能。 执行级( ) 完成指令功能。 • 写回级(WB):用来将结果或存储器读出的数据写入寄存器。 写回级( ) 用来将结果或存储器读出的数据写入寄存器。
指令流水线设计
指令编码-op域 指令编码 域
IR31~29 IR28~26 0 1 2 3 4 5 6 7 SHIFT SHIFT REG1 0 REG2 1 REG3 2 3 be bl ble bg bge bne br ba ret reta
蓝色阴影的指令暂不实现
CTRL 4 bal bsr bint 5 stob stos stib stis stw
MEM 6 ldob ldos ldib ldis ldw 7
ARITH ARITH LOGIC LOGIC COMP COMP MOVE MOVE SYS SYS
NOP
指令编码— 指令编码 f 场
IR15~13 000 001 010 011 100 101 110 111 SYS ldSR stSR lds sts MOVE movee movel movele moveg movege movene move move compo compi COMP LOGIC and nor xnor not andnot or xor nand ARITH (C=0) addi subi muli divi addo subo mulo divo ARITH (C=1) addic subic muli divi addoc suboc mulo divo shro shlo SHIFT shli shlr shri
ERA[i] Cbus[i] EWR[i] CLK ERB[i] DFF Bbus[i] Abus[i]
寄存器组
C总线 R0 R1
ERAi ERBi EWRi src1 ERA0 ERB0 EWR0
IR
dst Rdst src2
寄存 器译 码逻 辑
R31
A总线 B总线
寄存器组
clk AB[31:2] DB[31:0] rd IR[31:0] ERA0 ERA1
• 是实现多条指令重叠执行的重要技术。 • 设计高速CPU的一项最主要的实现技术。 • 分为两类:
– 指令流水线 – 数据流水线
Inst1 Inst2 Inst3 fetch Pipeline decode execute fetch decode execute fetch decode execute Total=5 cycles
五级流水线指令执行过程
• 取指级(IF):从存储器取指令,每个周期取出一条指令。PC加4 取指级( ) 从存储器取指令,每个周期取出一条指令。PC加 • 译码级(DE):译出所要执行的指令的功能并识别出所需的资源,这 译码级( ) 译出所要执行的指令的功能并识别出所需的资源, 些资源包括通用寄存器、总线和功能部件,提供流水线控制互锁, 些资源包括通用寄存器、总线和功能部件,提供流水线控制互锁,并 从寄存器读出操作数。 从寄存器读出操作数。 • 执行级(EX):完成指令功能。 执行级( ) 完成指令功能。 • 存储器访问(MEM):完成LOAD/STORE访问。 存储器访问(MEM) 完成LOAD/STORE访问。 LOAD/STORE访问 • 写回级(WB):用来将结果或存储器读出的数据写入寄存器。 写回级( ) 用来将结果或存储器读出的数据写入寄存器。
REG2图解
RERA[31:0]
译码 译码
DO DA DL
DI
IR
FE src1 src2
寄存器 译码
A总线 总线
RA
RERB[31:0] B总线 总线
RB
EWRA EWRB S
译码 译码 译码
RA总线 总线
执行
RB总线 总线 Sin1 Sin2 shift shift opB总线 总线 RS、cin、M 、 、 ALU C总线 总线