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.
espresso?
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.