Quiz submission record for quiz6-1-1 at Mon Jul 26 02:26:39 2004: Your Answer for Question 1: If we didn't pipeline our control, i.e. do not save the control signals into the pipeline registers between stages, we'd only have the control signals for the instruction currently being decoded. Many many bad things can happen if we don't pipeline (save) our control signals because we might write to a register when we're not supposed to, take the wrong branch, select the wrong value to put into the ALU, etc. Your Answer for Question 2: The first value that goes into the mux is the value from the register file. We'd select it in any leading instruction that reads from a register, such as add $t0, $t1, $t2. The second value is the value forwarded from the data memory or an earlier ALU result. Any RAW dependency that are two instructions apart will cause this value to be used, such as add $t0, $t1, $t2 sub $t3, $t4, $t5 slt $t6, $t0, $t7 # needs $t0 from add The third value is the value forwarded from a prior ALU result. We select this when we have consecutive RAW dependency, such as: add $t0, $t1, $t2 sub $t3, $t0, $t4 # needs $t0 from add Your Answer for Question 3: The hazard unit inserts bubbles by setting all the control signals to 0 to allow prior instructions to evaluate one step further for future forwarding. Setting the control signals to 0 causes nothing to be written to the registers and memory, essentially repeating a certain clock cycle once more (called a stall). The hazard detection unit inserts bubbles only under the condition that an instruction needs the result from a lw, but it allows the lw instruction to continue evaluation, so it only needs to insert bubbles once for each load. If for some reason we had lw $t0, 0($s0) lw $t1, 0($t0) lw $t2, 0($t1) ... etc. then we'd insert multiple bubbles, but they wouldn't be the same one. Your unique submission ID is quiz6-1-1-cs61c-ck-1090833999-2965.