Entendendo a montagem MIPS com pipelining

Com o pipeline padrão de 5 estágios para a arquitetura MIPS e assumindo que algumas instruções dependem umas das outras, como as bolhas do pipeline são inseridas no código de montagem a seguir?

I1: lw   $1, 0($0)
I2: lw   $2, 4($0)
I3: add  $3, $1, $2      ; I1 & I2 -> I3
I4: sw   $3, 12($0)      ; I3 -> I4
I5: lw   $4, 8($0)
I6: add  $5, $1, $4      ; I1 & I5 -> I6
I7: sw   $5, 16($0)      ; I6 -> I7

Em primeiro lugar em que inserimos uma bolha,

I1:  IF   ID   EX   MEM   WB 
I2:       IF   ID   EX    MEM
I3:            IF   ID    --
I4:                 IF    ID

Como você pode ver, enquanto o I3 está parado, o I4 pode prosseguir para a decodificação. Não é mesmo? Próximo,

I1:  IF   ID   EX   MEM   WB 
I2:       IF   ID   EX    MEM   WB
I3:            IF   ID    --    EX   MEM  WB
I4:                 IF    ID    --   --   EX   MEM   WB
I5:                       IF    ID   EX   MEM  WB 
I6:                             IF   ID   --   EX    MEM   WB
I7:                                  IF   ID   --    --    EX   MEM   WB

Eu acho que isso é possível com o pipeline padrão do MIPS, mas alguns dizem que sempre que uma bolha é inserida, todo o pipeline fica parado. Como isso pode ser descoberto?

questionAnswers(1)

yourAnswerToTheQuestion