A lock-up state is a trap. The machine gets into it, usually at power-up or after a glitch, and the next-state logic keeps it there, or keeps it cycling among other bad states, forever. The normal sequence is never reached, and the circuit looks dead.
Lock-up comes from unused states. During design their next states are don't-cares, and the K-map simplification quietly fills each one with a 0 or 1. Nothing forces those choices to lead anywhere sensible. If an unused code happens to point at itself, or two unused codes point at each other, you have a lock-up.
Famous cases:
- A ring counter at
0000shifts zeros around forever. - A johnson counter started in a wrong pattern circles a second, invalid loop.
How to prevent it:
- After choosing equations, check every unused code (see self starting counter).
- If one locks up, choose that don't-care differently, even if it costs a gate.
- Add a reset that forces a valid state at power-up.