There's one more issue we need to deal with before finalizing our signaling specification.
Consider the following combinational system where the upstream combinational device on
the left is trying to send a digital 0 to the downstream combinational device on right.
The upstream device is generating an output voltage just slightly below V_L, which, according
to our proposed signaling specification, qualifies as the representation for a digital 0.
Now suppose some electrical noise slightly changes the voltage on the wire so that the
voltage detected on the input of the downstream device is slightly above V_L,
i.e., the received signal no longer qualifies as a valid digital input and the combinational
behavior of the downstream device is no longer guaranteed.
Oops, our system is behaving incorrectly because of some small amount of electrical noise.
Just the sort of flaky behavior we are hoping to avoid by adopting a digital systems architecture.
One way to address the problem is to adjust the signaling specification so that outputs
have to obey tighter bounds than the inputs, the idea being to ensure that valid output
signals can be affected by noise without becoming invalid input signals.
Can we avoid the problem altogether by somehow avoiding noise?
A nice thought, but not a goal that we can achieve if we're planning to use electrical
components.
Voltage noise, which we'll define as variations away from nominal voltage values, comes from
a variety of sources.
Noise can be caused by electrical effects such as IR drops in conductors due to Ohm's
law, capacitive coupling between conductors, and L(dI/dt) effects caused by inductance
in the component's leads and changing currents.
Voltage deviations can be caused manufacturing variations in component parameters from their
nominal values that lead to small differences in electrical behavior device-to-device.
Voltages can be effected by environmental factors such as thermal noise or voltage effects
from external electromagnetic fields.
The list goes on!
Note that in many cases, noise is caused by normal operation of the circuit or is an inherent
property of the materials and processes used to make the circuits, and so is unavoidable.
However, we can predict the magnitude of the noise and adjust our signaling specification
appropriately.
Let's see how this would work.
Our proposed fix to the noise problem is to provide separate signaling specifications
for digital inputs and digital outputs.
To send a 0, digital outputs must produce a voltage less than or equal to V_OL and to
send a 1, produce a voltage greater than or equal to V_OH.
So far this doesn't seem very different than our previous signaling specification.
The difference is that digital inputs must obey a different signaling specification.
Input voltages less than or equal to V_IL must be interpreted as a digital 0 and input
voltages greater than or equal to V_IH must be interpreted as a digital 1.
The values of these four signaling thresholds are chosen to satisfy the constraints shown
here.
Note that V_IL is strictly greater than V_OL and V_IH is strictly less than V_OH.
The gaps between the input and output voltage thresholds are called the "noise margins."
The noise margins tell us how much noise can be added to a valid 0 or a valid 1 output
signal and still have the result interpreted correctly at the inputs to which it is connected.
The smaller of the two noise margins is called the "noise immunity" of the signaling specification.
Our goal as digital engineers is to design our signaling specifications to provide as
much noise immunity as possible.
Combinational devices that obey this signaling specification work to remove the noise on
their inputs before it has a chance to accumulate and eventually cause signaling errors.
The bottom line: digital signaling doesn't suffer from the problems we saw in our earlier
analog signaling example!