Vous êtes sur la page 1sur 5

Mquinas de Estados en la GAL22V10 Usando ABEL-HDL

Una Mquina de estados es un dispositivo digital que atraviesa una predeterminada secuencia de
estados. Las mquinas de estados se usan tpicamente para control lgico secuencial. En cada
estado, el circuito almacena su historia pasada y usa tal historia para determinar qu hacer a
continuacin.
Este documento ofrece una gua para ayudar al estudiante a formar diagramas de estado fciles de
leer y mantener y ayudarle a evitar problemas. Las mquinas de estados a menudo tienen muchos
estados diferentes y transiciones complejas de estado que contribuyen a los problemas ms
comunes, el cual es que demasiados trminos producto son creados para el dispositivo electo. Los
tpicos discutidos en los siguientes prrafos aconsejan al estudiante cmo evitar este problema al
reducir el nmero de trminos producto requeridos.
La pgina siguiente provee de consideraciones sobre Mquinas de estados:
Usar identificadores en lugar de Nmeros para los estados
Registros de Estados de arranque
Condiciones de Transicin no satisfechas, usar Flip-Flops tipo D
Condiciones de Transicin no satisfechas, usar otros Flip-Flops
Numerar Estados Adyacentes con un cambio de bit
Usar salidas con Registros de Estado para Identificar Estados
Usar Descripciones Simblicas de Estado
Usar identificadores en lugar de Nmeros para Estados
Una Mquina de estado tiene diferentes estados que describen las salidas y las transiciones de
la mquina en cualquier punto dado. Tpicamente, cada estado est dado por un nombre, y la
Mquina de estados est descrita en trminos de transiciones desde un estado hacia otro. En un
dispositivo real, tal Mquina de estados se implementa con registros que contienen suficientes
bits para asignar un nico nmero a cada estado. Los estados son en realidad valores de bits en
los registros, y tales valores de bits se usan junto con otras seales para determinar las
transiciones de estado.
Mientras el estudiante desarrolla un diagrama de estados, l necesita etiquetar varios estados y las
transiciones de estados. Si l etiqueta los estados con identificadores que les han asignado valores
constantes, en vez de etiquetar los estados directamente con nmeros, l puede fcilmente
cambiar las transiciones de estado o los valores de los registros asociados con cada estado.
Cuando el estudiante escribe un diagrama de estado, deber primero describir la Mquina de
estados con nombres para los estados, y despus asignar valores de bits a los registros de estado
a los nombres de los estados.
Para un ejemplo, ver la siguiente Figura para una Mquina de estado llamada MaqEdos. (Tal
Mquina de estados es tambin discutida en el ejemplo de diseo.) . En el ejemplo, los
identificadores (A, B, C y D) especifican los estados. A tales identificadores se les asigna un
valor constante decimal en la seccin de declaraciones que identifican los valores de bit en el
registro de estado para cada estado. A, B, C y D son slo identificadores: ellos no indican el
patrn de bits de la mquina de estados. Sus valores declarados definen el valor del registro de
estados (sreg) para cada estado. Los valores declarados son 0, 1, 3 y 2.
Prof. S. Saucedo

ICE/2007

Figura 1. Diagrama de mquina de estados con cuatro estados.

Secuencia de cuatro estados


El siguiente diseo es un simple secuenciador que demuestra el uso de ABEL-HDL para definir
los diagramas de estado, con el software de desarrollo ispLEVER starter de Lattice. El nmero de
estados del Diagrama de Estados que puede ser procesado depende del nmero de transiciones y
la ruta de las transiciones. Por ejemplo, un contador de 64 estados usa menos trminos (y
ecuaciones ms pequeas) que un contador de 63 estados. Para diseos de contadores grandes,
usar la sintaxis CuentaA:= CuentaA + 1 para crear un contador en lugar que usar una mquina de
estados. Ver tambin el ejemplo del contador universal para posterior informacin sobre
implementacin de contadores.

Prof. S. Saucedo

ICE/2007

MODULE MaqEdos
TITLE 'Maquina de Estados'
q1,q0
pin 14,15 istype 'reg,invert';
" entradas
reloj,hab,start,hold,reset pin 1,11,4,2,3;
" salidas
parar
pin 17 istype 'reg';
en_B,en_C,en_D
pin 18,19,20;
" registros de estados
sreg = [q1,q0];
" Valores de estado...
A = 0; B = 1; C = 3; D = 2;
equations
[q1,q0,parar].clk = reloj;
[q1,q0,parar].oe = !hab;
state_diagram sreg;
State A: " Se mantiene en estado A hasta que start se active.
en_B = 0;
en_C = 0;
en_D = 0;
IF (start & !reset) THEN B WITH parar := 0;
ELSE A WITH parar := parar.fb;
State B: " Avanza al estado C a menos que reset este activo
en_B = 1; " o hold este activo. Enciende indicador de parar
en_C = 0; " si reset.
en_D = 0;
IF (reset) THEN A WITH parar := 1;
ELSE IF (hold) THEN B WITH parar := 0;
ELSE C WITH parar := 0;
State C: " Avanza al estado D a menos que reset este activo
en_B = 0; " el reset se impone al hold.
en_C = 1;
en_D = 0;
IF (reset) THEN A WITH parar := 1;
ELSE IF (hold) THEN C WITH parar := 0;
ELSE D WITH parar := 0;
State D: " Regresa a A al menos que hold este activo
en_B = 0; " el reset se impone al hold.
en_C = 0;
en_D = 1;
IF (hold & !reset) THEN D WITH parar := 0;
ELSE A WITH parar := 0;

Fig. 2 Listado para disear con ABEL-HDL la Mquina de Estados (parte inicial)

Prof. S. Saucedo

ICE/2007

" vectores de prueba editados...


test_vectors
([reloj,hab,start,reset,hold]->[sreg,parar,en_B,en_C,en_D])
[ .p. , 0 , 0 ,
0 , 0 ] -> [ A ,
0 ,
0 , 0,
0];
[ .c. , 0 , 0 ,
0 , 0 ] -> [ A ,
1 ,
0 , 0 , 0];
[ .c. , 0 , 1 ,
0 , 0 ] -> [ B ,
0 ,
1 , 0,
0];
[ .c. , 0 , 0 ,
0 , 0 ] -> [ C ,
0 ,
0 , 1,
0];
[ .c. , 0 , 0 ,
0 , 0 ] -> [ D ,
0 ,
0 , 0,
1];
[ .c. , 0 , 1 ,
0 , 0 ] -> [ A ,
0 ,
0 , 0,
0];
[ .c. , 0 , 1 ,
0 , 0 ] -> [ B ,
0 ,
1 , 0,
0];
[ .c. , 0 , 0 ,
1 , 0 ] -> [ A ,
1 ,
0 , 0,
0];
[ .c. , 0 , 0 ,
0 , 0 ] -> [ A ,
1 ,
0 , 0,
0];
[ .c. , 0 , 1 ,
0 , 0 ] -> [ B ,
0 ,
1 , 0,
0];
[ .c. , 0 , 0 ,
0 , 1 ] -> [ B ,
0 ,
1 , 0,
0];
[ .c. , 0 , 0 ,
0 , 1 ] -> [ B ,
0 ,
1 , 0,
0];
[ .c. , 0 , 0 ,
0 , 0 ] -> [ C ,
0 ,
0 , 1,
0];
[ .c. , 0 , 0 ,
0 , 1 ] -> [ C ,
0 ,
0 , 1,
0];
[ .c. , 0 , 0 ,
0 , 0 ] -> [ D ,
0 ,
0 , 0,
1];
[ .c. , 0 , 0 ,
0 , 1 ] -> [ D ,
0 ,
0 , 0,
1];
[ .c. , 0 , 0 ,
0 , 0 ] -> [ A ,
0 ,
0 , 0,
0];
[ .c. , 0 , 0 ,
0 , 0 ] -> [ A ,
0 ,
0 , 0,
0];
[ .c. , 0 , 1 ,
0 , 0 ] -> [ B ,
0 ,
1 , 0,
0];
[ .c. , 1 , 0 ,
0 , 0 ] -> [.z. , .Z.,
0 , 1,
0];
[ .c. , 1 , 0 ,
0 , 0 ] -> [.z. , .Z.,
0 , 0,
1];
END

Fig. 2 Listado para disear con ABEL-HDL la Mquina de estados (parte final)

Especificacin del diseo


La figura 1 muestra al diseo del secuenciador con un diagrama de estados que exhibe las
transiciones y las salidas deseadas. La mquina de estados arranca en el estado A y permanece en
tal estado hasta que la entrada 'start' se hace 1. Entonces ella va desde el estado A hacia el
estado B, desde el estado B hacia el estado C, desde el estado C hacia el estado D y regresa al
estado A. Ella permanece en el estado A hasta que la entrada 'start' sea alta de nuevo. Si la
entrada 'reset' se hace 1, la mquina de estados retorna al estado A en el siguiente ciclo de reloj.
Si este reset hacia el estado A ocurre durante el estado B (o el C), un salida 'parar' sincrnica se
hace 1, y permanece alta hasta que la mquina es de nuevo arrancada
.
Durante los estados B, C y D, las salidas asncronas 'en_B', en_C y 'en_D' se hacen 1 para
indicar el estado actual correspondiente. Al activar la entrada 'hold', ella causar que la mquina
se detenga en un estado B, C o D. hasta que 'hold' no est ms en alto, o que 'reset' se haga 1.
Mtodo de diseo
El secuenciador se describe mediante el uso de la seccin STATE_DIAGRAM en el archivo
fuente. La figura 2 ilustra el archivo fuente para el diseo secuencial. En tal archivo, el diseo
recibe un ttulo, el dispositivo GAL22V10 es declarado antes, y las declaraciones de pines se
llevan al cabo. Las constantes se declaran para simplificar la notacin del diagrama de estados.
Los dos registros de estado se agrupan en un conjunto llamado 'sreg' y cuatro estados (A, B, C y
D) son declarados, con valores apropiados especificados para cada uno de ellos. Finalmente,
cuando la entrada hab se hace 1, las tres salidas sincrnicas se van al tercer estado.
Prof. S. Saucedo

ICE/2007

Vectores de Prueba
Al final del archivo fuente se especifican alrededor de veinte vectores para probar el cdigo
JEDEC grabado en la GAL22V10. Ver la figura 3.

Fig. 3. Formas de onda para los vectores de prueba.


Cablear la aplicacin segn el esquema siguiente:

reloj
hold
reset
start

hab
GND

Prof. S. Saucedo

+---------\
/---------+
|
\
/
|
|
----|
| 1
24 |
|
|
| 2
23 |
|
|
| 3
22 |
|
|
| 4
21 |
|
|
| 5
20 |
|
|
| 6
19 |
|
|
| 7
18 |
|
|
| 8
17 |
|
|
| 9
16 |
|
|
| 10
15 |
|
|
| 11
14 |
|
|
| 12
13 |
|
|
|
|
`---------------------------'

Vcc

en_D
en_C
en_B
parar

!q0
!q1

ICE/2007

Vous aimerez peut-être aussi