Functional Unit | Latency | Initiation Interval |
---|---|---|
Interger ALU | 0 | 1 |
Data memory(数据载入) | 1 | 1 |
FP add | 3 | 1 |
FP multiply | 6 | 1 |
FP divide | 24 | 25 |
**情形一:**由于除法单元没有实现流水化,因此若存在多条除法指令,它们可能竞争除法单元,从而发生结构冒险
**情形二:**由于不同指令的 EXE 阶段用时不同,因此存在多条指令同时进入 MEM 或 WB 阶段的情形,它们竞争数据读写口,从而发生结构冒险
**处理方法一:**跟踪 ID 阶段对写端口的使用,并在一条指令发射之前使其停顿
**处理方法二:**当冒险指令尝试进入 MEM 或 WB 级时,使其停顿
**情形:**由于不同指令的 EXE 阶段用时不同,因此各指令不再按它们发射时的顺序进入 WB 阶段,如果两条指令写内存的目标相同,且后发射的指令先进入 WB 阶段,可能导致数据的错误覆写
**处理方法一:**推迟 fld 指令的发射
**处理方法二:**要求 fadd.d 指令不写入内容(zero write control)
**情形:**同普通流水线的数据冒险,但由于引入浮点单元后,延迟变得更长,所以需要插入的停顿数量更多
ID 阶段的冒险检测与处理
假定处理器在 ID 中进行所有冒险检测,则必须在执行以下三种检查后才能发射指令