Está en la página 1de 10

S. E. P. D.G.E.S..

INSTITUTO TECNOLÓGICO DE
ORIZABA

DEPARTAMENTO DE
INGENIERÍA
ELECTRÓNICA

Diseño Digital con VHDL 6e5A

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.

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.
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 una 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Á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;

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

También podría gustarte