Sintesi

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>

Soluzione

<aside> 💡 Devo bloccare l'esecuzione della and e ripeterla un ciclo dopo.

</aside>

Rilevazione della criticità

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)
}

Stallo della pipeline

Implementazione dello Stallo (generazione di una "Bubble")