Extending MIPS datapath to implement SLL and SRL

  • Thread starter izelkay
  • Start date
  • Tags Tags
    Mips
1 reply · 5K views · last reply
izelkay
Messages
115
Reaction score
3

Homework Statement


Here's the datapath:
Single-cycle MIPS datapath diagram with PC, instruction memory, register file, sign extend, ALU, data memory, and control signals including RegDst, ALUSrc, MemtoReg, RegWrite, MemRead, MemWrite, PCSrc, and ALUOp.


So this seems like a pretty common question but I can't seem to find any answers on how to extend the datapath to implement SLL and SRL.

The Attempt at a Solution



This is how I would think to do it but I'm not entirely sure:

It would need another mux right next to Read data 1 next to the register file. This mux would take Read data 1 (rs) and Read data 2 (rt) as inputs. It would select Read data 1 if we're not doing a shift operation, and it would select rt if we ARE doing a shift operation (since sll and srl use rt, not rs). This would then be fed into the ALU.

Next, we would need to branch Instruction[10:6] (the shift amount) off of Instruction[15:0], and Instruction[10:6] would then be fed into the other port of the ALU. Is this correct thinking?
 
It looks like I'd actually need to feed Instruction[10:6] and Instruction[15:0] into another Mux and have it select Instruction[10:6] when I want to shift, which will then be sent through the sign extender and into the ALU when ALUSrc is set to 1. Right? Anyone?