Máquinas Estados com Modelo Moore

Considere uma máquina de estados com modelo Moore com diagrama de transições apresentado na Figura abaixo.

Essa máquina de estados pode ser descrita em VHDL da seguinte forma:

--fsm.vhd
--Maquina de estados implementada em VHDL
--Autor: Pedro Thiago V. de Souza

--Bibliotecas
library ieee;
use ieee.std_logic_1164.all;

--Entidade
entity fsm is
    port(
        x, clk, rst: in std_logic;
        y : out std_logic           --Ultima linha do port nao tem ;
    );
end fsm;

--Arquitetura
architecture comportamento of fsm is
    --Pre-Ambulo
    --Definir um novo tipo, chamado estado, que assume os valores alfa, beta, gamma e delta
    type estado is (alfa, beta, gamma, delta);
    --Crio as variaveis de estado atual e estado proximo
    signal estadoatual, estadoproximo : estado;
begin
    --Process 1: Registrador de estado - lista de sensibilidade: clk, rst
    registradordeestado : process (clk, rst)
    begin
        if (rst = '1') then
            estadoatual <= alfa;            --Estado inicial é o alfa
        elsif (rising_edge(clk)) then
            estadoatual <= estadoproximo;   --As variaveis de estado proximo passam a ser as variaveis de estado atual
        end if;
    end process;
    
    --Process 2: Logica Combinacional - listado de sensibilidade: estadoatual, x
    logicacombinacional : process (estadoatual, x)
    begin
        case estadoatual is
            --Estado alfa
            when alfa =>
                y <= '0';                   --Saida
                --Estado proximo
                if (x='1') then
                    estadoproximo <= alfa;
                else
                    estadoproximo <= beta;
                end if;
            --Estado beta
            when beta =>
                y <= '1';                   --Saida
                --Estado proximo
                if (x='1') then
                    estadoproximo <= gamma;
                else
                    estadoproximo <= beta;
                end if;
            --Estado gamma
            when gamma =>
                y <= '1';                   --Saida
                estadoproximo <= delta;     --Estado proximo
            --Estado delta
            when delta =>
                y <= '0';
                estadoproximo <= alfa;
        end case;
    end process;
end comportamento;