Moore machine implementation in VHDL - Time & Space Complexity
We want to understand how the time it takes to run a Moore machine in VHDL changes as the input size grows.
Specifically, we ask: how does the number of steps the machine takes grow with the input length?
Analyze the time complexity of the following code snippet.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity MooreMachine is
Port ( clk : in STD_LOGIC;
reset : in STD_LOGIC;
input_signal : in STD_LOGIC_VECTOR(3 downto 0);
output_signal : out STD_LOGIC);
end MooreMachine;
architecture Behavioral of MooreMachine is
type state_type is (S0, S1, S2);
signal current_state, next_state : state_type;
begin
process(clk, reset)
begin
if reset = '1' then
current_state <= S0;
elsif rising_edge(clk) then
current_state <= next_state;
end if;
end process;
process(current_state, input_signal)
begin
case current_state is
when S0 =>
if input_signal = "0001" then
next_state <= S1;
else
next_state <= S0;
end if;
when S1 =>
if input_signal = "0010" then
next_state <= S2;
else
next_state <= S1;
end if;
when others =>
next_state <= S0;
end case;
end process;
output_signal <= '1' when current_state = S2 else '0';
end Behavioral;
This code models a Moore machine with three states that changes state on each clock cycle based on the input signal.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: The state update on each clock cycle (rising edge).
- How many times: Once per clock cycle, repeating for each input in the sequence.
Each input symbol causes one state transition on the next clock cycle.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 state transitions |
| 100 | 100 state transitions |
| 1000 | 1000 state transitions |
Pattern observation: The number of operations grows directly with the number of input symbols.
Time Complexity: O(n)
This means the time to process inputs grows linearly with the number of inputs.
[X] Wrong: "The Moore machine processes all inputs instantly in one step."
[OK] Correct: Each input causes a state change on a clock cycle, so processing takes time proportional to input length.
Understanding how hardware state machines scale with input size helps you reason about timing and performance in digital design.
"What if the Moore machine had nested loops inside the state transitions? How would the time complexity change?"
Practice
Solution
Step 1: Understand Moore machine output behavior
Moore machine outputs depend solely on the current state, not on inputs directly.Step 2: Compare options with Moore machine definition
Only 'Output depends only on the current state' matches Moore machine behavior.Final Answer:
Output depends only on the current state -> Option AQuick Check:
Moore output = current state only [OK]
- Confusing Moore with Mealy machine output
- Thinking output changes immediately with input
- Assuming output depends on input signals
Solution
Step 1: Identify state update mechanism in Moore machine
The current state updates synchronously on clock edges, typically rising edge.Step 2: Match process type to state update
Only a clocked process triggered on rising clock edge updates state correctly.Final Answer:
Clocked process triggered on rising edge of clock -> Option CQuick Check:
State update = clocked process [OK]
- Using combinational process for state update
- Ignoring clock in state transition
- Confusing output process with state update
process(current_state)
begin
case current_state is
when S0 => output_signal <= '0';
when S1 => output_signal <= '1';
when others => output_signal <= '0';
end case;
end process;What is the output when current_state = S1?Solution
Step 1: Analyze the case statement for current_state = S1
When current_state is S1, output_signal is assigned '1'.Step 2: Confirm output assignment
The process explicitly sets output_signal to '1' for S1 state.Final Answer:
'1' -> Option BQuick Check:
State S1 output = '1' [OK]
- Assuming output is '0' for all states
- Confusing 'others' case with S1
- Missing output assignment in process
process(clk)
begin
if clk = '1' then
current_state <= next_state;
end if;
end process;Solution
Step 1: Check clock condition in process
The process checks if clk = '1' but does not detect clock edge (rising_edge(clk)).Step 2: Understand importance of edge detection
Without edge detection, state updates continuously when clk is high, causing incorrect behavior.Final Answer:
Missing edge detection on clock signal -> Option AQuick Check:
Use rising_edge(clk) for proper clock sync [OK]
- Using clk = '1' instead of rising_edge(clk)
- Ignoring reset signal importance
- Leaving sensitivity list empty
Solution
Step 1: Recall Moore machine output rule
Moore machine output depends only on current state, not inputs directly.Step 2: Determine correct output assignment
Output must be assigned in a process sensitive to current state, not inputs or next state logic.Final Answer:
Output assigned in state process based only on current state -> Option DQuick Check:
Moore output = function of current state only [OK]
- Assigning output from inputs directly
- Using next state logic for output
- Assigning output asynchronously
Ready to prove it?
Pass the test and this pattern moves unknown
