Een FSM is een controle structuur die zich in een eindig aantal toestanden kan bevinden. Onder invloed van ingangssignalen kan een FSM overgaan naar één bepaalde toestand één andere toestand. In elke toestand wordt er een waarde toegekend aan de uitgangssignalen. De toestand wordt opgeslagen in een toestandsregister.
De meest eenvoudige FSM is een teller. Er is geen enkel ingangssignaal en de uitgang is de waarde van de toestand.
Een eerste ingangssignaal dat de telcyclus kan beïnvloeden, is een enable signaal.
Een ander ingangssignaal zou een up/down (UD) signaal kunnen zijn.
Werkelijke toestandsdiagrammen kunnen heel wat complexer zijn.
Opdelen in functionele bouwblokken.
Na deze stap kan de entity van de verschillende bouwblokken geschreven worden. Wanneer het ontwerp met meerdere personen zal gemaakt worden, is dit het moment om de taken te verdelen.
Ingangssignalen zijn:
Uitgangssignalen zijn:
De bouwblokken van het datapad zijn vaak goed gekende blokken:
Combinatorische blokken kunnen snel ontworpen worden op basis van Booleaanse vergelijkingen.
Ingangssignalen zijn:
Uitgangssignalen zijn:
Teken het bouwblok met alle signalen.
Teken het toestandsdiagramma.
Minimaliseer het aantal toestanden.
Controleer de volledigheid van het toestandsdiagramma.
Bepaal de next state functie in functie van de huidige toestand en alle ingangssignalen (behalve de klok).
Bepaal de output functie in functie van de huidige toestand (en eventueel de ingangssignalen).
Het is belangrijk een onderscheid te maken tussen een Moore en een Mealy FSM.
Encoderen van de toestanden in een FSM:
Definieer de toestand als een opsommingstype en maak twee signalen aan van dit type. Deze signalen vormen de ingang en de uitgang van het state register.
type my_state is (rst_state, green_state, yellow_state, red_state);
signal next_state, state: my_state;
Ontwerp de next state functie, het state register en de output functie in drie verschillende processen. Voorzie alle mogelijkheden in de next state functie en de output functie, anders ontstaan er latches in deze bouwblokken.