择两个ALU操作数A、B并确定目标寄存器。
另外数据转发也在该级完成。数据转发控制电路产生ForwardA和ForwardB两组控制信号。
4MEM级存储器访问级。只有在执行LW、SW指令时才对存储器进行读写对其他指令只起到一个周期的作用。该级只需存储器写操作允许信号MemWrite。
5WB级写回级。该级把指令执行的结果回写到寄存器文件中。该级设置信号MemtoReg和寄存器写操作允许信号RegWrite其中MemtoReg决定写入寄存器的数据来自于MEM级上的缓冲值或来自于MEM级上的存储器。
2数据相关与数据转发
如果上一条指令的结果还没有写入到寄存器中而下一条指令的源操作数又恰恰是此寄存器的数据那么它获得的将是原来的数据而不是更新后的数据。这样的相关问题称数据相关。在设计中采用数据转发和插入流水线气泡的方法解决此类相关问题。
1三阶数据相关与转发
转发条件为操作数A、B同时满足
①WB级指令是写操作即RegWrite_wb1
②WB级指令写回的目标寄存器不是0即RegWriteAddr_wb≠0
③WB级指令写回的目标寄存器与在ID级指令的源寄存器是同一寄存器即RegWriteAddr_wbRsAddr_id或RegWriteAddr_wbRtAddr_id。
2二阶数据相关与转发MEM冒险
转发条件
①WB级指令是写操作即RegWrite_wb1
②WB级指令写回的目标寄存器不是0即RegWriteAddr_wb≠0
③WB级指令写回的目标寄存器与在EX级指令的源寄存器是同一寄存器即RegWriteAddr_wbRsAddr_ex或RegWriteAddr_wbRtAddr_ex
④EX冒险不成立即RegWriteAddr_mem≠RsAddr_ex或
RegWriteAddr_memRtAddr_ex。
3一阶数据相关与转发EX冒险
转发条件ForwardA、ForwardB作为数据选择器的地址信号转发条件不成立时ALU操作数从IDEX流水线寄存器中读取转发条件成立时ALU操作数取自数据旁路。
转发条件
①MEM级指令是写操作即RegWrite_mem1
②MEM级指令写回的目标寄存器不是0即RegWriteAddr_mem≠0
③MEM级指令写回的目标寄存器与在EX级指令的源寄存器是同一寄存器即
RegWriteAddr_memRsAddr_ex或RegWriteAddr_memRtAddr_ex。
3数据冒险与数据转发
f这类冒险不同于数据相关冒险需要单独一个“冒险检测单元HazardDetector”它在ID级完成。
冒险成立的条件为
①上一条指令是lw指令即MemRead_ex1
②在EX级的lw指令与在ID级的指令读写的是同一个寄存器即
RegWriteAddr_exRsAddr_id或RegWriteAddr_exRtAddr_id。
冒险的解决
为解决数据冒险我们引入流水线阻塞。当HazardDetector检测到冒险条件成立时在lw指令和下一条指令之间插入阻塞即流水线气泡bubble使后一条指令延迟一个时钟周期执行这样就将该冒险转化为二阶数据相关可用转发解决。如图所示
流水线气泡的引入
需要注意的是如果处于ID级r