A Mealy output depends on state and inputs, so it can answer in the same cycle. A Moore output depends on state alone, so it waits for the state to move first.
Kind | Depends on | Timing shape | Cost |
|---|---|---|---|
Mealy | State and inputs | Input-to-output combinational path | Fast response, harder output timing. |
Moore | State only | Flop-to-output path | One-cycle lag, cleaner timing. |
Registered | State, held a cycle | Flop-to-flop path | Extra cycle of latency, best slack. |
A registered output breaks the input-to-output path into two flop-to-flop stages. Arrival falls, so slack rises by the same amount.
EXAMPLE parameters (illustrative): clock 100 MHz, so period 10 ns; downstream setup 0.5 ns
required = period - setup = 10 - 0.5 = 9.5 ns
Mealy input-to-output arrival 7 ns (stated EXAMPLE parameter)
Mealy slack = required - arrival = 9.5 - 7 = 2.5 ns
registered flop-to-flop arrival 4 ns (clk-to-q 1 ns + comb 2.5 ns + route 0.5 ns, EXAMPLE parameters)
registered slack = 9.5 - 4 = 5.5 ns; cost: outputs lag one extra cycleMealy answers without waiting a cycle, which some handshake protocols require. Registering there would break the protocol, not just slow it.
The middle ground is a Moore output: no input path, no extra register. It keeps single-cycle response to state changes while removing the input-to-output arc.
5.5 ns. Slack is required minus arrival, so cutting arrival by 3 ns adds exactly 3 ns of slack.
The state bits skew: binary codes flip several bits that arrive at different times, so the decoded output wobbles until all bits settle. Registering the output removes that wobble too.