Sunteți pe pagina 1din 3

Ejemplos de Diseño: Máquinas de estados.

Ejemplo 1: Síntesis tradicional con implementación discreta.

Especificación: Diseñar un contador de 2 bits con entrada para inhibir el conteo (ALTO) y entrada de reinicio
(RST).

Solución

Paso 1: Obtener el diagrama de estados.

Figura 1. Diagrama de estados empleando la representación de Mealy o Moore.


C0 00

V ALTO

F F
C3 11

ALTO

V V
C1 01

ALTO

F F
C2 10

ALTO V

Figura 2. Diagrama de estados empleando la representación de cartas ASM.

Paso 2: Obtener la tabla de transición de estados usando la tabla de excitación del flip flop elegido para la
implementación (D en este caso).

Entrada Edo. Actual Edo. Sgte. Fun. de Transición Clear D CLK Q /Q


QbQa QbQa DbDa 0 0  0 1
ALTO C0 00 C1 01 01 0 1  1 0
ALTO C1 01 C2 10 10 1* X X 0 1
ALTO C2 10 C3 11 11
ALTO C3 11 C0 00 00 *clear asíncrono
/ALTO C0 00 C0 00 00
/ALTO C1 01 C1 01 01
/ALTO C2 10 C2 10 10
/ALTO C3 11 C3 11 11
Paso 3: Obtener las ecuaciones lógicas de la función de transición o función de estado siguiente, y simplificarlas si es
necesario.

= + + +

= + + +

Al simplificar se obtienen las siguientes ecuaciones:

= + +

= +

Paso 4: Realizar la implementación del circuito y verificar su funcionamiento.

Edo. actual Edo. siguiente

R1 R2 U1:A U1:B

10
4

10K 10K
Db 2 5 b Da 12 9 a
S

S
D Q D Q
U1:A(CLK)
3 11
RST

CLK CLK
6 /b 8 /a
Q Q
R

R
ALTO

Db
Da
1

13

b
a
74LS74 74LS74
U4:D
ALTO 13
/ALTO
11
12
RST
74LS00

U2:A U4:A
b 1 a 1
3 3
/ALTO
/a 2 2
U4:C
74LS00 74LS00 10
8 Da
U2:B U3:A U4:B 9
b 4 1
/a 4
6 2 12 Db 74LS00
/ALTO 6
5 13 ALTO
5
74LS00 74LS10
74LS00

U3:B
/b 3
a 4 6
ALTO 5

74LS10
Ejemplo 2: Síntesis usando VHDL y un PLD (gal22v10).

Paso 1: Obtener el diagrama de estados.

Se emplea el diagrama de estados de la figura 1 o 2.

Paso 2: Realizar la implementación, codificar en VHDL siguiendo una estructura definida, compilar y depurar el
código finalmente implementar en un PLD (gal22v10).
LIBRARY ieee; ELSE
USE ieee.std_logic_1164.all; nx_state <= uno;
------------------------------------------------- END IF;
ENTITY counter IS WHEN uno =>
PORT ( clk, rst, alto: IN STD_LOGIC; contador <= "01";
contador: OUT STD_LOGIC_VECTOR (1 DOWNTO 0)); IF alto = '1' THEN
END counter; nx_state <= uno;
------------------------------------------------- ELSE
ARCHITECTURE state_machine OF counter IS nx_state <= dos;
TYPE state IS (cero, uno, dos, tres); END IF;
SIGNAL pr_state, nx_state: state; WHEN dos =>
BEGIN contador <= "10";
-------------------------------------------------- IF alto = '1' THEN
PROCESS (rst, clk) nx_state <= dos;
BEGIN ELSE
IF (rst='1') THEN nx_state <= tres;
pr_state <= cero; END IF;
ELSIF (clk'EVENT AND clk='1') THEN WHEN tres =>
pr_state <= nx_state; contador <= "11";
END IF; IF alto = '1' THEN
END PROCESS; nx_state <= tres;
-------------------------------------------------- ELSE
PROCESS (pr_state) nx_state <= cero;
BEGIN END IF;
CASE pr_state IS END CASE;
WHEN cero => END PROCESS;
contador <= "00"; END state_machine;
IF alto = '1' THEN -------------------------------------------------
nx_state <= cero;

Paso 3: Simulación y prueba física.

U1(I0/CLK) U1
1 23 d1
I0/CLK IO0
rst 2 22
I1 IO1
ALTO 3 21
I2 IO2
R1 R2 4
I3 IO3
20
10K 10K 5 19
I4 IO4
6 18
I5 IO5
7 17
I6 IO6
8 16
I7 IO7
9 15
I8 IO8
rst 10
11
I9 IO9
14 d0
d1
d0

rst I10
13
I11

ALTO AM22V10

ALTO

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