Designing Finite State Machines (FSMs)

February 24, 2025

Finite State Machines (FSMs) are fundamental tools in digital design and computer science. They help model systems that can be in one of a limited number of states and change states in response to inputs. From traffic lights to vending machines and computer processors, FSMs are everywhere. This article explains the basics of FSMs and guides you through designing one in a straightforward way.


What is a Finite State Machine?

A Finite State Machine is a model of computation used to design both hardware and software systems. It consists of:

  • States: Different conditions or situations the system can be in.

  • Inputs: Signals or events that cause the system to change state.

  • Transitions: Rules that tell how and when the system moves from one state to another.

  • Outputs: Signals generated based on the current state or transitions.

There are two main types of FSMs:

  • Moore Machine: Outputs depend only on the current state.

  • Mealy Machine: Outputs depend on both current state and inputs.


Why Use FSMs?

FSMs simplify complex system behavior by breaking it down into manageable states and transitions. They make designing predictable, reliable systems easier. Whether you’re building a simple digital lock or a communication protocol, FSMs offer a clear and organized way to model the process.


Steps to Design an FSM

Designing an FSM involves several clear steps:

1. Understand the Problem

Start by clearly defining what the system is supposed to do. What are the inputs? What outputs should it produce? What are the different modes or states the system can be in?

Example: For a vending machine, inputs could be coin insertion and selection buttons, states could be “Waiting for coin,” “Coin inserted,” and “Dispensing product.”

2. Identify the States

List all the possible states your system needs to operate in. Each state should represent a unique condition of the system.

Example: For a traffic light controller, the states could be “Green Light,” “Yellow Light,” and “Red Light.”

3. Determine Inputs and Outputs

Define what inputs affect state transitions and what outputs the machine should generate in each state.

Example: Inputs could be timer signals or pedestrian button presses, outputs would be which light is on.

4. Draw the State Diagram

Create a visual map showing states as circles and transitions as arrows. Label each arrow with the input condition that triggers the transition and the output if it changes.

This diagram makes it easy to understand the flow of the FSM.

5. Create the State Table

Convert the state diagram into a table listing:

  • Current State

  • Input

  • Next State

  • Output

This tabular form helps in implementation.

6. Assign Binary Codes to States

Since digital systems use binary, assign a unique binary number to each state. The number of bits needed depends on the number of states. For example, 4 states need 2 bits.

7. Derive Next-State and Output Logic

Using the state table, write Boolean expressions or logic equations for:

  • Next state based on current state and input

  • Output based on current state (Moore) or current state and input (Mealy)

These expressions are then used to design digital logic circuits.

8. Implement the FSM

Finally, implement the FSM using digital hardware like flip-flops and logic gates, or in software using code.


Example: Simple Door Lock FSM

Imagine a digital door lock that unlocks when the correct sequence of two buttons, A then B, is pressed.

  • States: S0 (Locked), S1 (A pressed), S2 (Unlocked)

  • Inputs: Press A, Press B, No input

  • Outputs: Lock status (Locked/Unlocked)

State transitions:

  • From S0, if A pressed → go to S1

  • From S1, if B pressed → go to S2 (Unlocked)

  • Otherwise, return to S0

This simple FSM ensures the door only unlocks when the correct sequence is entered.


Tips for Designing FSMs

  • Keep the number of states as small as possible.

  • Make sure every possible input has a defined transition.

  • Test your state diagram and table to avoid unreachable or dead-end states.

  • Use simulation tools to verify your design before building hardware.


Conclusion

Finite State Machines provide a powerful and clear way to design digital systems that change behavior based on inputs. By breaking down a problem into states and transitions, FSMs help manage complexity and build reliable systems. With practice, designing FSMs becomes intuitive, paving the way to create everything from simple controllers to complex processors.

Tags: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,