Sunteți pe pagina 1din 30

Diseo de mquinas secuenciales sincrnicas

1 ) Dado el diagrama de estados de una maquina sincrnica y la asignacin de estados

S2

Dir2

S1

MSS

clk

Dir1

Resetn

Formato: S2 , S1 /Dir2 , Dir1


Resetn
00/00
a
01/01

1/00

10/10

1/00
0/01

0/10

Asignacin de estados:
1
0

Se pide:
1.
2.
3.
4.
5.

ASM.
Mapas de estado siguiente y salida (ASM a mapas).
Tabla de Verdad y mapas de E.S. y salida (D.E. a Tabla y Tabla a mapas).
Implementacin, con multiplexores y flip-flop tipo D.
Cdigo VHDL completo y diagrama de tiempo (simulado).

ASM:
Viendo el diagrama de estados podemos formar el diagrama ASM, solo tenemos que ver
las condiciones de entrada (bloque de decisin) y las salidas que sean 1 (inicio/fin).
Las salidas que tienen un inicio/fin(ovalo), son salidas tipo Mealy, es decir, varan acorde
la condicin de entrada.

Resetn

00

Ta

0
0
S2

S1

S1

Dir1

Dir2

Tb

11

Tc

Dir1

S2

10

Dir2

1
S1

Mapas de Karnaugh
-

Para el mapa de estado siguiente, nos posicionamos en un estado cualquiera, el inicial


preferible podra ser (Ta), y vemos las rutas posibles que tiene este estado al llegar a
otros estados, solo tomamos en cuenta los estados que tengan en su cdigo, el bit de
1 debido a que ste se multiplica por la ecuacin resultante en la trayectoria.

En Ta (00):
En el camino rojo vemos que hay unas dos ecuaciones en la posicin de 1 :
2 1 + 2 1 = 2 1

En la trayectoria azul, hay un solo camino en la posicin de 0 :


2 1

Como no hay ms caminos, esta dupla la colocamos en el mapa de Karnaugh en la posicin 00


y as continuamos con el siguiente estado:
En Tb (11):
Camino naranja, posicin 1 :

Camino verde, posicin 0 :


2

En Tc (10):
Camino morado, posicin 1 :
1
En 0 no hay presencia de 1 en la trayectoria, entonces es 0

(1 , 0 ):
1
0

2 1
2 1 ,

1 , 0

2
,

Decodificador de estado siguiente

Para la salida, solo vemos los bloques de inicio/fin (ovalos), ya que estos son 1s a la salida, as
mismo, nos centramos en un estado, preferible el estado inicial, y ver las trayectorias hacia
otro estado, pero solo en donde haya las condiciones de salida.
La posicin la determina la variable de salida acorde al formato establecido.

En la posicin de Dir1:
Camino rojo (Ta)
2 1

Camino verde (Tb)


2

En la posicin de Dir2:
Camino azul (Ta)
2 1
Camino morado (Tc)
1

(2 , 1 ):

(deco de salida)
1
0

2 1
S2 S1 ,

1 , 0

0 ,
2

Por tablas de verdad:


E.P.
1
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1

IN
0
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1

1
0
1
1
0

1
0
1
0
1
1
0
0

2
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1

E.S.
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
0
1
0
0

0
0
0
0
1
1
0
0

1
0
1
1
0

1
0
1
0
1
1
0
0

2 1

OUT
0
0
1
0
0

0
0
0
0
1
1
0
0

2
0
0
1
0

1
0
1
0
0
0
0
0
2
0
0
1
0

1
0
1
0
0
0
0
0

1
0
1
0
0

0
0
0
0
1
1
0
0

2 1

1
0
1
0
0

0
0
0
0
1
1
0
0

2 1

Este mtodo es Variable Entrante al Mapa, la tabla debe ser reducida hasta que tenga las
variables de estado actual, despus stas salidas colocarlas en un mapa de Karnaugh:
Decodificador de Estado Siguiente:
1
0

2 1
2 1 ,

1 , 0

2
,

2 1
S2 S1 ,

1 , 0

2
0,

Decodificador de Salida
1
0

Si existen demasiadas entradas, no es recomendable hacer una tabla de verdad debido a la


cantidad excesiva de combinaciones que se deben realizar, cuando este problema se presenta,
es recomendable realizar el diagrama ASM y posteriormente realizar los mapas.

Implementacin:
S2

S1

1
1

0
S2
0
S1

1
FF-D

1 MUX

Y1

8-1

Dir2

MUX
8-1

D
Q

1
3

Clock
reset

0
1

0
S1
1 MUX
8-1

FF-D
Y0

S2

D
Q

2
Clock
reset

1
2
3

Clock

reset

MUX
8-1

Dir1

VHDL:
library ieee;
use ieee.std_logic_1164.all;
-- black box o bloque general con entradas y salidas
entity ejemplo_e_14 is
port(S1,S2,clk,Resetn: in std_logic; Dir1,Dir2: out std_logic);
end ejemplo_e_14;
architecture behaviour of ejemplo_e_14 is
-- estados
type states is (Ta,Tb,Tc);
signal y: states:=Ta;
begin
-- deco de estado siguiente
process(clk,Resetn)
begin
if Resetn = '0' then y <= Ta; -- reset asincrono
elsif clk = '1' and clk'event then --flanco positivo
case y is
when Ta =>
if
(S2 = '0' and S1 = '0') or (S2 = '1' and S1 = '1') then
y <= Ta;
elsif S2 = '0' and S1 = '1' then y <= Tb;
elsif S2 = '1' and S1 = '0' then y <= Tc;
end if;
when Tb =>
if
S2 = '0' then y <= Tb;
else y <= Ta;
end if;
when Tc =>
if
S1 = '0' then y <= Tc;
else y <= Ta;
end if;
end case;
end if;
end process;
-- deco de salida
process (y,S1,S2)
begin
Dir2 <= '0'; Dir1 <= '0';
case y is
when Ta =>
if
S2 = '0' and S1 = '1' then Dir1 <= '1';
elsif S2 = '1' and S1 = '0' then Dir2 <= '1';
end if;
when Tb =>
if
S2 = '0' then Dir1 <= '1';
end if;
when Tc =>
if
S1 = '0' then Dir2 <= '1';
end if;
end case;
end process;
end behaviour;

2 ) Pasar de Mapas a ASM y cdigo VHDL


Datos:
Decodificador de estad siguiente
(2, 1, 0) :
2 1

00

01

11

10

0 , 0 , 1

0, 1 , 1

0,0,0

0,1, 3

2 1 , 0 , 2 1

0, 2 , 2

0,0,0

0,0,0

00

01

11

10

1 ,0 ,0

1 , 1 , 0

0,0,0

0,0, 3

2 1 , 0 , 0

1, 2 , 2

0,0,0

0,0,0

0
0

Decodificador de salida
(3 , 2 , 1 ) :
2 1
0
0

Para este problema no es necesario la asignacin de estado, pero al momento de realizar


el cdigo en VHDL se necesita el nombre de los estados, as le asignaremos los nombres:
2 1
0

00

01

11

10

Ta

Tc

Tg

Te

Tb

Td

Th

Tf

Como ya sabemos los nombres para los estados, entonces podemos posicionarnos en el
estado de Ta, evaluaremos primero al mapa de estados, despus evaluaremos al de
salida:
Estados Siguientes
En Ta (000)
0

000

Ta

001

Tb

0, 0, I1

Vemos que la entrada I1 es la nica condicin para pasar de un estado a otro o quedarse
en el mismo estado. Continuamos en el siguiente estado Tb

0
2 1 , 0 , 2 1

000

Ta

I1

001

Tb

100

Te

2 , 0 , 2

Por intuicin y lgica, evaluamos primero a I1 debido a que este esta no-inverso y la
entrada I2 puede tomar cualquier valor, es decir un dont care.
Seguimos al siguiente estado Tc:

010

Tc

001

Tb

0, 1 , 1

Continuamos con Td:

0, 2 , 2

I2

000

Ta

011

Td

010

Tc

011

Td

Continuamos con Te
0,1, 3

I3

Para Tf, Tg y Th son estado cero, es decir, los estados anteriores no nos conducen a
stos, no se los evalu.
Ahora las salidas
Vemos solo cuando se hace uno en las salidas:
Ta: (es Moore)
O3

Tb:
2 1 , 0 , 0

I2

000

I1 0 0

000

O3

I1

Tc:
0

010

O2

100

O3

1 , 1 , 0

Td:

110

O2

101

O1

1 , 2 , 2

En Td el 1 que est a la salida, representa una salida Moore

Te:

000

001

0 , 0 , 3

Las dems salidas son cero.


Procedemos a dibujar el ASM

O1

Resetn
Ta

000
3

1
1
Tb

001

1
1

2
1

Te

100

1
0

Tc

010

Td

011
3

VHDL:
library ieee;
use ieee.std_logic_1164.all;
entity mapas is
port( I3,I2,I1,clk,resetn
:
in std_logic;
O3,O2,O1
:
out std_logic);
end mapas;
architecture behaviour of mapas is
type estados is (Ta,Tb,Tc,Td,Te);
signal y: estados;
begin
--transiciones
process(clk,resetn)
begin
if resetn = '0' then y <= Ta;
elsif (clk = '1' and clk'event) then
case y is
when Ta =>
if
I1 = '0' then y <= Ta;
else y <= Tb; end if;
when Tb =>
if
I1 = '0' then y <= Ta;
elsif I2 = '0' then y <= Tb;
else
y <= Te; end if;
when Te => --seguii el orden del ASM, no importa
if
I3 = '0' then y <= Tc;
else
y <= Td; end if;
when Tc =>
if
I1 = '0' then y <= Tc;
else
y <= Tb; end if;
when Td =>
if
I2 = '1' then y <= Td;
else
y <= Ta; end if;
end case;
end if;
end process;
--salidas
process(y,I3,I2,I1)
begin
O3 <= '0' ; O2 <= '0' ; O1 <= '0';
case y is
when Ta => O3 <= '1';
when Tb => if I1 = '1' and I2 ='1' then
O3 <= '1';
end if;
when Te => if I3 = '1' then O1 <= '1';
end if;
when Tc => if I1 = '0' then O3 <= '1';
else O2 <= '1'; end if;
when Td => if I2 = '1' then
O3 <= '1' ; O1 <= '1';
else
O3 <= '1' ; O2 <= '1';
end if;
end case;
end process;
end behaviour;

Simulacin:

3 ) Diseo de un automtico para tanque elevado


-Como estado inicial, asumimos el
tanque lleno, entonces, en este
momento S2 = 0 y S1 = 0.
S2

-Medio vaco las seales toman el valor


de S2 = 1 y S1 = 0.
-Y completamente vaco S2 = 1 y S1 = 1,
este es un estado diferente al anterior.

Seal
de
Voltaje

S1

-De vuelta el llenado son los pasos


anteriores, pero al revs, conservando
la salida del estado anterior.

Diagrama de estado:
Formato: S2, S1 / w

0/0

a/0

00/1

11/0

b/1

1/1

Tabla de estados:

y0
0
0
0
0
1
1
1
1

S2
0
0
1
1
0
0
1
1

S1
0
1
0
1
0
1
0
1

Y0
0

0
1
0

1
1

w
0

0
0
1

1
1

Implementacin:
El valor de 01 en las entradas es un valor imposible fsicamente, as que se le da un dont care.
En el estado siguiente (Y0), cuando estamos en el estado a, al dont care le damos un valor de
1 para que se parezca a la entrada S1, cuando estamos en b, al dont care le damos un valor de
0 para que se parezca a S2.
La salida w cuando y0 es cero, podemos darle el valor de cero al dont care, cuando y0 es 1, le
damos el valor de 1 al dont care, hacemos esto para que la salida no dependa de la entrada y
no gastar compuertas (mquina de Moore), en pocas palabras, estamos tomando el valor de y0
como salida.

resetn

Cdigo VHDL:
library ieee;
use ieee.std_logic_1164.all;
entity autotank is
port(S1,S2,clk,resetn : in std_logic;
w
: out std_logic);
end autotank;
architecture behaviour of autotank is
type states is (a,b);
signal y: states;
begin
process(clk,resetn)
begin
if resetn = '0' then y <= a;
elseif clk = '1' and clk'event then
case y is
when a => if
S1 = '0' then
elsif S2 = '1' then
end if;
when b => if
S2 = '1' then
elsif S1 = '0' then
end if;
end case;
end if;
end process;
process(y,S1,S2)
begin
case y is
when a => w <= '0';
when b => w <= '1';
end case;
end process;
end behaviour;

y <= a;
y <= b;
y <= b;
y <= a;

ASM:

Resetn

Ta

S1

S2
1
Tb

1
w

1
S2
0

S1

Simulacin en Quartus ii :

4 ) Dado el cdigo en VHDL incompleto y el diagrama de tiempo:

Grafique el diagrama de estados.


Cdigo VHDL completo.

Solucin:
Tenemos que darnos cuenta que no nos dan el cdigo completo de VHDL, solo nos
proporcionan informacin de las entradas y salidas y tambin el cdigo del
decodificador de estado siguiente. Debemos de ver las salidas en el diagrama de tiempo
y ver las salidas que genera cada estado (si es Mealy o Moore)

Vemos que, al inicio, en el estado a aparecen 0s y 1s, cuando A1 = 0 y A2 = 1, W = 1 y


cuando A1 = 1 y A2 = 1, W = 0, tambin nos percatamos en otro intervalo de tiempo que
cuando A1 = 0 y A2 = 0, W = 0, estas salidas son pertenecientes al estado a, entonces
a es Mealy.
En el estado b vemos que tambin es Mealy, con A1 = 1 y A2 = 0, W = 0, con A1 = 1 y
A2 = 1, W = 1, con A1 = 0 y A2 = 0, W = 0.
En el estado c vemos tambin que es Mealy, con A1 = 0 y A2 = 1, W = 0, con A1 = 0 y
A2 = 0, W = 1, con A1 = 1 y A2 = 0, W = 0.
Ahora vemos con qu valor o valores de entrada, pasa al siguiente estado y para eso,
tenemos que ver en cambio en los flancos, vemos que de a a b se necesita una entrada
de A1 = 1 y A2 = 0, de b a c se necesita una entrada de A1 = 0 y A2 = 1 y de c a a
A1 = 1 y A2 = 1.
Ahora procedemos a graficar el diagrama de estados.
Formato: A1, A2 / W
resetn

00/0
01/1
11/0

10/0
11/1

10/0
11/1
00/0

01/0

00/1
01/0
10/0

Vemos que en el cdigo de VHDL en la parte del decodificador de estado siguiente, en


la parte de when a => el if solo toma en cuenta el valor de A1, entonces el A2 sera un
dont care, pero despus hay un elsif en donde pregunta por A2 pero solo cuando es
cero, en esta parte del elsif, la entrada A1 predeterminadamente toma el valor de 1,
entonces tenemos 10/0, pero, dnde est la combinacin de 11?, la salida de 0 con
entradas 11 en el estado a, debe ser un valor imposible fsicamente para la mquina
secuencial y por defecto se le ha asignado en el decodificador de salida una salida de
cero en esta combinacin para este estado. Revisamos todas las salidas con entrada de
datos imposibles y vemos que en b la combinacin 00 genera 0 en el mismo estado,
tambin en c 10/0 en el mismo estado. El diagrama de estado sera entonces:

Formato: A1, A2 / W

Si desarrollasen el ASM de la mquina al principio, se darn cuenta que al llegar a los


bloques de condicin al preguntar solo por un valor (0 o 1) de una variable de entrada,
no sabrn a donde colocar la flecha
resetn

Ta

W
1
0

A2

A1
1

A2

Salida asignada por default


en la codificacin en VHDL

11/0
Tb

Cdigo VHDL completo:

Se us para el decodificador de salida la declaracin PROCESS, CASE IS, WHEN


Cmo ven en el decodificador de salida, la salida est asignada con 0 en la lnea
32, acorde a las condiciones de entrada, la salida toma los valores de 1, pero para los
valores de entrada que no existen, toman automticamente los valores de 0 en la salida.

Apuntes:
1. Las salidas de un estado en un diagrama de estado no deben ser ms de 2 ,
donde es el nmero de entradas de la MSS, el estado puede recibir cualquier
cantidad de entradas.

Formato: x, y / z

a
00/0

11/1
01/0

10/0

Vemos en el formato que el nmero de


entradas que tiene la MSS son 2(x e y),
entonces 22 = 4 , esto son 4
combinaciones posibles que puede
presentar este estado a la salida, no
puede exceder el nmero de
combinaciones debido a que las salidas
son nicas.

2. Las flechas de salidas pueden tener dont care en sus entradas, pero no en la
salida:

a
0/0
11/1
10/1

El dont care representa 1 o 0, es decir en la


flecha
de
bucle,
tenemos
las
combinaciones 00/0 o 01/0, es decir, no
estamos tomando en cuenta la segunda
entrada.

3. Si no hay combinacin existente en la salida de un estado, se le asigna dont


care en el estado siguiente y salida.
resetn
0/0
a

11/0

00/1

1/1

0
a
A
A
A
B
b
B
B

0
0
1
1
0
0
1
1

0
1
0
1
0
1
0
1

0
a

a
b
a

b
b

0
0
1

1
1

Como vemos en el punto 3, la combinacin que no existe en la mquina de estado es


cuando X = 0 e Y = 1, la salida se le puede dar cualquier valor, tambin armando un mapa
de Karnaugh. En La parte del desarrollo del ASM, el bloque de decisin de la entrada que
solo presenta una condicin (solo 1 o 0), a la entrada contraria, se la puede asignar a la
salida un 0 y regresar al mismo estado
Ta

1
0

1
Siguiente estado

Aunque en la programacin con VHDL se le puede asignar a todas las salidas y que no
estn en la descripcin como cero si se usara una asignacin al inicio en la descripcin
del decodificador de salida
--deco de salida
process(y,X,Y)
begin
Z <= '0';
case y is
when b => Z <= '1';
end case;
end process;
end behaviour;

4. El nmero de flip-flops que se va a usar es igual al techo del logaritmo en base 2


del nmero de estados:
= log 2 ( )
-Si contamos con 3 estados, entonces necesitamos 1.584 = 2 flip-flops tipo D
- Si tenemos 7 estados, entonces el # de FF-D seran 2.807 = 3 FF-D
Otra forma es aproximar es sabiendo que 2 = , podemos dar al # de FF-D un
valor entero mximo aproximado, 2 = 7, entonces 3.

5. El nmero de estados siguientes, que es igual al nmero de estados presentes (o


estado actual), es igual a nmero de flip-flops tipo D y viceversa.
6. La Tabla de estados presentes siguientes se la forma de la siguiente manera.

Estados presentes
entradas
. . 1 0
.

Estados siguientes
. . 1 0

salidas
3 .

7. La asignacin de estado se la hace con distancia unitaria, eso se logra


transformando los nmeros en binario (# de estados) a cdigo Grey o dando
distancia unitaria a los estados cercanos a un estado.
8. En el ASM, los caminos o flechas, solo me representan ceros en las salidas, si se
especifica un 1 en la salida, se coloca un inicio/fin con el nombre de la salida o
salidas si es Mealy, si es Moore, el nombre de la variable de salida o salidas, va
adentro del estado.

Estado con una salida O3 = 1


Salida condicional. Solo
cuando I1 toma el valor de 0,
el estado Tc entrega solo a
O2 = 1.

9. Los mapas de Karnaugh se reducen de tal forma que se deben ingresar las
entradas de la MSS como variables de entrada al mapa (V.E.M.) y los estados
actuales como variables combinatorias.

El siguiente mapa representa 2 mapas en uno, la coma separa a Y1 y a Y0.

Variables entrantes al mapa


Variables combinatorias

Se los hace de esta manera para utilizar un MUX, las variables de estado
presentes quedan como selectores de dato y las entradas en el MUX van
conectadas a la combinacin respectiva que presenta cada cuadro.

Vemos en el primer MUX que


hay una compuerta XOR, es la
combinacin en el casillero 00
de Y1, as sucesivamente se va
implementando
las
combinaciones hasta formar el
decodificador
de
estado
siguiente con su respectiva
memoria
(registro
de
sostenimiento o flip-flop D)

10. Combinaciones tiles

0
0
1
1

0
1
0
1

+
0
1
1
1

0
0
1
1

0
1
0
1

0
0
0
1

0
0
1
1

0
1
0
1

0
1
1
0

0
0
1
1

0
1
0
1

1
0
0
1

0
0
1
1

0
1
0
1

1
1
1
0

0
0
1
1

0
1
0
1

+
1
0
0
0

0
0
1
1

0
1
0
1


0
1
0
0

0
0
1
1

0
1
0
1


0
0
1
0

11. La reduccin de estado se la puede realizar con un mapa de Karnaugh


comparando los estados que se pueden repetir junto con sus salidas, si se repite,
el cdigo de estado es reemplazado con el que se ha comparado en la repeticin
de estados

S-ar putea să vă placă și