Many of the books you find on digital design take too much of an engineering approach to it, and there isn't all that much information on the internet about logic design or digital logic design, so this is my attempt to fill that void.
Please note that the subject of digital logic design is very vast and complex, so this article/tutorial will be branched to better cover select topics in related pages, as to keep this one focused and easy to follow.
One of the good things about logic design and digital circuits in general, is that you don't really have to know the underlying "analog" electronics on which the digital circuits are implemented, as they function as combinations of functional blocks.
A very good start on digital logic design is understanding the very basic building blocks: logic gates [click to go to article].
Logic gates perform three basic functions on which all digital operations are performed, and have been named according to their corresponding speech words: AND, OR and NOT.
Basic and not so basic but "one step" circuits are created with combinations of those simple gates, and so these kinds of circuits are called combinational circuits.
To design a combinational circuit to solve a problem, you have to come up with a combination of logic gates that will give the output you want given some conditions you specify.
For example, say you want to simulate a voting system where 3 judges vote on a candidate to pass to the next stage of a contest, but only if at least two out of the three judges vote on them.
This one is simple enough, there are four conditions on which the contestant goes to the next level:
- Judge A AND B vote in favor, judge C votes against
OR - Judge B AND C vote in favor, judge A votes against
OR - Judge C AND A vote in favor, judge B votes against
OR - Judge A AND B AND C vote in favor.
By defining the conditions in words, you can easily find when to use each type of gate. Also note that in most cases, if you require a false condition, such as a judge voting against in this example, you use a NOT gate to use after the input, as in transforming a vote against into a vote NOT in favor.
When a combinational problem needs many inputs or has many conditions, the use of a truth table [article pending, click to search in google] and karnaugh maps [article pending, click to search in google] to reduce the number of conditions necessary make it easier to design them.
In the next part of this article, we'll cover sequential logic, introducing flip flops and the use of clock signals to synchronize the operation of the whole circuit.