Documentos de Académico
Documentos de Profesional
Documentos de Cultura
INSTITUTO TECNOLÓGICO DE
ORIZABA
DEPARTAMENTO DE
INGENIERÍA
ELECTRÓNICA
SUMADORES
Unidad 2
Equipo 3
Integrant
es:
Borges Sánchez Nahomi #210107??
Ramírez Hernández Ahmed Alí #21010735
Guevara Vásquez José Israel #210107??
Profesor:
Mario Alberto García Martínez
MARCO TEÓRICO
¿QUÉ ES UNA MÁQUINA DE ESTADO?
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.
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ÁQUINA 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
Primero registramos los 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.
-- 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.
-- 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;
El código completo de nuestra máquina de estado de Moore
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;
end Behavioral;
En la simulación de la FSM vemos como evoluciona el circuito desde S0 a S3 según van
cambiando las entradas A y B. También podemos observar cómo se activan las entradas Y0
a Y3
MÁQUINAS DE MEALY:
ehhhh