A bi-directional bus is a set of wires where digital components attach both their inputs and outputs. A digital component can send out their output on a bi-directional bus and it can receive input from the bi-directional bus.
The best known bi-directional bus is the memory bus: the CPU can send data to the memory (writing) and the CPU can receive data from the memory (reading).
Due to some electrical limitations, we will first discuss how bi-directional buses are wired...
The electrical signal (actually: electrical current) always flows from an output to one or more inputs. In the above circuit, the electrical current flows:
In fact, the sources a, b, and c are also outputs: they are outputs of "batteries" that generate a low or a high voltage.
|The red lines in the left figure show examples where an output is connected to an input. This is the "normal" case and it is "safe" to connect an output to an input. Safe means that the circuit does not get damaged by electrical current flowing from the output to the input: the high impedance of the input prevents burn out.|
|The red lines in the left figure show an examples where two inputs are connected together. It is "safe" to connect two inputs together because input ends are passive and do not emit electrical current. In other words, there would be no danger of "burn out" - digital circuits are very delicate things because the connections are very very tiny. Even static electricity from your body can short circuit in a digital circuit imprinted on a chip...|
The red lines in the left figure show
an examples where two outputs
are connected together.
It is an unsafe situation:
output ends are active and they have very low
impedance (i.e., very little protection against current flow.
If you connect the outputs of real digital circuits together - in real life situation - one or both of the circuits will be burned out and it will be completely ruined.
In logic-sim, you will get an error message that outputs are connected together - the circuit will not work.
Run this demo: logic-sim err-output