MIPS decode i-type instruction

Naive decoding

rs = $22

rt = $21

immediate = -50

Why is there a problem?

We attempt to read from rt, register $21, however it does not contain any value.

The write register is tagged to 15:0 where the immediate value resides as well.

Instead, we want to read from immediate.

Solution

Switch between 20-16 and 15-11, for writing values.

Use a MIPS multiplexer to perform the switching.

As you can see above, we also need to perform MIPS sign extend when we use an intermediate 16-bit value.