简单MIPS指令的5个时钟周期
1. 取指令周期(IF)
IR <- Mem[PC] ;
NPC <- PC + 4 ;
操作:根据PC指向的地址从Memory中取指令并装载到寄存器(IR)中,同时PC+4以获得下一条指令的地址。IR中保存下一个时钟周期需要的指令,NPC中保存下一条指令的PC。
2. 指令译码/读寄存器周期(ID)
A <- Regs[rs];
B <- Regs[rt] ;
Imm <- IR的立即数字段进行符号扩展
操作:分析指令并访问寄存器堆读寄存器,读寄存器和分析指令可以并行执行。
3. 执行/有效地址周期(EX)
操作:ALU对上一个时钟周期准备好的操作数进行计算。
4. 访问存储器/转移完成指令(MEM)
操作:在需要时访问存储器,如果是load命令,从存储器中读数据,并装入到寄存器中;如果是store命令,则将寄存器中的数据写入到存储器中。
5. 写回周期(WB)
操作:将结果写回到寄存器。
采用计分板机制的动态调度法
将指令译码流水段(ID)分为:
1. 发射:译码指令,并检测数据结构冒险的情况;
2. 读操作数:等到不存在数据冒险时,读出操作数。
计分板技术:
在动态流水线中,所有的指令在发射阶段均是按序发射的,但在读操作数阶段,有可能会产生停顿或旁路,而影响轮序执行。计分板技术就是在资源单元充足,没有数据相关存在的情况下,允许乱序执行的一种技术。
计分板技术就是负责指令发射和执行的,也负责所有冒险的检测和解除。
计分板由三部分组成:
1. 指令状态表;
2. 功能单元状态表
3. 寄存器结果状态表
用Tomasulo方法进行动态调度
通过对操作数进行跟踪,使指令在操作数可用时立即开始执行,以减少RAW冒险;通过引入寄存器重命名较少WAW和WAR冒险。
在Tomasulo算法中,寄存器重命名是通过保留站实现的,保留站为等待发射的指令保留操作数。基本思想:当操作数可用时,保留站马上取操作数并将其缓存,从而避免从寄存器中读操作数;指令执行时直接从保留站中取操作数;当对寄存器的后续写操作在执行过程中发生重叠时,可对寄存器重命名,消除冒险,实现轮序执行。
Tomasulo算法运用了两种不同的技术:寄存器重命名技术和源操作数缓存技术。