If an instruction is dependent on another instruction that is also in the pipeline, then the data dependency affects the pipeline. To deal with the negative impact of data dependencies on pipelines, we can use several techniques. Bypassing the value generated by the producer directly to the consumer. All of these techniques are important to understand. Consult your lecture notes or the reference texts for further information.
Control dependencies exist because of branch instructions.
This is a problem for a pipeline because branches are not executed until later in the pipeline, therefore the stages behind the branch might contain instructions that should not be executed, particularly if the branch is taken. All of these techniques are important to understand. Consult your lecture notes and the on-line notes on branch prediction for further information. A structural hazard is the result of an engineering tradeoff in the design of the pipeline. A structural hazard, in essence, is when two different instructions require the same piece of hardware in order to execute.