适合流水线的指令集特征:
- 指令长度基本一致,在指令未知的时候就可以取操作数
- 指令格式规整,减少操作步骤,规整流水线
- 采用装入、存储型指令风格
- 指令要对齐存放
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 写指令的内容是前面指令的内容
没有考虑跳转指令和指令之间的依赖关系