A Moore machine is a finite state machine whose outputs depend only on the current state — never directly on the inputs. The output for each state is fixed; inputs only affect which state you transition to next.

The contrast is the Mealy machine, whose outputs depend on both state and inputs.

Structure

Same general layout as a Mealy machine: combinational logic computes the next state from current state + inputs; flip-flops hold the state; another piece of combinational logic computes the outputs. The difference is what feeds the output logic — for Moore, only the state.

The cyan “input → output” path that’s present in a Mealy machine is absent in a Moore machine.

Trade-offs vs Mealy

Pros of Moore:

  • Glitch-free outputs. Outputs only change at clock edges (when the state register updates), so they’re stable for a full clock cycle. Easy to interface with other clocked logic.
  • Easier to verify. Each state has a clear output — write the state diagram, label each state with its output, done.

Cons of Moore:

  • More states. Often needs more states than an equivalent Mealy machine because it can’t react instantly to inputs — it has to transition into a new state first to change the output.
  • One cycle of latency. Output reflects the state, which reflects last cycle’s input. Mealy can react to inputs combinationally within the same cycle.

Worked example

Consider the goal “output Z = 1 whenever the input has been 1 for two consecutive cycles.” Moore version:

  • State A: just reset / no recent 1s. Output Z = 0.
  • State B: input was 1 last cycle. Output Z = 0.
  • State C: input has been 1 for two cycles in a row. Output Z = 1.

Each state has its own output value baked in. Transitions: from A, input=1 goes to B; from B, input=1 goes to C; from C, input=1 stays at C; any state with input=0 goes back to A.

Compare with the Mealy version of the same problem (see Sequence detector (FSM design example)) — it can use one fewer state because the output can fire combinationally on the input that completes the sequence.

When to choose Moore

Default to Moore when:

  • Outputs need to drive external clocked devices (to avoid glitches).
  • The verification team or specifications expect “this state means this output.”
  • Latency tolerance is a cycle or more.

Choose Mealy when:

  • Output latency matters and you need the output to reflect inputs in the same cycle.
  • State count matters more than output cleanness.

In practice, hybrid machines are common — most outputs are Moore (registered), with a few Mealy outputs added where latency dictates. Synthesis tools handle both seamlessly.