Вы находитесь на странице: 1из 5

Diseño Lógico Avanzado

Reporte de practica de laboratorio.

Diseño Lógico Avanzado

Práctica 2 ​“Máquinas de Mealy y Moore”

Cruz Vargas Mónica Paola, Hernández Armenta Wendy Jaqueline, Paulino Malbaez Diana .

Lerma , 30 de Septiembre, 2019

Objetivos

● Crear una secuencia que tras meterla, se nos activará una salida, si esa secuencia no
es la correcta y por tanto, la sucesión errónea, la salida no se activará.
● Detallar el proceso llevado a cabo para la elaboración de un detector de secuencia
específicamente de la secuencia binaria “1101”, implementando arquitecturas
estructurales.
● Implementación de ​la funcionalidad debounce para poder observar el funcionamiento
de las máquinas de Mealy y Moore.

Introducción.

La máquina de estados tipo Moore es un modelo secuencial en el cual la salida sólo está
asociada al estado presente. Las salidas y el estado cambian sólo en los
cantos de sincronización del reloj. Las máquinas de Moore suelen emplearse como
reconocedores de secuencias. Es decir, que entreguen una salida cuando ocurre una
determinada secuencia en la entrada. En la siguiente imagen (Ver
figura 1.1), se muestra un ejemplo de una máquina Moore, llamada
así en honor del Profesor Edward F. Moore, quien propuso este
modelo matemático para el estudio de máquinas secuenciales.
La máquina Moore se distingue por especificar el estado de la
máquina y las salidas que se producen en dicho estado. Las
salidas no son necesariamente iguales al estado de la máquina. La
notación utilizada dentro de cada círculo tiene una forma como
10/11, en donde la primera palabra binaria (10) nos indica el estado de la máquina y la
segunda palabra binaria (11) nos indica la salida de la máquina que denominaremos z. De
acuerdo con el diagrama, esta máquina puede estar en uno de los siguientes tres estados:
q1q0 = 00 dando una salida de z1z0 = 01
q1q0 = 01 dando una salida de z1z0 = 11
q1q0 = 10 dando una salida de z1z0 = 11
Las flechas exteriores a los estados (círculos) que salen o llegan a un estado son la entrada
o las entradas puestas en la máquina en un momento dado. En este caso, tenemos una
máquina Moore que posee una sola entrada designada como x. El comportamiento de esta
máquina depende del valor de la entrada x y del estado q=q1q0 en el que se encuentre la
Diseño Lógico Avanzado
Reporte de practica de laboratorio.

máquina. Un inconveniente es el rebote o ​bouncing​. Al ser accionados, los pulsadores tardan


cierto tiempo en alcanzar un estado estable, es decir, que durante muy poco tiempo (del
orden de los milisengundos) pueden cambiar entre el estado pulsado y no pulsado hasta que
la señal se estabiliza. A pesar de ser muy poco tiempo, es el suficiente para que un sistema
digital lo detecte como varias pulsaciones. La siguiente imagen muestra una señal de rebote
típica.(Véase Figura 1.2).
Recordemos que estamos describiendo el uso de un circuito secuencial que debe recordar si
el botón está pulsado en un momento anterior y compararlo
con el estado actual, así que es necesario el uso de ​flip flops​.
La idea general es que si durante un periodo de tiempo lo
suficientemente amplio (unos 10 u 11 milisegundos) el valor
actual del pulsador y el valor del ​flip flop​ que almacena el
estado anterior sean iguales, podemos dar por sentado que
el pulsador ha llegado a un estado de pulsación estable​.
El diagrama de estados para cumplir con el objetivo funciona
de la siguiente manera: En un primer flanco de reloj se va
esperar un 1 para poder avanzar al siguiente estado, en un segundo flanco siempre va a
esperar otro uno de ser así volverá avanzar al siguiente estado y de ser un cero, entonces
volverá otra vez a esperar el primer uno. Cuando ya hayan llegado los primeros dos unos los
va a guardar y esperar un cero para poder continuar al tercer estado. De no ser así, seguirá
guardando los dos primeros unos no importan cuántos sean hasta que llegue un cero. Una
vez que haya llegado el cero avanzara al cuarto estado donde va a esperar un 1. Si llega el
uno se activará la salida “Q” y guardará ese uno, se prendera el led de no ser así, volverá al
inicio. (Ver figura 1.3).

Procedimiento.

1. Obtenemos el diagrama y tabla de estados

MOORE 0 1 2 3 4
Entrada 0 1 1 0 1
Estado presente Q0 Q0 Q1 Q2 Q3
Estado Futuro Q0 Q1 Q2 Q3 Q1
Salida 0 0 0 0 1
Diseño Lógico Avanzado
Reporte de practica de laboratorio.

1. Crear un nuevo proyecto ​en el software Vivado ​definiendo la tarjeta desarrollo Basys3
(xc7a35tcpg236-1).
2. Implementar la funcionalidad debounce para poder observar el funcionamiento de la
máquina de Mealy.

3. Modificar los archivos mi_top.vhd y mis_constrains.xdc para implementar una


arquitectura estructural de una máquina de Moore que detecte la secuencia 1101.

2. Realizar la síntesis del proyecto y generación del archivo de bits de programación.

3. Correr la síntesis procedimos a verificar la secuencia en la tarjeta y corroborar el


encendido de los leds.

Resultados.

El resultado fue satisfactorio, después de probar varias entradas en el circuito notamos que
al implementar la identidad debounce la luz del LED se queda encendida todo el flanco del
reloj conforme cambiamos la entrada de cero a 1 se volvía a prender el led y todo esto
pasaba en diferentes flancos de reloj.

Código modificado Debounce

​ -- REGISTRO DE ESTADOS begin


-- Implementa los registros disparados por if c'event and c='1' then
-- flanco positivo y con reset sincrono if reset='1' then
process(c) estado_actual <= S0;
else
Diseño Lógico Avanzado
Reporte de practica de laboratorio.

-- detector de 0's estado_siguiente <= S1;


if ultimo_x0 = '0' and x0 = '1' elsif x0 = '1' then
then estado_siguiente <= S0;
estado_actual <= end if;
estado_siguiente; when S1 =>
end if; if x1='1' then
-- detector de 1's estado_siguiente <= S2;
if ultimo_x1 = '0' and x1 = '1' elsif x0 = '1' then
then estado_siguiente <= S0;
estado_actual <= end if;
estado_siguiente; when S2 =>
end if; if x1 ='1' then
end if; estado_siguiente <= S2;
ultimo_x0 <= x0; elsif x0 = '1' then
ultimo_x1 <= x1; estado_siguiente <= S3;
end if; end if;
end process; when S3 =>
if x1='1' then
-- FUNCION DEL ESTADO FUTURO estado_siguiente <= S1;
-- Implementa el estado_siguiente como elsif x0 = '1' then
-- funcion del estado_actual y las entradas estado_siguiente <= S0;
x end if;
process (estado_actual, x0, x1) end case;
begin end process;
estado_siguiente <= estado_actual;
case estado_actual is
when S0 =>
if x1 = '1' then

Código modificado identidad Moore

library IEEE; estado_actual <= Q0;


use IEEE.STD_LOGIC_1164.ALL; else
-- detector de 0's
entity detector_moore is if ultimo_x0 = '0' and x0 = '1'
Port ( then
c, reset, x0, x1: in STD_LOGIC; estado_actual <= estado_siguiente;
z0, z1, z2, z3, z4, z: out end if;
STD_LOGIC -- detector de 1's
); if ultimo_x1 = '0' and x1 = '1'
end detector_moore; then
estado_actual <= estado_siguiente;
architecture Behavioral of detector_moore end if;
is end if;
-- declaraciones modelo de Maquina de ultimo_x0 <= x0;
Estados ultimo_x1 <= x1;
type STATES is (Q0, Q1, Q2, Q3, Q4); end if;
signal estado_actual, end process;
estado_siguiente: STATES;
signal ultimo_x0, ultimo_x1: -- FUNCION DEL ESTADO FUTURO
std_logic; -- Implementa el estado_siguiente
como
begin -- funcion del estado_actual y las
entradas x
-- REGISTRO DE ESTADOS process (estado_actual, x0, x1)
-- Implementa los registros begin
disparados por estado_siguiente <=
-- flanco positivo y con reset estado_actual;
sincrono case estado_actual is
process(c) when Q0 =>
begin if x1 = '1' then
if c'event and c='1' then estado_siguiente <=
if reset='1' then Q1;
Diseño Lógico Avanzado
Reporte de practica de laboratorio.

elsif x0 = '1' then end case;


estado_siguiente <= end process;
Q0;
end if; -- FUNCION DE SALIDA
when Q1 => -- implementa las salidas z0, z1, z2,
if x1='1' then z3, z como
estado_siguiente <= -- funcion del estado_actual y la
Q2; entrada x
elsif x0 = '1' then process (estado_actual,x0, x1)
estado_siguiente <= begin
Q3; z0 <= '0';
end if; z1 <= '0';
when Q2 => z2 <= '0';
if x1 ='1' then z3 <= '0';
estado_siguiente <= z4 <= '0';
Q1; case estado_actual is
elsif x0 = '1' then when Q0 =>
estado_siguiente <= z0 <= '1';
Q3; z <= '0';
end if; when Q1 =>
when Q3 => z1 <= '1';
if x1='1' then z <= '0';
estado_siguiente <= when Q2 =>
Q4; z2 <= '1';
elsif x0 = '1' then z <= '0';
estado_siguiente <= when Q3 =>
Q0; z3 <= '1';
end if; z <= '0';
when Q4 => when Q4 =>
if x1='1' then z4 <= '1';
estado_siguiente <= z <= '1';
Q1;
elsif x0 = '1' then end case;
estado_siguiente <= end process;
Q0; end Behavioral;
end if;
Conclusiones.

En esta práctica logramos analizar con más detalle la diferencia entre la máquina Mealy y la
máquina Moore, así como la funcionalidad de la identidad ​debounce ​la cual es de suma
importancia a la hora de elaborar un código para poner en marcha un diagrama de estados,
ya que​ ​hace un circuito más consistente.

Concluimos nuestra práctica, en tiempo y forma, logramos crear una secuencia, que tras
meterla se nos activará una salida, si esa secuencia no era la correcta, la salida no se
activaba, para ir pasando la secuencia necesitamos un reloj, el cual simulamos mediante
pulsos que ingresamos manualmente.

Вам также может понравиться