Hardware:
Il dato corretto è pronto nella lw alla fine della fase MEM, mentre nel caso di istruzioni R il dato era pronto alla fine della fase EXE.
lw ***$2,*** 40($3)
and $9, ***$2,*** $5
or $10, $6, ***$2***
add $15, ***$2, $2***
Il dato corretto per $2 è pronto nella lw solamente alla fine della fase MEM, all'uscita del registro MEM/WB.
<aside> ⛔ NON posso risolvere la criticità → STALLO
</aside>
<aside> 💡 Devo bloccare l'esecuzione della and e ripeterla un ciclo dopo.
</aside>
Devo rilevare la criticità il prima possibile, in modo da mettere in stallo in tempo la pipeline.
Il primo momento è:
if (ID/EXE.MemRead == 1 && ((IF/ID.rt == ID/EXE.rt) || (IF/ID.rs == ID/EXE.rt))) {
then metti in stallo lo stadio ID (implicitamente anche IF)
}
Implementazione dello Stallo (generazione di una "Bubble")