Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Grupo: 6e5A
Conceptos Importantes
• Estados: se definen así las posiciones o acciones por las que pasa el objeto de estudio.
Dentro de los estados destaca el denominado estado inicial o de espera, que representa la
posición de partida del objeto en la que se encuentra esperando un evento o entrada para
pasar al siguiente estado. En general, el resto de estados puede partir/llegar de forma directa
a esta posición o forman un anillo con principio y fin en él. Cuando nos movemos entre
estados solemos decir que pasamos al siguiente estado o que venimos del estado anterior.
• Entradas: Son las interacciones del medio con el objeto que pueden alterarlo y hacer que
cambie de estado.
• Salidas: Son las acciones que realiza el objeto hacia el exterior.
• Eventos: Son las acciones, ya sean internas o externas que hacen que el objeto cambie de
estado. Serían la patada, el puñetazo como externos y la expansión del aire que lo vuelve a
llenar y el rozamiento que lo para los internos.
• Transiciones: Son los “caminos” por los que el objeto cambia de un estado a otro. Acotan los
cambios y comprueban las condiciones.
Marco Teórico
¿QUÉ ES UNA MÁQUINA DE ESTADO?
Una máquina de estados, lo que hace es sentar unas bases comunes para la modelización de este
tipo de problemas, dado que estos pueden crecer en complejidad y llegar a hacerse muy difíciles
de representar.
Una máquina de estados es un modelo usado para diseñar circuitos lógicos secuenciales. Su
objetivo es crear un sistema que genere unas salidas determinadas, dependiendo de los estados
por donde va fluyendo la ruta de datos. Por consiguiente, hará falta el reset y reloj del sistema como
entradas del sistema. También se añade una señal para sacar el estado al exterior.
Un ejemplo ilustrativo que nos ayuda a comprender el funcionamiento de una máquina de estado
sería un semáforo, el cuál dispone de tres estados diferentes, uno para cada color. Las entradas
del sistema las podría generar un temporizador que activa una señal cada cierto tiempo, indicando
que hay que pasar al siguiente estado. Por último, las salidas del sistema podrían ser tres señales
que indiquen qué lámpara, de las tres disponibles, tiene que encenderse. Para representar una
máquina de estados se utilizan diagramas de estados como el siguiente.
Por lo tanto, en una máquina de estados, tenemos un objeto que puede estar en x posiciones y que
debido a la acción de los eventos, ya sean internos o externos, se desplaza entre ellos siguiendo
las transiciones permitidas mientras puede o no emitir señales al exterior.
Del mismo modo, si estando en el estado S2 se activa la señal b, el sistema evolucionará de nuevo
al estado S1. En este caso no hay señales de salida. Si las hay pueden ponerse dentro del círculo
o, para no sobrecargar el diagrama, se pueden definir fuera de éste, por ejemplo, en una tabla.
Vamos a crear una FSM muy básica y a implementarla en VHDL, para poder llevarla a una FPGA.
La máquina que vamos a implementar es la mostrada en el siguiente diagrama de estados.
Una máquina de estado popular es un dispensador de bebidas. Se insertan algunas monedas en
la máquina y junto con la bebida se proporciona el cambio exacto.
El estado S1 es nuestro estado inicial, como nuestro estado inicial, también va a ser nuestro punto
de partida cada vez que se produzca un reset en nuestro sistema. El S4 tiene un doble círculo, que
indica que es un estado final. Los estados están unidos por unas flechas llamadas transiciones, que
indican cómo evoluciona el sistema de un estado a otro según se activan las señales de entrada.
En este caso concreto hay tres señales de entrada (a, b, c y d). Si estando en el estado S1 se activa
la señal a, el sistema evolucionará al estado S2.
S0 -> Y0
S1 -> Y1
S2 -> Y2
S3 -> Y3
Las máquinas de estado tienen varias características, dentro de las cuales se destacan:
• No puede estar en más de un estado por vez.
• El estado en el que se encuentra se denomina estado actual.
• El cambio de un estado a otro se denomina transición, y se dispara con el reloj del circuito.
• Son muy útiles en el diseño de protocolos de comunicación.
• Existen dos tipos de máquinas de estado: Moore y Mealy.
Máquinas de Mealy
La máquina de Mealy permanece en un cierto estado mientras no recibe ningún estímulo del
exterior. Cuando recibe un símbolo del exterior (Perteneciente al conjunto de símbolos de
entrada) realiza otras dos acciones en forma simultánea:
1- Transita a otro estado (que puede ser el mismo en el que está, pero igual se produce el
transito). De acuerdo con la función de transición f
2- Emite un símbolo a la salida (símbolo que pertenece al conjunto de símbolos de salida). de
acuerdo con la función de salida
Estas tres acciones: lectura de un símbolo desde exterior (cinta de Entrada), Transición de
estado, y Grabado (Cinta de Salida), serán indivisibles dentro de un intervalo de tiempo.
De esta manera al transitar desde un intervalo de tiempo discreto i hasta i+1 la máquina realizará:
Si analizamos esta máquina en relación a la máquina de Mealy, notamos que la diferencia que
existe entre ambas radica solo en cómo se comporta la función de salida Q.
Ejemplo:
Describiremos una máquina de Moore, que resuelve el mismo ejercicio resuelto por la Máquina de
Mealy anterior.
La máquina nos queda:
MO = ({0,1}, {p,i}, {q0,q1}, f, g)
Descripción explícita de las funciones f y g
Resultado de ejecución
De igual manera que en el ejemplo de Mealy probaremos el funcionamiento de la máquina de
Moore sobre las mismas cadenas:
a) Que salida le corresponderá a una entrada 1 = 0100, comenzando la ejecución de la máquina
por el estado q0.
La salida producida para la entrada 1, será: piii
b) Que salida le corresponderá a una entrada 2 = 1011100 , comenzando la ejecución de la
máquina por el estado q0.
La salida producida para la entrada 2, será: iipippp
Máquinas de Moore
Las salidas dependen sólo del estado. la salida del sistema depende exclusivamente del estado en
el que se encuentra el sistema. Cuando ocurre esto decimos que se trata de una máquina de
estados de tipo Moore.
Como tenemos cuatro estados, podríamos usar dos bits para codificar los estados. Por ejemplo:
S0->00, S1->01, S2->10 y S3->11. Sin embargo, lo más habitual es dejar que el sintetizador lo
haga por nosotros definiendo un tipo para los estados tal y como se ve en la siguiente definición.
Así, si añadimos nuevos estados, no tenemos que andar redimensionando el registro de estados.
-- declaraciones modelo FSM
type STATES is (S0, S1, S2, S3);
signal state_reg, state_next: STATES
-- registro de estados
process(CLK)
begin
if CLK'event and CLK='1' then
if RST='1' then
state_reg <= s0;
else
state_reg <= state_next;
end if;
end if;
end process;
El registro de estados tiene una señal de reset síncrona que lleva al sistema al estado S0. Si la
lógica de codificación del estado siguiente genera un nuevo estado, este se almacenará en el
registro, si no, la salida del registro se mantiene. Veamos cómo es el circuito que genera el estado
siguiente.
-- Lógica de estado siguiente (circuito combinacional)
process (state_reg, A, B)
begin
state_next <= state_reg;
case state_reg is
when S0 =>
if A='1' then
state_next <= S1;
end if;
when S1 =>
if B='1' then
state_next <= S2;
end if;
when S2 =>
if A='1' then
state_next <= S3;
end if;
when S3 =>
state_next <= S3;
end case;
end process;
El estado siguiente se genera a partir del estado actual y de las entradas A y B, por lo que
ponemos estas tres señales en la lista de sensibilidad del proceso. Para evitar que el sintetizador
genere algún latch o elemento de memoria, asignamos por defecto el estado actual a la señal de
estado siguiente. El código VHDL describe los estados y las transiciones asociadas a las entradas
según el diagrama de estados que definimos más arriba, de forma que, de ser necesario, asigna
el valor del estado siguiente a la variable state_next cuando hay un cambio en las entradas o en el
estado. Por último, echamos un vistazo al circuito de decodificación para las salidas.
-- salida tipo Moore
process (state_reg)
begin
-- estableciendo la salida por defecto
-- nos aseguramos de crear un circuito
-- combinacional sin latches.
Y0 <= '0';
Y1 <= '0';
Y2 <= '0';
Y3 <= '0';
case state_reg is
when S0 => Y0 <= '1';
when S1 => Y1 <= '1';
when S2 => Y2 <= '1';
when S3 => Y3 <= '1';
end case;
end process;
De nuevo, para evitar que el sintetizador cree elementos de memoria, asignamos un valor por
defecto a las salidas (en este caso 0), y según el estado actual, se activa la salida
correspondiente según definimos en la tabla de arriba.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity FSM is
Port ( CLK : in STD_LOGIC;
BTN : in STD_LOGIC_VECTOR (4 downto 0);
LED : out STD_LOGIC_VECTOR (15 downto 0));
end FSM;
begin
-- registro de estados
process(CLK)
begin
if CLK'event and CLK='1' then
if RST='1' then
state_reg <= s0;
else
state_reg <= state_next;
end if;
end if;
end process;
-- Lógica de estado siguiente (circuito combinacional)
process (state_reg, A, B)
begin
state_next <= state_reg;
case state_reg is
when S0 =>
if A='1' then
state_next <= S1;
end if;
when S1 =>
if B='1' then
state_next <= S2;
end if;
when S2 =>
if A='1' then
state_next <= S3;
end if;
when S3 =>
state_next <= S3;
end case;
end process;
end Behavioral;
Bibliografía
• Máquinas de Mealy. (s. f.). http://delta.cs.cinvestav.mx/%7Egmorales/ta/node49.html