MIPS处理器的5级流水线如题五图所示。请回答下列问题:
题五图
1. 请在流水线的计算阶段补足必要的MUX(多路选择器)和连接线。(注意:请在答题纸上画图。只需画出计算阶段部分,即图左侧起始部分为ID/EX寄存器,右侧结束部分为EX/MEM寄存器)
2. 题五图中流水线在实现回写寄存器存在设计错误,请明确指出,并简要分析该设计错误的危害。
3. 请反汇编下列指令序列(指令手册见后)。
4. 请指出上述指令片段在上述流水线中执行时存在的所有数据相关。
5. 通过利用编译器指令调度的优化功能,可以消除上述数据冒险。请按照如下表格给出调度后的指令顺序。(表格填写说明:表格中的指令编号即为该指令的原始编号,例如第1个单元格填入I6,则代表第一条指令为原序列的I6指令。)
调度前 | 调度后 |
I1 | |
I2 | |
I3 | |
I4 | |
I5 | |
I6 |
|
1. 对于上述指令片段,请分别计算编译优化前和编译优化后所需的周期数。
MIPS指令手册(节选)
编码 | 31 26 25 21 20 16 15 11 10 6 5 0 | |||||
special 000000 | rs | rt | rd | 0 00000 | addu 100001 | |
6 5 5 5 5 6 | ||||||
格式 | addu rd,rs,rt | |||||
操作 | GPR[rd]←GPR[rs]+GPR[rt] |
编码 | 31 26 25 21 20 16 15 0 | |||
lw 100011 | base | rt | offset | |
6 5 5 16 | ||||
格式 | lw rt,offset(base) | |||
描述 | GPR[rt]←memory[GPR[base]+offset] | |||
操作 | Addr←GPR[base]+sign_ext(offset) GPR[rt]←memory[Addr] | |||
其他 | sign_ext代表有符号二进制补码扩展。 Addr必须是4的倍数(即Addr 1...0 必须为00)。 |
编码 | 31 26 25 21 20 16 15 0 | |||
sw 100011 | base | rt | offset | |
6 5 5 16 | ||||
格式 | sw rt,offset(base) | |||
描述 | memory[GPR[base]+offset]←GPR[rt] | |||
操作 | Addr←GPR[base]+sign_ext(offset) memory[Addr]←GPR[rt] | |||
其他 | sign_ext代表有符号二进制补码扩展。 Addr必须是4的倍数(即Addr 1...0 必须为00)。 |