In computer science syllabus, the term hazards is used in two different topics, which shouldn't be confused with one another.
In Pipelining, hazards are:-
- Structural hazards
- Data hazards
- Branch hazards
These hazards are NOT what this question is about.
In Logic Circuits, hazards are:-
- Static hazards
- Dynamic hazards
- Functional hazards
The question pertains to this topic.
A static hazard is the situation where, when one input variable changes, the output changes momentarily before stabilizing to the correct value. There are two types of static hazards:
- Static-1 Hazard: the output is currently 1 and after the inputs change, the output momentarily changes to 0,1 before settling on 1
- Static-0 Hazard: the output is currently 0 and after the inputs change, the output momentarily changes to 1,0 before settling on 0
In properly formed two-level AND-OR logic based on a Sum Of Products expression, there will be no static-0 hazards.
Conversely, there will be no static-1 hazards in an OR-AND implementation of a Product Of Sums expression.
The most commonly used method to eliminate static hazards is to add redundant logic.
A dynamic hazard is the possibility of an output changing more than once as a result of a single input change.
Dynamic hazards often occur in larger logic circuits where there are different routes to the output and routes have different delays.
Note that if all static hazards have been eliminated from a circuit, then dynamic hazards cannot occur.
// So if a circuit is long enough with different delays, dynamic hazard can occur regardless of whether the constituents of the circuit are Logic Gates or Flip Flops. Option C
Functional hazards are ones occurred by a change applied to more than one input.
There is no specific logical solution to eliminate them. One really reliable method is preventing inputs from changing simultaneously, which is not applicable in some cases.