Externally, a logic circuit is a simple input-output device:
Of course there can be any number of input wires and any number of output wires.
The input and output values are always either 0 (low voltage) or 1 (high voltage).
Internally, a logic circuit is implemented as a network of logic gates connected by wires.
Logic circuits divide into two neat categories: combinational circuits and sequential circuits.
A combinational circuit has no memory of previous inputs, while a sequential circuit does. The memory capacity of a sequential circuit (measured in bits, bytes, kilobytes, etc.) determines how far back its memory stretches.
Since a combinational circuit has no memory of previous inputs, the output at time t is completely determined by the input at time t. In other words, given the same input on two different occasions, we would expect the same output.
This is not true for a sequential circuit because the output at time t depends on the input at time t and the contents of memory. In other words, the output at time t depends on the inputs at times t, t – 1, t – 2, etc.
The inputs to a combinational circuit above (D) are x, y, and z and the outputs are a, b, and c. There are eight possible inputs to D:
x y z
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
If we focus on just one output, say b, then each of these inputs will cause the value of b to be either 0 or 1. For example:
x y z =>
a b c
0 0 0 1
0 0 1 1
0 1 0 1
0 1 1 0
1 0 0 1
1 0 1 0
1 1 0 1
1 1 1 0
We can think of b as a function of x, y, and z:
b = F(x, y, z)
If we identify 0 with the Boolean value FALSE and 1 with the Boolean value TRUE, then it turns out that F can be represented by a Boolean expression.
We can quickly develop a Boolean expression from a table by forming a disjunction of all combinations of rows that produce a value of 1:
(!x && !y && !z) || (!x && !y && z) || (!x && y && !z) || (x && !y && !z) || (x && y && !z)
After simplifying the expression:
(!x && !y || !z)
We can build a circuit: