What is simple?
Which of the following equivalent expressions are the simplest?
|x ⊕ y||x y' + x' y|
|x ≡ y||x' y' + x y|
|x ⇒ y||x' + y|
|x' + y'||(x y)'|
|x ↑ y||(x y)'|
Simplicity depends on expectation.
Some logicians will write the Sheffer stroke as | which can very confusing to C programmers. Also the official Unicode character NAND looks like this ⊼. For NOR, there is the official Unicode character ⊽, Pierce’s arrow ↓ and Quine’s dagger †.
What is fast?
Which of the following non-equivalent expressions are the most efficient?
|a b c||(a b c)'|
|a b c d e f g h i||(a b c d e f g h i)'|
The form of the efficient implementation may depend on the technology. If the number of inputs to a NAND is limited to three (or four) inputs, a two-level nine-input AND may be faster than a three-level nine-input NAND. Use deMorgan’s law on the following to see why.
- ( (a b c)' + (d e f)' + (g h i)' )'
What can be shared?
Often combinatorial circuits have large numbers of inputs and several outputs. In those cases it is possible for a single output of the AND-plane to be shared by several inputs of the OR-plane. Optimizing circuits like these can be very difficult.
What is easy?
It’s not that hard to lay out a ROM on a chip. It’s quite regular.
Even after 27 years, espresso is considered the standard for in circuit minimization. My on-line espresso CGI script from 1997 will give you a taste of what Duke ECE 512 students were doing a couple of years ago.