MIPS通常包含5个步骤,5级流水:
1.存储器取指令
2.指令译码同时读寄存器
3.执行操作或计算地址
4.在数据存储器中读取操作数
5.结果写回寄存器
针对流水线设计的指令集:
1.所有指令具有相同的长度。简化了取指令和指令译码。x86中指令长度不等。
2.只有几种指令格式。每条指令源寄存器字段保持不变。确保指令类型确定的同时,读取寄存器堆。否则,需要把译码和读寄存器堆分级。
3.堆内存的操作仅出现在存取操作中。意味着在指令执行级得到的内存地址,可以接着在下一级访问内存。
4.内存中操作数必须对齐。
流水线冒险:
冒险:在下一个时钟周期中下一条指令不能执行。
1.结构冒险。硬件不支持多条指令在同一时钟周期内执行。
2.数据冒险。一个操作必须等待另一个操作完成后才能执行时,流水线必须停顿。解决方法:数据定向/旁路。
3.控制冒险。处理器需要根据一条指令的结果做出决策,其它指令可能还在执行中。解决方法:分支预测/延迟决定。