Está en la página 1de 14

INSTITUTO TECNOLÓGICO DE ORIZABA

NOMBRE DE LA MATERIA: Diseño digital con VHDL

PRESENTEA: Ramírez Hernández Ahmed Alí #21010735

CARRERA: ING. Electrónica

TÍTULO DEL TRABAJO: Investigación de Máquinas de estado

NOMBRE DEL MAESTRO: MARIO ALBERTO GARCÍA MARTÍNEZ

Grupo: 6e5A

FECHA DE ENTREGA: 3/03/2023


Objetivos
Que el alumno sepa identificar las máquinas de estado en VHDL, su funcionamiento y que pueda
ver un ejemplo real de una simulación en VHDL.

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

Ejemplo de una máquina de estados con VHDL


Veamos cómo se implementa en VHDL cada uno de estos tres bloques. Empecemos por el
registro de estados.

-- 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.

El código VHDL completo de nuestra FSM (Finite State Machine) es el siguiente.

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;

architecture Behavioral of FSM is


-- alias
alias RST : STD_LOGIC is BTN(0);
alias A : STD_LOGIC is BTN(4);
alias B : STD_LOGIC is BTN(2);
alias Y0 : STD_LOGIC is LED(0);
alias Y1 : STD_LOGIC is LED(1);
alias Y2 : STD_LOGIC is LED(2);
alias Y3 : STD_LOGIC is LED(3);

-- declaraciones modelo FSM


type STATES is (S0, S1, S2, S3);
signal state_reg, state_next: STATES;

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;

-- 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;

end Behavioral;

Ejemplo de una máquina de estados #2


Una máquina de estado simple: El contador.
Un clásico ejemplo de una máquina de estado es un contador. Por ejemplo, un ‘for loop’ o un
circuito integrado lógico de 74×4040 trabajan como una máquina de estado. Cada vez que la
máquina cambia de estado, ya sea por la línea del reloj o por el comportamiento de bucle, el
estado de la memoria cambia a un nuevo estado igualando el estado anterior más uno. El set
finito de estados que puede tener es la cantidad de números que puede contar.

Un contador básico expresado como máquina de estado


Partes de la máquina de estado del contador:
• El estado actual es el valor que ha sido contado.
• El resultado es el estado actual.
• La próxima etapa lógica es lo que sea el estado actual + 1.
• No hay entradas. En un diagrama más avanzado, una entrada o una función de reseteo del
contador será establecido como entrada.

La máquina de estado avanza a cualquier ritmo que sea atendida.


Conclusión:
Las máquinas de estados son de suma importancia para nuestra carrera y son de gran utilidad
como ya mencionamos con el ejemplo de los semáforos, para entender su funcionamiento de
mejor manera, usamos los diagramas de estado que nos ayudan a visualizar e interpretar las
situaciones que se pueden ir dando durante nuestro proceso.
De este modo podremos ser más eficaces a la hora de programar una máquina de estados en
VHDL, ya que el proceso que tendremos que describir en el código, deberá incluir de manera
acertada a nuestro modelo de comportamiento de un sistema con entradas y salidas, además las
salidas dependerán de las señales actuales y anteriores, por lo que incluir esto en el código es
indispensable para que nuestra máquina de estados sea funcional.
Las máquinas de estado son un modo habitual de mostrar un conjunto de estados
interrelacionados de un proceso.
La máquina de estado calcula mecánicamente el valor de las monedas que se insertan y las
monedas que debe devolver al cliente. En el diagrama que aparece a continuación, se muestra
una máquina de estado típica creada por el editor de máquinas de estado. En la máquina de
estado se adquiere un artículo y se suministra a un cliente.

Bibliografía
• Máquinas de Mealy. (s. f.). http://delta.cs.cinvestav.mx/%7Egmorales/ta/node49.html

• M. (2022, 25 febrero). Maquina de estados: ¿A que nos referimos? Fisicotrónica.


http://fisicotronica.com/maquina-de-estados-nos-referimos/

• A., & A. (2017, 25 marzo). Máquinas de estado finito en VHDL. Digilogic.


https://digilogicelectronica.wordpress.com/2017/03/25/maquinas-de-estado-finito-fsm-vhdl/

• Guía de estudio y programación en VHDL | Guías, Proyectos, Investigaciones de Verilog y


VHDL | Docsity. (s. f.). https://www.docsity.com/es/guia-de-estudio-y-programacion-en-
vhdl/7902809/

• P. (2022b, julio 1). Máquinas de estado. MCI Capacitación.


https://cursos.mcielectronics.cl/2019/06/18/maquinas-de-estado/

También podría gustarte