What is best?

What is simple?

Which of the following equivalent expressions are the simplest?

xyx y' + x' y
xyx' y' + x y
xyx' + y
x' + y'(x y)'
xy(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.

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.