数据冒险中的Forwarding与Stall

96 阅读1分钟

image.png 如图所示的流水线处理器,其中整数和浮点数有各自的Register File,而针对加载和储存操作,浮点数和整数共用上边的同一条流水线。

EX/ME1, ME1/ME2, ME2/WB的输出向EX阶段开始位置前馈数据,与ID/EX的输出通过MUX进行选择后输入EX。

ME2/WB, FP4/WB的输出向FP1阶段的开始位置前馈数据,与ID/FP1的输出通过MUX进行选择后输入FP1。

现在开始考虑RAW数据冒险。

针对整数lw指令,必须等到访存结束后才能前馈,即只能使用ME2/WB向EX的这条前馈路线,因此中间两个时钟需要暂停处理,若Register File位于ID2,则要检查ID/EX和EX/ME1的输出是否与IF2/ID相等。针对浮点数的lw指令同理。

针对浮点数则要检查ID2/FP1, FP1/FP2, FP2/FP3。