适合流水线的指令集特征:

  1. 指令长度基本一致,在指令未知的时候就可以取操作数
  2. 指令格式规整,减少操作步骤,规整流水线
  3. 采用装入、存储型指令风格
  4. 指令要对齐存放
ADD:
Ifetch Dec/reg exec Wr(reg)

lw:
Ifetch Dec/reg exec Mem(r) Wr(reg)

sw:
Ifetch Dec/reg exec Mem(w)

于是分成 5 个步骤

Ifetch Dec/reg exec Mem Wr

而且为了中间结果的状态稳定和最后写入操作的有效,中间需要添加额外的寄存器组来保存中间状态

  • 指令长度一致
  • 格式少,且源寄存器位置相同,有利于在指令未知的时候就可以取操作数
  • l s 指令才能访问存储器,减少操作步骤,规整流水线
  • 内存中对齐存放,有利于减少访存次数

流水段寄存器中存储内容:一类是后面阶段需要用到的所有数据信息,包括 PC+4、指令、立即数、目的寄存器、转移目标地址、ALU 运算结果、标志信息等,它们是前面阶段在数据通路中执行的结果;还有一类是前面传递过来的后面各阶段要用到的所有控制信号。

流水线充满状态,每个时钟周期都会产生一个输出,所以有等效的时钟周期为 1,CPI 为 1

RegWr 写指令的内容是前面指令的内容

没有考虑跳转指令和指令之间的依赖关系