A satisfiability don't-care is an input combination the environment never produces. An observability don't-care is a combination whose output nobody reads.
Both let the optimiser pick whichever output value gives the smaller cover. The care set is everything else, where the function must stay exact.
Kind | Meaning | Example |
|---|---|---|
Satisfiability | Input never arrives | One-hot bus with an all-zero code that never occurs |
Observability | Output never read under some condition | ALU flag ignored when the opcode is a move |
Take a 3-input function with ON-set {111, 110} and don't-care set {101, 100}. Treating the don't-cares as 1 gives a single product term.
The calc block counts the cover with and without the don't-cares. Without them the two minterms still merge; the don't-cares widen the term by dropping a literal.
3 inputs -> 8 minterms
ON-set: 110, 111 (2 minterms)
DC-set: 100, 101 (2 minterms)
OFF-set: 000, 001, 010, 011 (4 minterms)
2 + 2 + 4 = 8 minterms
without DC: 110 + 111 merge to 11x = ab (1 term, 2 literals)
with DC: 1xx merges to 1-- = a (1 term, 1 literal)
literal saving = 2 - 1 = 1 literalA wrong care set is a functional bug, not a missed optimisation. If the environment ever produces a combination marked unreachable, the hardware answers with whatever the minimiser chose.
The circuit answers with the minimiser's arbitrary choice. The function is wrong for that input.
The single term ab: both minterms share a = 1, b = 1 and differ only in c.