Está en la página 1de 12

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS

FACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA


ESCUELA DE INGENIERÍA ELECTRÓNICA

DISEÑO DIGITAL

LABORATORIO No4

ESTILO ALGORÍTMICO PARA EL DISEÑO E


IMPLEMENTACIÓN DE MÁQUINAS DE ESTADO
EN FPGA

Cátedra: Ing. Alfredo Granados Ly.


a.granados@tecnologiasandinas.com,pe
UNMSM – FIEE Diseño Digital

IMPLEMENTACIÓN DE MÁQUINA DE ESTADO


En el siguiente gráfico se muestra las consideraciones a tener en cuenta para la implementación de
una máquina de estado:

Donde:
EP: estado presente.
ES: estado siguiente y se determina con las entradas y el estado presente.
La salida puede depender de la entrada y el estado presente (MEF de Mealy) ó sólo puede
depender del estado presente (MEF de Moore).

La señal de RESET es importante por que de esta manera forzamos a que la máquina inicie en un
estado conocido.

Hay varias formas de implementar una máquina de estado, la más utilizadas son:

Implementando una máquina de estado con un solo Proceso

Ejemplo No1: Implementar en código VHDL el siguiente diagrama de estado.

Cátedra: Ing. Alfredo Granados Ly 2


UNMSM – FIEE Diseño Digital

Implementando una máquina de estado con dos procesos

Cátedra: Ing. Alfredo Granados Ly 3


UNMSM – FIEE Diseño Digital

Ejemplo No2: Implementar en código VHDL el siguiente diagrama de estado.

Cátedra: Ing. Alfredo Granados Ly 4


UNMSM – FIEE Diseño Digital

Implementando una máquina de estado con tres procesos

Ejemplo No3: Implementar en código VHDL el siguiente diagrama de estado.

Cátedra: Ing. Alfredo Granados Ly 5


UNMSM – FIEE Diseño Digital

Cátedra: Ing. Alfredo Granados Ly 6


UNMSM – FIEE Diseño Digital

Veamos el siguiente ejemplo:

- Implementar un circuito que detecte la presencia de la cadena de bits en una línea de


transmisión: 01101

Considere la posible ocurrencia de un traslape.

El diagrama de estado utilizando la ME de Moore es:

library ieee;
use ieee.std_logic_1164.all;

entity detector is
port(Data : in std_logic;
clk : in std_logic;
z : out std_logic);
end detector;

architecture moore of detector is


type estados is (S0,S1,S2,S3,S4,S5);
signal ep,es: estados;
begin
reloj: process(clk)
begin
wait until clk='1';
ep<=es;
end process reloj;

combi: process(ep,Data)
begin
es <= ep;

Cátedra: Ing. Alfredo Granados Ly 7


UNMSM – FIEE Diseño Digital

case ep is
when S0 => z <='0'; if Data='0' then es<=S1; end if;
when S1 => z <='0'; if Data='1' then es<=S2; end if;
when S2 => z <='0'; if Data='0' then es <= S1;
else es <= S3;
end if;
when S3 => z <='0'; if Data='0' then es <= S4;
else es <= S0;
end if;
when S4 => z <='0'; if Data='0' then es <= S1;
else es <= S5;
end if;
when S5 => z <='1'; if Data='0' then es <= S1;
else es <= S3;
end if;
end case;
end process combi;
end moore;

Simulación del circuito realizado utilizando el Max+Plus II de Altera.

- En el cruce de una avenida de alta velocidad con un paso peatonal se


encuentra un semáforo con dos luces: Rojo y Verde. El semáforo se
encuentra normalmente en Verde(ON). Si un peatón desea cruzar debe
pulsar el botón STOP, el cual cambia el estado de la luces por 20
segundos (transcurrido este tiempo el semáforo regresa a su estado
normal). Si el peatón pulsa nuevamente el botón STOP cuando el
semáforo se encuentra en ROJO (ON), el tiempo se reinicia dando
nuevamente 20 segundos para cruzar. Diseñe el circuito que gobierna el
semáforo.

El diagrama de estado utilizando la ME de Moore es:

Cátedra: Ing. Alfredo Granados Ly 8


UNMSM – FIEE Diseño Digital

library ieee;
use ieee.std_logic_1164.all;

entity semaforo is
port ( clk: in std_logic;
STOP: in std_logic;
ROJO,VERDE: out std_logic);
end semaforo;

architecture moore of semaforo is


type estados is (S0,S1,S2);
signal ep,es: estados;
signal contador: integer range 0 to 20;
begin

reloj: process(clk)
begin
if clk='1' then
ep <= es;
if ep = S2 then contador <= contador + 1;
elsif ep = S1 then contador <= 0;
end if;
end if;
end process reloj;

combi: process(ep,STOP)
begin
es <= ep;
case ep is
when S0=> ROJO<='0'; VERDE <='1';
if STOP='1' then es <= S1; else es <=
S0; end if;
when S1=> VERDE <='0' ; ROJO <= '1';
es <= S2;
when S2=> VERDE <='0' ; ROJO <= '1';
if STOP='1' then es <= S1;
elsif contador=19 then es <= S0;
else es <= S2;
end if;
end case;
end process combi;
end moore;

Cátedra: Ing. Alfredo Granados Ly 9


UNMSM – FIEE Diseño Digital

Simulación del circuito.

Circuitos a implementar durante el desarrollo de laboratorio:

 Implementación de un contador para la siguiente cuenta:


0,7,4,3,1, 0,7,4,3,1 que tenga una señal de RESET y fuerce al
estado inicial. Utilice máquina de estado (utilice ME–Moore).

 Implemente un detector para la siguiente secuencia: 01101010


debe tenar la capacidad de traslape. Utilice MEF-Mealy.

 Se pide implementar el siguiente sistema en VHDL. Cuando se


pulse START se abre la llave dejando caer un líquido hasta que
llegue a alcanzar el nivel del sensor, momento el cual se cierra la
llave. En los display se debe indicar el tiempo transcurrido.
Considere una señal de reloj de 1Hz.

 Un procesador después de un RESET limpia sus 2 registros


internos: W (acumulador) y PC (contador de programa) y genera la
señal de control de lectura de memoria (MEMRD) para leer la
primera instrucción de la memoria. El formato de la instrucción
que extrae es el siguiente:

Cátedra: Ing. Alfredo Granados Ly 10


UNMSM – FIEE Diseño Digital

Asumiendo que sólo puede realizar 6 operaciones: INCW, DECW,


CLRW, NOTW, MOVLW, NOP. Diseñe el microprocesador sabiendo
que puede acceder a 1Kx11 de memoria de programa.
(Propuesto).

 Se desea implementar un circuito que genere el bit de paridad


impar de un dato de 8 bits (data_in) que llega serialmente. La
secuencia de los datos se inicia con un bit de START que siempre
es 0, seguido de los 8 bits de datos. La secuencia original
(data_in) no tiene el bit de paridad.

Se debe generar la cadena de salida (data_out) de manera


seguida a la cadena de entrada (data_in) pero con el bit de
paridad impar después del octavo bit de dato (un ejemplo se
muestra en el gráfico anterior).

 Se desea implementar el siguiente circuito:

Cuando se pulse START por primera vez debe sonar la sirena de


acuerdo a la señal Fout, la segunda vez que se pulse START debe
dejar de sonar.

 Se desea implementar un circuito transmisor de datos seriales. El


dato se recibe de manera paralela a 8 bits cuando se activa la
señal START. Los datos deben salir acompañados de un bit de
inicio (START: que siempre es cero) y un bit de parada (STOP: que

Cátedra: Ing. Alfredo Granados Ly 11


UNMSM – FIEE Diseño Digital

siempre es uno). La velocidad de transmisión es de 9600 bps (bits


por segundo). La frecuencia de reloj es de 1MHz.

Cátedra: Ing. Alfredo Granados Ly 12

También podría gustarte