| Control unit | |||||||||||||
| How to control the datapath? | |||||||||||||
| Need to generate the control signals for MUXes, registers, and memory | |||||||||||||
| Look at instruction formats | |||||||||||||
| R-type | 000000 | $rs | $rt | $rd | shamt | function | |||||||
| b31-26 | b25-21 | b20-16 | b15-11 | b10-6 | b5-0 | ||||||||
| memory | 35 or 43 | $rs | $rt | address | |||||||||
| b31-26 | b25-21 | b20-16 | b15-0 | ||||||||||
| branch | 4 | $rs | $rt | address | |||||||||
| b31-26 | b25-21 | b20-16 | b15-0 | ||||||||||
| Observations: | |||||||||||||
| Opcode is always in upper 6 bits: Op[5-0], function in lower 6 bits: F[5-0] | |||||||||||||
| Use to select operation to perform | |||||||||||||
| Registers to read ($rs, $rt) always in bits 25-21 and 20-16 | |||||||||||||
| Use as indexes to register file for read | |||||||||||||
| Base register for load/store always in bits 25-21 | |||||||||||||
| Offset always in bits 15-0 | |||||||||||||
| Destination register may be in 2 places: | |||||||||||||
| bits 15-11 for R-type | |||||||||||||
| bits 20-16 for load | |||||||||||||
| Use as index to register file to write: need MUX to select | |||||||||||||