Compiler construction 数据转发到后续lw指令

Compiler construction 数据转发到后续lw指令,compiler-construction,mips,pipeline,computer-architecture,Compiler Construction,Mips,Pipeline,Computer Architecture,假设我们有两个MIPS指令,一个接一个,就像这样 i1:加上$12、$15、$14 i2:lw$15100$12 在指令1到达MIPS管道中的哪个阶段后,i2的lw能够读取$12?因此,lw会停滞多少次?它需要多少“泡沫”?我不确定lw在不等待12美元更新的情况下能取得多大进展 我猜i1需要首先到达并完成MEM,但我不确定WB是否需要在加载100美元12之前完成 我的理解是MIPS管道是IF-ID-EX-MEM-WB。在以R2000为例的经典MIPS管道中,结果将从一条指令的前一阶段结束时转发到

假设我们有两个MIPS指令,一个接一个,就像这样

i1:加上$12、$15、$14

i2:lw$15100$12

在指令1到达MIPS管道中的哪个阶段后,i2的lw能够读取$12?因此,lw会停滞多少次?它需要多少“泡沫”?我不确定lw在不等待12美元更新的情况下能取得多大进展

我猜i1需要首先到达并完成MEM,但我不确定WB是否需要在加载100美元12之前完成


我的理解是MIPS管道是IF-ID-EX-MEM-WB。

在以R2000为例的经典MIPS管道中,结果将从一条指令的前一阶段结束时转发到下一条指令的前一阶段开始时。对于加载指令,结果从MEM的末尾转发到具有加载延迟槽的R2000的EX的开头;在延迟槽中使用前一条指令的结果寄存器是非法的,除非缓存未命中,否则将读取旧数据。如果不转发,类似R2000的管道将在WB的前半部分写入寄存器,并在ID的后半部分读取寄存器。您是说i1和i2之间确实会出现暂停吗?因为i1的MEM和i2的EX是一致的,但我不认为i2真的使用了它的EX级,因为它不是一个算术指令,在这里可能是完全错误的@PaulA.Clayton对于内存寻址指令,EX阶段通常用于地址生成,例如,将100添加到指令2中的寄存器12。对于示例指令序列,假设标准结果转发,则不会出现暂停。如果i1是lw$12,8$14,那么i2将不得不暂停。负载需要两个周期,而简单的ALU指令需要一个周期。