There are 4 main steps in the Quine-McCluskey algorithm:
Note: For this course, you are not responsible for Step #1 on this handout: the method for generating all prime implicants of a Boolean function. You can look over this method, but you will be learning, and be responsible for, a more powerful modern prime-generation technique in a few weeks.
In Step #1, the prime implicants of a function are generated using an iterative procedure. In Step #2, a prime implicant table is constructed. The columns of the table are the prime implicants of the function. The rows are minterms of where the function is 1, called ON-set minterms. The goal of the method is to cover all the rows using a minimum-cost cover of prime implicants.
The reduction step (Step #3) is used to reduce the size of the table. This step has three sub-steps which are iterated until no further table reduction is possible! At this point, the reduced table is either (i) empty or (ii) non-empty. If the reduced table is empty, the removed essential prime implicants form a minimum-cost solution. However, if the reduced table is not empty, the table must be ``solved'' (Step #4). The table can be solved using either ``Petrick's method'' or the ``branching method''. This handout focuses on Petrick's method. The branching method is discussed in the books by McCluskey, Roth, etc., but you will not be responsible for the branching method.
The remainder of this handout illustrates the details of the Quine-McCluskey method on 3 examples. Example #1 is fairly straightforward, Examples #2 is more involved, and Example #3 applies the method to a function with ``don't-cares''. But first, we motivate the need for column dominance and row dominance.
There are 5 prime implicants, each of which covers 2 ON-set minterms.
First, we note that two implicants are essential prime
implicants:
and
. These implicants must be
added to the final cover. There are 3 remaining prime implicants.
We must pick a minimum subset of these to cover the uncovered
ON-set minterms.
Here is the prime implicant table for the Karnaugh map. The 5 prime implicants are listed as columns, and the 6 ON-set minterms are listed as rows.
| (0,4) | (4,5) | (5,13) | (13,15) | (11,15) | |
| 0 | X | ||||
| 4 | X | X | |||
| 5 | X | X | |||
| 11 | X | ||||
| 13 | X | X | |||
| 15 | X | X |
We cross out columns
and
and mark them with asterisks, to indicate that these
are essential. Each row intersected by one of these columns
is also crossed out, because that minterm is now covered.
At this point, prime implicant
covers 2 remaining ON-set
minterms (
and
). However, prime implicant
covers only one of these (namely,
), as does
(namely,
).
Therefore we can always use
instead of either
or
, since it covers the same minterms.
That is,
column-dominates
, and
column-dominates
. The dominated prime implicants can
be crossed out, and only column
remains.
Consider the following Karnaugh map of a 4-input Boolean function:
There are 4 prime implicants:
,
,
and
.
None of these is an essential prime implicant.
We must pick a minimum subset of these to cover the 5 ON-set minterms.
Here is the prime implicant table for the Karnaugh map.
The 4 prime implicants are listed as columns, and the 5 ON-set
minterms are listed as rows.
| (1,2,3) | (1,5) | (1,3,5,7) | (2,3,7) | |
| 1 | X | X | X | |
| 2 | X | X | ||
| 3 | X | X | X | |
| 5 | X | X | ||
| 7 | X | X |
Note that row 3 is contained in three columns:
,
, and
.
Row 2 is covered by two of these three columns:
and
,
and row 7 is also covered by two of these three columns:
and
. In this case, any prime implicant which contains
row 2 also contains row 3. Similarly, any prime implicant
which contains row 7 also contains row 3. Therefore,
we can ignore the covering of row 3: it will always be
covered as long as we cover row 2 or row 7. To see this,
note that row 3 row dominates row 2, and row 3
row dominates row 7. The situation is now the reverse
of column dominance: we cross out the dominating (larger) row.
In this case, row 3 can be crossed out; it no longer needs to
be considered.
Similarly, row 1 row dominates row 5. Therefore row 1 can be crossed out. We are guaranteed that row 1 will still be covered, since any prime implicant which covers row 5 will also cover row 1.
The Notation. The above notation is a shorthand to describe the
Karnaugh map for
. First, it indicates that
is a Boolean function
of 4 variables:
,
,
, and
. Second, each
ON-set minterm of
is listed above,
that is, minterms where the function is 1:
,
,
,
.
Each of these numbers corresponds to one entry (or square) in the Karnaugh
map. For example, the decimal number
corresponds to the minterm
,
(
is the binary representation of
). That is,
is
an ON-set minterm of
; i.e., it is a 1 entry.
All remaining minterms, not listed above, are assumed to be 0.
Note: You should learn this basic method for generating prime implicants (Step #1), but I will not ask you to reproduce it. See Roth book on reserve for more details. (Instead, you will soon learn the more advanced fast recursive algorithm for prime generation.)
| Column I | ||
| 0 | 0000 | |
| 2 | 0010 | |
| 8 | 1000 | |
| 5 | 0101 | |
| 6 | 0110 | |
| 10 | 1010 | |
| 12 | 1100 | |
| 7 | 0111 | |
| 13 | 1101 | |
| 14 | 1110 | |
| 15 | 1111 | |
A check (
) is written next to every minterm which can combined
with another minterm.
| Column I | Column II | |||||||||
| 0 | 0000 | (0,2) | 00-0 | |||||||
| 2 | 0010 | (0,8) | -000 | |||||||
| 8 | 1000 | (2,6) | 0-10 | |||||||
| 5 | 0101 | (2,10) | -010 | |||||||
| 6 | 0110 | (8,10) | 10-0 | |||||||
| 10 | 1010 | (8,12) | 1-00 | |||||||
| 12 | 1100 | (5,7) | 01-1 | |||||||
| 7 | 0111 | (5,13) | -101 | |||||||
| 13 | 1101 | (6,7) | 011- | |||||||
| 14 | 1110 | (6,14) | -110 | |||||||
| 15 | 1111 | (10,14) | 1-10 | |||||||
| (12,13) | 110- | |||||||||
| (12,14) | 11-0 | |||||||||
| (7,15) | -111 | |||||||||
| (13,15) | 11-1 | |||||||||
| (14,15) | 111- | |||||||||
A check (
) is written next to every product which can combined
with another product.
| Column I | Column II | Column III | ||||||||
| 0 | 0000 | (0,2) | 00-0 | (0,2,8,10) | -0-0 | |||||
| 2 | 0010 | (0,8) | -000 | (0,8,2,10) | -0-0 | |||||
| 8 | 1000 | (2,6) | 0-10 | (2,6,10,14) | -10 | |||||
| 5 | 0101 | (2,10) | -010 | (2,10,6,14) | -10 | |||||
| 6 | 0110 | (8,10) | 10-0 | (8,10,12,14) | 1-0 | |||||
| 10 | 1010 | (8,12) | 1-00 | (8,12,10,14) | 1-0 | |||||
| 12 | 1100 | (5,7) | 01-1 | (5,7,13,15) | -1-1 | |||||
| 7 | 0111 | (5,13) | -101 | (5,13,7,15) | -1-1 | |||||
| 13 | 1101 | (6,7) | 011- | (6,7,14,15) | -11- | |||||
| 14 | 1110 | (6,14) | -110 | (6,14,7,15) | -11- | |||||
| 15 | 1111 | (10,14) | 1-10 | (12,13,14,15) | 11- | |||||
| (12,13) | 110- | (12,14,13,15) | 11- | |||||||
| (12,14) | 11-0 | |||||||||
| (7,15) | -111 | |||||||||
| (13,15) | 11-1 | |||||||||
| (14,15) | 111- | |||||||||
Column III contains a number of duplicate entries, e.g. (0,2,8,10) and (0,8,2,10). Duplicate entries appear because a product in Column III can be formed in several ways. For example, (0,2,8,10) is formed by combining products (0,2) and (8,10) from Column II, and (0,8,2,10) (the same product) is formed by combining products (0,8) and (2,10).
Duplicate entries should be crossed out.
The remaining unchecked products cannot be combined with other products. These
are the prime implicants: (0,2,8,10), (2,6,10,14), (5,7,13,15), (6,7,14,15), (8,10,12,14) and
(12,13,14,15); or, using the usual product notation:
,
,
,
,
and
.
| (0,2,8,10) | (2,6,10,14) | (5,7,13,15) | (6,7,14,15) | (8,10,12,14) | (12,13,14,15) | |
| 0 | X | |||||
| 2 | X | X | ||||
| 5 | X | |||||
| 6 | X | X | ||||
| 7 | X | X | ||||
| 8 | X | X | ||||
| 10 | X | X | X | |||
| 12 | X | X | ||||
| 13 | X | X | ||||
| 14 | X | X | X | X | ||
| 15 | X | X | X |
| (0,2,8,10) | (2,6,10,14) | (5,7,13,15) | (6,7,14,15) | (8,10,12,14) | (12,13,14,15) | |
| X | ||||||
| 2 | X | X | ||||
| X | ||||||
| 6 | X | X | ||||
| 7 | X | X | ||||
| 8 | X | X | ||||
| 10 | X | X | X | |||
| 12 | X | X | ||||
| 13 | X | X | ||||
| 14 | X | X | X | X | ||
| 15 | X | X | X |
In step #1, primary essential prime implicants are identified.
These are implicants which will appear in any solution.
A row which is covered by only 1 prime implicant is called
a distinguished row. The prime implicant which covers it
is an essential prime implicant.
In this step, essential prime implicants are identified and removed.
The corresponding column is crossed out. Also, each row where the column
contains an
is completely crossed out, since these minterms are now covered.
These essential implicants will be added to the final solution.
In this example,
and
are both primary essentials.
The table is simplified by removing rows and columns which were crossed out in step (i). (Note: you do not need to do this, but it makes the table easier to read. Instead, you can continue to mark up the original table.)
| (2,6,10,14) | (6,7,14,15) | (8,10,12,14) | (12,13,14,15) | |
| 6 | X | X | ||
| 12 | X | X | ||
| 14 | X | X | X | X |
Row 14 dominates both row 6 and row 12. That is, row 14 has an ``X'' in every column where row 6 has an ``X'' (and, in fact, row 14 has ``X'''s in other columns as well). Similarly, row 14 has in ``X'' in every column where row 12 has an ``X''. Rows 6 and 12 are said to be dominated by row 14.
A dominating row can always be eliminated. To see this, note that every product which covers row 6 also covers row 14. That is, if some product covers row 6, row 14 is guaranteed to be covered. Similarly, any product which covers row 12 will also cover row 14. Therefore, row 14 can be crossed out.
| (2,6,10,14) | (6,7,14,15) | (8,10,12,14) | (12,13,14,15) | |
| 6 | X | X | ||
| 12 | X | X |
Column
dominates column
. That is, column
has an ``X'' in
every row where column
has an ``X''. In fact, in this example, column
also dominates column
, so each is dominated by the other.
(Such columns are said to co-dominate each other.)
Similarly, columns
and
dominate each other,
and each is dominated by the other.
A dominated column can always be eliminated. To see this, note that
every row covered by the dominated column is also covered by the dominating column.
For example,
covers every row which
covers. Therefore, the dominating column
can always replace the dominated column, so the dominated column is crossed out.
In this example,
and
dominate each other, so either column can be crossed out
(but not both). Similarly,
and
dominate each other, so either column can be crossed out.
| (2,6,10,14) | (8,10,12,14) | |
| ( |
X | |
| ( |
X |
In iteration #2 and beyond, secondary essential prime implicants are identified. These are implicants which will appear in any solution, given the choice of column-dominance used in the previous steps (if 2 columns co-dominated each other in a previous step, the choice of which was deleted can affect what is an ``essential'' at this step). As before, a row which is covered by only 1 prime implicant is called a distinguished row. The prime implicant which covers it is a (secondary) essential prime implicant.
Secondary essential prime implicants are identified and removed.
The corresponding columns are crossed out. Also, each row where the column
contains an
is completely crossed out, since these minterms are now covered.
These essential implicants will be added to the final solution.
In this example, both
and
are secondary essentials.
No other rows remain to be covered, so no further steps are required.
Therefore, the minimum-cost solution consists of the primary and secondary
essential prime implicants
,
,
and
:
Use the method described in Example #1.
| 0 | X | X | X | ||||||
| 2 | X | X | X | X | |||||
| 3 | X | X | |||||||
| 4 | X | X | X | X | |||||
| 5 | X | X | |||||||
| 6 | X | X | X | ||||||
| 7 | X | X | |||||||
| 8 | X | X | X | X | |||||
| 9 | X | X | |||||||
| 10 | X | X | X | ||||||
| 11 | X | X | |||||||
| 12 | X | X | X | ||||||
| 13 | X | X |
There are no primary essential prime implicants: each row is covered by at least two products.
| 0 | X | X | X | ||||||
| 2 | X | X | X | X | |||||
| 3 | X | X | |||||||
| 4 | X | X | X | X | |||||
| 5 | X | X | |||||||
| 6 | X | X | X | ||||||
| 7 | X | X | |||||||
| 8 | X | X | X | X | |||||
| 9 | X | X | |||||||
| 10 | X | X | X | ||||||
| 11 | X | X | |||||||
| 12 | X | X | X | ||||||
| 13 | X | X |
There are many instances of row dominance. Row 2 dominates 3, 4 dominates 5, 6 dominates 7, 8 dominates 9, 10 dominates 11, 12 dominates 13. Dominating rows are removed.
| 0 | X | X | X | ||||||
| 3 | X | X | |||||||
| 5 | X | X | |||||||
| 7 | X | X | |||||||
| 9 | X | X | |||||||
| 11 | X | X | |||||||
| 13 | X | X |
Columns
,
and
each dominate one another.
We can remove any two of them.
|
|
|||||||
| ( |
X | ||||||
| 3 | X | X | |||||
| 5 | X | X | |||||
| 7 | X | X | |||||
| 9 | X | X | |||||
| 11 | X | X | |||||
| 13 | X | X |
Product
is a secondary essential prime implicant; it is removed from the table.
No further row dominance is possible.
No further column dominance is possible.
| 3 | X | X | ||||
| 5 | X | X | ||||
| 7 | X | X | ||||
| 9 | X | X | ||||
| 11 | X | X | ||||
| 13 | X | X |
There are no additional secondary essential prime implicants, and no further row- or column-dominance is possible. The remaining covering problem is called a cyclic covering problem. A solution can be obtained using one of two methods: (i) Petrick's method or (ii) the branching method. We use Petrick's method below; see Devadas et al. and Hachtel/Somenzi books for a discussion of the branching method.
In Petrick's method, a Boolean expression
is formed which describes all possible
solutions of the table. The prime implicants in the table are numbered in order, from
1 to 6:
,
,
,
,
,
.
For each prime implicant
,
a Boolean variable
is used which is true whenever prime implicant
is included in the solution.
Note the difference!:
is an implicant, while
is a
corresponding Boolean proposition (i.e., true/false statement)
which has a true (1) or false (0) value.
means ``I select prime implicant
for inclusion in the cover'',
while
means ``I do not select prime implicant
for
inclusion in the cover.
Using these
variables, a larger Boolean expression
can be formed,
which captures the precise conditions for every row in the table
to be covered. Each clause in
is a disjunction (OR)
of several possible column selections to cover a particular row. The
conjunction (AND) of all of these clauses is the Boolean
expression
, which describes precisely the conditions
to be satisfied for all rows are covered.
For the above prime implicant table, the covering requirements can be captured by the Boolean equation:
If Boolean variable
,
each of the disjunctive clauses is satisfied (1),
and all rows are covered. In this case, the set of
which are 1
indicate a valid cover using the corresponding
selection of primes
(columns).
If
, then at least one disjunctive clause
is not satisfied (0), meaning that at least one row is not covered.
In this case, the set of
which are 1 correspond
to a set of selected primes
which do not form
a valid cover. Note that the above equation is simply
a rewriting of the prime implicant table as a Boolean formula:
the clauses correspond to the rows.
In the right expression,
the sum
describes the covering requirement for row 3: product
or
must be included in the solution, in order to cover row 3. Similarly,
the sum
describes the covering requirement for row 5: product
or
must be included to cover row 5. Each sum corresponds to a different
row of the table. These sums are ANDed together, since all such requirements
must be satisfied.
Since
is a Boolean expression, it can be multiplied out into sum-of-products form:
Each product describes a solution for the table. Only two products have 3 Boolean
variables; the remainder have 4 variables. These two products,
and
, describe two minimal solutions. The first product describes a solution
which includes prime implicants
,
and
; that is,
,
and
.
The second product describes a solution using prime implicants
,
and
;
that is,
,
and
.
Both solutions have a minimal number of prime implicants, so either can be used.
With either choice, we must include the secondary essential prime implicant,
, identified
earlier. Therefore, the two minimum-cost solutions are:
The don't-cares are included when generating prime implicants.
Note: As indicated earlier, you should learn this basic method for generating prime implicants (Step #1), but I will not ask you to reproduce it. See Roth book on reserve for more details. (Instead, you will soon learn the more advanced fast recursive algorithm for prime generation.)
| Column I | ||
| 1 | 0001 | |
| 2 | 0010 | |
| 3 | 0011 | |
| 9 | 1001 | |
| 10 | 1010 | |
| 7 | 0111 | |
| 11 | 1011 | |
| 13 | 1101 | |
| 15 | 1111 | |
A check (
) is written next to every minterm which can combined
with another minterm.
| Column I | Column II | |||||||||
| 1 | 0001 | (1,3) | 00-1 | |||||||
| 2 | 0010 | (1,9) | -001 | |||||||
| 3 | 0011 | (2,3) | 001- | |||||||
| 9 | 1001 | (2,10) | -010 | |||||||
| 10 | 1010 | (3,7) | 0-11 | |||||||
| 7 | 0111 | (3,11) | -011 | |||||||
| 11 | 1011 | (9,11) | 10-1 | |||||||
| 13 | 1101 | (9,13) | 1-01 | |||||||
| 15 | 1111 | (10,11) | 101- | |||||||
| (7,15) | -111 | |||||||||
| (11,15) | 1-11 | |||||||||
| (13,15) | 11-1 | |||||||||
A check (
) is written next to every product which can combined
with another product.
| Column I | Column II | Column III | ||||||||
| 1 | 0001 | (1,3) | 00-1 | (1,3,9,11) | -0-1 | |||||
| 2 | 0010 | (1,9) | -001 | (2,3,10,11) | -01- | |||||
| 3 | 0011 | (2,3) | 001- | (3,7,11,15) | -11 | |||||
| 9 | 1001 | (2,10) | -010 | (9,11,13,15) | 1-1 | |||||
| 10 | 1010 | (3,7) | 0-11 | |||||||
| 7 | 0111 | (3,11) | -011 | |||||||
| 11 | 1011 | (9,11) | 10-1 | |||||||
| 13 | 1101 | (9,13) | 1-01 | |||||||
| 15 | 1111 | (10,11) | 101- | |||||||
| (7,15) | -111 | |||||||||
| (11,15) | 1-11 | |||||||||
| (13,15) | 11-1 | |||||||||
The unchecked products cannot be combined with other products. These
are the prime implicants: (1,3,9,11), (2,3,10,11), (3,7,11,15) and
(9,11,13,15); or, using the usual product notation:
,
,
and
.
The don't-cares are omitted when constructing the prime implicant table, since they do not need to be covered.
| (1,3,9,11) | (2,3,10,11) | (3,7,11,15) | (9,11,13,15) | |
| 2 | X | |||
| 3 | X | X | X | |
| 7 | X | |||
| 9 | X | X | ||
| 11 | X | X | X | X |
| 13 | X |
| (1,3,9,11) | (2,3,10,11) | (3,7,11,15) | (9,11,13,15) | |
| 2 | X | |||
| 3 | X | X | X | |
| ( |
X | |||
| 9 | X | X | ||
| 11 | X | X | X | X |
| ( |
X |
The essential prime implicants cover all the rows, so no further steps
are required. Therefore, the minimum-cost solution consists of the essential
prime implicants
,
and
: