This is a Data Hazard or an instruction in the pipeline must wait for second instruction to complete to produce the data needed by the first instruction.
What if we used the ALU to increment the PC
This is a Structural Hazard or two instructions need the same hardware to execute
We have a single structural hazard, the register file
We declare that instructions in WB save the data during the first half of the instruction cycle
Then instructions in ID can access the data in the second half of the instruction cycle.
Trace the following
beq $t1, $t2, done
lw $t2, 100($t2)
This is a Control Hazard which occurs when it is not known if the instruction(s) following a conditional branch should be executed or not.
In addition, unless we are careful, we can have control hazards following unconditional jumps as well