Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Microprogramacion
Microprogramacion
Facultad de Ingeniera
Departamento de Electrnica y Automtica
Microprogramacin
Estos dos mtodos permiten realizar las implementaciones ms rpidas de una MEF a costa de
perder flexibilidad. Como cada diseo requiere de conexiones especficas de acuerdo a las
ecuaciones obtenidas, una vez terminado el proyecto resulta bastante complicado introducir
modificaciones o ampliaciones al circuito. En el caso que se encuentren problemas en el dise-
o una vez que se ha lanzado el producto al mercado, cualquier cambio llega hasta el nivel del
circuito impreso, con un costo bastante alto en la reingeniera.
Otro mtodo para implementar las MEF, denominado lgica programada o microprograma-
cin, se basa en aprovechar la capacidad de las memorias de lectura (ROMs) para realizar
funciones combinacionales (ver la Fig. 1.3). En este caso no se realiza minimizacin alguna y
en la ROM simplemente se carga la tabla de verdad de las funciones de prximo estado y de
salida. Si bien el circuito resulta algo ms lento que los casos mencionados anteriormente, se
tiene la gran ventaja que los diseos son ms fciles de depurar, modificar y ampliar.
1
Entradas
Limpiar
Cargar
Registro de Estado
Contar Contador Sincrnico
Reloj
E1 A0 D0 S1
Entradas
Salidas
E2 A1 D1 S2
D2 S3
D Q A2
X0 D3 S4
D4 S5
D Q A3
PROM
X1
D5
D Q A4 Prximo
X2 D6 Estado
D7
D Q A5 D8
X3
Reloj
Este mtodo de diseo de las MEFs fue propuesto por M. V. Wilkes en 1951 y fue amplia-
mente utilizado para el diseo de la mayor parte de las computadoras y controladores de pe-
rifricos hasta la aparicin del microprocesador. Un microprocesador, a su vez, es una mqui-
na microprogramada en la mayora de los casos. Lo que se hizo en los 70s fue integrar en un
solo chip, la Unidad Aritmtico Lgica (ALU), los registros generales y especficos, el cami-
no de datos (datapath) y la unidad de control. En una arquitectura de procesamiento clsica
tipo CISC (Computadora con Conjunto de Instrucciones Complejo), la unidad de control casi
siempre es una MEF microprogramada. La ejecucin de una instruccin de mquina (tambin
llamada macroinstruccin) desencadena una serie de microinstrucciones que estn almacena-
2
das en la memoria de la unidad de control, y que tienen como resultado final la operacin que
se quiere realizar.
2. ESTUDIO DE CASO
A continuacin se describe el funcionamiento de un sistema digital simple que se tomar co-
mo ejemplo para describir distintas tcnicas de microprogramacin que se pueden plantear.
Sea un sistema para el clculo de la velocidad de un eje que gira (o tacmetro), sobre el cual
se ha montado un dispositivo optoelectrnico, cuyo haz es interrumpido por una lmina soli-
daria al eje. El sistema consta en un contador que cuenta estos pulsos durante un cierto tiempo
de duracin fija, el que se usa como base de tiempo. El valor final de cuenta del contador debe
ser cargado en un registro temporario (cerrojo o latch) que est conectado al bus de datos de
un microprocesador. La ventana de tiempo tambin es detectada por el microprocesador, por
lo que ste puede obtener el valor final de la cuenta con posterioridad al flanco descendente
de la base de tiempo. Al terminar cada ciclo de cuenta, el sistema de control debe cargar el
cerrojo y despus poner en cero el contador, a los efectos de que se inicie una nueva cuenta.
Si bien es evidente que esta tarea puede ser realizada directamente con el microprocesador,
como hiptesis se plantea que este subsistema funcione como un perifrico del microprocesa-
dor, ya que ste estar ocupado en otras tareas de mayor relevancia y urgencia. El contador
tiene una capacidad de 16 bits, pero puede ocurrir que durante la ventana de tiempo su capa-
cidad sea rebosada. Esta situacin debe ser tomada en cuenta por el microprocesador, por lo
que debe generarse una seal de interrupcin de tipo flanco cada vez que esta situacin se
produce. Internamente en el microprocesador se deber llevar la cuenta de la cantidad de ve-
ces que se rebos el contador antes de finalizar la ventana de tiempo, a los efectos de tener el
valor correcto de la cuenta.
En la Fig. 2.1 se tiene un diagrama en bloques del sistema planteado, y en la Fig. 2.2 la des-
cripcin algortmica del problema. La mquina consta de 5 estados, los que se denominan a,
b, c, d, y e. El estado a, es considerado el estado inicial de la mquina, al cual se llega accio-
nando sobre las entradas de limpiar (clear) de los flip-flops que conforman el registro de esta-
do, durante la inicializacin del sistema. La MEF permanece en dicho estado esperando que la
seal VENT (de Ventana) se active, es decir que pase de 0 a 1. Durante este tiempo, el con-
tador debe permanecer inhibido de contar, lo cual se realiza poniendo en cero la seal
HABCNT.
Una vez que la seal de la ventana de tiempo (VENT) pasa a su estado activo, se pasa al esta-
do b, en el cual se habilita la cuenta del contador con la seal HABCNT. En dicho estado se
permanece hasta que finalice la ventana de tiempo o bien que el dgito ms significativo del
contador se ponga en 1, indicando que la cuenta ha sobrepasado la mitad del valor mximo.
3
BUS DE DATOS DEL
MICROPROCESADOR
LATCH
Pulsos CONTADOR
HABCNT
Q15
LIMPCNT
CONTROL CRGLTCH
VENT
INT
4
En el caso de que el dgito ms significativo del contador se ponga en 1, la mquina pasa al
estado c, en el cual espera que VENT pase a 0, o bien que el dgito ms significativo del con-
tador se ponga nuevamente en 0. En este ltimo caso, el contador ha sobrepasado su mxima
capacidad de cuenta, por lo que se debe generar una interrupcin al microprocesador, para que
tome en cuenta esta situacin. Esto se realiza con la salida condicional INT, que se activa
cuando la entrada Q15, que es el dgito ms significativo del contador, pasa de 1 a 0. Debido a
que la interrupcin a generar necesita un flanco, el cual es retenido por el microprocesador, no
es necesario mantener esta salida en alto para que el microprocesador reconozca la interrup-
cin. Mientras la mquina est en el estado c, la salida HABCNT debe mantenerse activa, ya
que el contador debe seguir contando los pulsos de entrada mientras la ventana permanece en
1.
El estado c tiene dos prximos estados: el estado b se alcanza en el caso de que se rebose el
contador antes de que la ventana de tiempo pase a 0, y el estado d, al que se llega si se termina
el tiempo indicado por la seal VENT. Desde el estado b tambin se puede llegar al estado d
en la misma situacin. Es decir que cualquiera sea el camino seguido por la MEF para alcan-
zar el estado d, indica que el tiempo de cuenta ha terminado y que debe cargarse el registro
temporario con el valor de cuenta que tiene el contador. Esto se realiza activando la salida
CRGLTCH en el estado d. Dado que la seal VENT tambin es detectada por el microproce-
sador, en cada ciclo el valor del contador se ingresa al sistema de nivel superior a travs del
bus de datos. Del estado d se pasa al estado e en el cual se procede a limpiar el contador con
la salida LIMPCNT. Posteriormente se pasa al estado a para iniciar otro ciclo de cuenta.
Debido a que el problema planteado es al solo efecto de mostrar la tcnica de diseo con me-
morias ROM, se prescindir del anlisis de carreras de salida para realizar la asignacin de
estados. En los casos reales, debern tomarse en cuenta las recomendaciones que a tal fin
existen en la bibliografa, para realizar una asignacin de estados libre de carreras.
3. ESTRUCTURAS DE MICROPROGRAMACIN
Una MEF microprogramada es aqulla que est estructurada mediante una secuencia de pa-
sos o microinstrucciones que tienen como finalidad ejecutar las acciones o realizar las tareas
que tiene definidas. Si la MEF es la unidad de control de una computadora, cada secuencia de
microinstrucciones tiene por finalidad la ejecucin de una instruccin del repertorio de ins-
trucciones de la mquina. Cada una de las microsecuencias en que se divide una instruccin
de la computadora (ADD, MOVE; COMP; etc.) se denomina microinstruccin.
5
Direcciones
El formato de la palabra depende del esquema que se elija para la MEF. En funcin de la
complejidad del circuito y de las tareas que el mismo realiza se podr elegir el esquema que
ms convenga a la aplicacin. El costo del dispositivo y el rendimiento del mismo depender
de una adecuada seleccin del esquema y de los campos de las microinstrucciones.
El esquema ms simple que se puede configurar es el conformado por una memoria y un con-
tador binario conectado a las lneas de direccin de la memoria. Conectando una seal de reloj
que haga avanzar el contador, se irn direccionando todos los lugares de memoria y cuando se
llegue al ltimo, se vuelve a ejecutar la secuencia desde el principio. En la Fig. 3.2 se tiene un
diagrama de este sistema. La desventaja evidente es que la secuencia a realizar es fija y no se
puede alterar el flujo de ejecucin de las instrucciones. Como aplicacin de un esquema de
este tipo, puede mencionarse el sistema de control del encendido de un cartel luminoso para
publicidad, que normalmente sigue una secuencia fija que se repite cada cierto tiempo
Contador
6
3.1 DIRECCIONAMIENTO POR PASOS DE ENLACE
En el esquema descrito en pargrafo anterior, el prximo estado de la mquina queda definido
por la secuencia binaria del contador. Es decir que si se est en el estado n, donde n es cual-
quier nmero binario, el prximo estado es siempre el n+1, con la salvedad del ltimo que
tiene como prximo estado al primero. El formato de la palabra es totalmente utilizado para
guardar instrucciones o salidas de la mquina, ya que la determinacin del prximo estado la
realiza la lgica de prximo estado del contador (incrementar el contador en 1).
Dicho sistema no permite implementar una MEF tipo Moore o Mealy, ya que no se puede
definir ms de un prximo estado. Una alternativa es usar un campo de la palabra de la ROM
para definir el prximo estado, el que debe ser retenido en un registro externo a la memoria.
Dicho registro se conforma con tantos flip-flops tipo D como variables de estado tenga la
MEF. A este registro se lo denomina registro de estado, cauce o pipeline, ya que es por el que
se encauza la informacin del prximo estado a las lneas de direccin de la memoria. En la
Fig. 3.3 se tiene un esquema general de este caso.
El reloj del sistema, que es quien define el tiempo de estado, entra a las entradas de reloj de
los flip-flops. El prximo estado del sistema, que est definido por un campo de la ROM, se
carga a la salida del registro cauce con cada flanco activo del reloj, obtenindose una nueva
direccin de memoria en conjunto con el estado de las entradas en ese momento.
Cada entrada de la MEF tiene asignada una lnea de direccin de la memoria dedicada. Para
una situacin dada (un estado de la mquina), si la entrada est en 0, se accede a una palabra
de la memoria, y si est en 1, se accede a otra, con lo que se podrn definir dos prximos es-
tados. Este esquema permite implementar cualquier tipo de MEF (Moore o Mealy) sin necesi-
dad de reestructurar la carta ASM que describe el funcionamiento del sistema. Se denomina
direccionamiento por pasos de enlace debido a que cada paso o camino de enlace del diagra-
ma de estados, es decir cada lnea que lleva de un estado a otro, tiene asignado, al menos, una
7
direccin de memoria. Esto se muestra con un ejemplo, como el mostrado en la Fig. 3.4. En la
tabla 3.1 se describe cmo se tendra que llenar el campo de prximo estado de la memoria
para ese ejemplo.
Puede suceder que algn paso de enlace tenga asignado ms de un lugar memoria. Esto se
debe a que si una transicin entre estados es incondicional (ver la Fig. 3.5) o no depende de
todas las entradas de la mquina, entonces se debern asignar al mismo paso de enlace todas
las direcciones de memoria correspondientes a los valores 0 y 1 de las entradas que no se usan
en esa transicin. En dichos casos, el campo de prximo estado se llena con el mismo valor.
8
Un aspecto en el que hay que tener especial cuidado es con el llenado del campo correspon-
diente a las instrucciones o salidas de la MEF. Se debe recordar que la salida de una MEF es
funcin del estado presente (salidas Moore) y en algunos casos tambin de las entradas (sali-
das Mealy). Por lo tanto, para las salidas Moore se debe colocar un 1 en la columna corres-
pondiente a cada salida y en la fila correspondiente al estado de origen de cada transicin (o
paso de enlace). Por otra parte, para las salidas Mealy, se debe colocar un 1 en la columna
correspondiente a cada salida, pero nicamente en la fila correspondiente al paso de enlace en
que esa salida se activa.
Q15
VENT
MEMORIA
3 4
Salidas
Registro cauce Reloj D3 = INT
D2 = CRGLTCH
D1 = LIMPCNT
C B A Variables D0 = HABCNT
de estado
Figura 3.6 Esquema de direccionamiento por pasos de enlace para el caso de ejemplo.
En la Fig. 3.6 se tiene el esquema para el caso de ejemplo. En el tacmetro digital se tienen
4 salidas y 3 variables de estado, por lo que se necesitan 7 bits para conformar la palabra de la
ROM. Por otra parte se tiene 2 entradas y 3 variables de estado, por lo que se necesitan 5 lne-
as de direccin en la ROM. Es decir que se necesitaba una ROM de 32 palabras x 7 bits. De
los 32 lugares de memoria, se usan 20, dejndose el resto en 0. Esto ltimo es conveniente
desde el punto de vista de la robustez del sistema, ya que ante una falla que saque a la MEF de
su secuencia normal, se va automticamente al estado inicial.
A los efectos de facilitar el llenado de los datos en la ROM, conviene usar para las variables
de estado las lneas de direccin con peso ms alto, y para las entradas las de peso ms bajo.
De esta manera quedarn todos los lugares de memoria correspondiente a un mismo estado en
una zona adyacente en la memoria. As, para el caso de ejemplo se usan las lneas de direc-
cin A4, A3 y A2 para el estado presente, correspondientes a las variables de estado C, B y A
respectivamente. La lnea de direccin A1 se usa para la entrada VENT y A0 para Q15. El cam-
po de prximo estado utiliza 3 bits y se define as: D6 = C*, D5 = B* y D4 = A*. El asterisco
aqu indica prximo estado de la variable de estado. El campo de instrucciones o salidas se
define as: D3 = INT, D2 = CRGLTCH, D1 = LMPCNT y D0 = HABCNT.
9
3.1.1 PROCEDIMIENTO PARA EL LLENADO DE LA MEMORIA
Dir. A4 A3 A2 A1 A0 D6 D5 D4 D3 D2 D1 D0 Paso de
enlace
0 0 0 0 0 0 0 0 0 0 0 0 0 aa
1 0 0 0 0 1 0 0 0 0 0 0 0 aa
2 0 0 0 1 0 0 0 1 0 0 0 0 ab
3 0 0 0 1 1 0 0 1 0 0 0 0 ab
Para el estado a, como el prximo estado slo depende de la entrada VENT, se debern asig-
nar dos lugares de memoria para cada paso de enlace, las que corresponden a Q15 igual a 0 y
1 (es decir, la lnea de direccin A0). La transicin de a a ocupa las direcciones 00000 y
00001. El campo de prximo estado de esas dos direcciones se llena con el prximo estado de
esa transicin, es decir, el valor 000 correspondiente al estado a. La transicin de a b ocu-
pa las direcciones 00010 y 00011, colocndose en el campo de prximo estado de ambas di-
recciones el valor 001 correspondiente al estado b. En el estado a no se activa ninguna de las
salidas de la mquina, por lo que el campo de instrucciones de las cuatro direcciones mencio-
nadas est completamente en 0.
10
sicin b d. El estado b tiene definida como activa una salida Moore, HABCNT, por lo que
en el campo de instrucciones de las cuatro direcciones de la Tabla 3.4 se debe colocar un 1 en
la columna D0, correspondiente a esa salida.
Dir. A4 A3 A2 A1 A0 D6 D5 D4 D3 D2 D1 D0 Paso de
enlace
4 0 0 1 0 0 0 1 1 0 0 0 1 bd
5 0 0 1 0 1 0 1 0 0 0 0 1 bc
6 0 0 1 1 0 0 0 1 0 0 0 1 bb
7 0 0 1 1 1 0 1 0 0 0 0 1 bc
El estado c tambin tiene definidos tres prximos estados (ver la Fig. 3.9). El llenado del
campo de prximo estado es similar a los casos anteriores. Aqu la nica particularidad se
presenta con la salida Mealy INT, que aparece en la casilla de salida condicional. Esa salida se
activa si la MEF est en el estado c y adems se pone en 0 la entrada Q15. Esa condicin co-
rresponde al paso de enlace que tiene asignadas las direcciones 01000 y 01010, por lo que
slo en esas direcciones hay que poner un 1 en la columna de la salida INT. El estado c tam-
bin tiene definida una salida Moore, HABCNT, por lo que la columna correspondiente a esa
salida se llena con unos en todas las direcciones asignadas a este estado.
11
Figura 3.9 Pasos de enlace del estado c.
Dir. A4 A3 A2 A1 A0 D6 D5 D4 D3 D2 D1 D0 Paso de
enlace
8 0 1 0 0 0 0 0 1 1 0 0 1 cb
9 0 1 0 0 1 0 1 1 0 0 0 1 cd
10 0 1 0 1 0 0 0 1 1 0 0 1 cb
11 0 1 0 1 1 0 1 0 0 0 0 1 cc
En el estado d se tiene el caso de una transicin incondicional, es decir es una transicin que
no depende de ninguna de las entradas. De todas maneras se tienen que usar 4 direcciones de
memoria para definir el prximo estado y las salidas de ese estado, lo que significa un desper-
dicio importante de memoria, ya que la informacin aparece repetida cuatro veces. El campo
de prximo estado se llena en todos los casos con el valor 100 y en el campo de instrucciones
se debe poner un 1 en la columna correspondiente a la salida Moore que se activa,
CRGLTCH, tal como se observa en la Tabla 3.6. La transicin de e a es un caso similar y
se sigue el mismo procedimiento. En la tabla 3.7 se tiene el listado completo del contenido de
la memoria ROM para este caso.
12
Figura 3.10 Pasos de enlace del estado d.
Dir. A4 A3 A2 A1 A0 D6 D5 D4 D3 D2 D1 D0 Paso de
enlace
12 0 1 1 0 0 1 0 0 0 1 0 0 de
13 0 1 1 0 1 1 0 0 0 1 0 0 de
14 0 1 1 1 0 1 0 0 0 1 0 0 de
15 0 1 1 1 1 1 0 0 0 1 0 0 de
Como resumen de este esquema de microprogramacin, puede decirse que para cada estado se
deben usar 2 p direcciones de memoria, siendo p la cantidad de entradas de la MEF. A cada
paso de enlace de la MEF le corresponde al menos un lugar de memoria. Como ventaja se
tiene que con este esquema se puede implementar todo tipo de MEF, ya sean tipo Moore o
Mealy. La principal desventaja es que la memoria se duplica en longitud por cada entrada de
la mquina que se tenga o agregue. Para sistemas con muchas entradas la utilizacin de la
memoria es pobre y se hace muy engorroso el llenado del contenido de la memoria, lo que lo
hace un mtodo muy propenso a errores.
13
Dir. A4 A3 A2 A1 A0 D6 D5 D4 D3 D2 D1 D0 Paso de Definicin de
enlace las variables
0 0 0 0 0 0 0 0 0 0 0 0 0 aa A4 = C
1 0 0 0 0 1 0 0 0 0 0 0 0 aa A3 = B
2 0 0 0 1 0 0 0 1 0 0 0 0 ab A2 = A
3 0 0 0 1 1 0 0 1 0 0 0 0 ab A1 = VENT
4 0 0 1 0 0 0 1 1 0 0 0 1 bd A0 = Q15
5 0 0 1 0 1 0 1 0 0 0 0 1 bc
6 0 0 1 1 0 0 0 1 0 0 0 1 bb D6 = C*
7 0 0 1 1 1 0 1 0 0 0 0 1 bc D5 = B*
8 0 1 0 0 0 0 0 1 1 0 0 1 cb D4 = A*
9 0 1 0 0 1 0 1 1 0 0 0 1 cd D3 = INT
10 0 1 0 1 0 0 0 1 1 0 0 1 cb D2 = CRGLTCH
11 0 1 0 1 1 0 1 0 0 0 0 1 cc D1 = LMPCNT
12 0 1 1 0 0 1 0 0 0 1 0 0 de D0 = HABCNT
13 0 1 1 0 1 1 0 0 0 1 0 0 de
14 0 1 1 1 0 1 0 0 0 1 0 0 de
15 0 1 1 1 1 1 0 0 0 1 0 0 de
16 1 0 0 0 0 0 0 0 0 0 1 0 ea
17 1 0 0 0 1 0 0 0 0 0 1 0 ea
18 1 0 0 1 0 0 0 0 0 0 1 0 ea
19 1 0 0 1 1 0 0 0 0 0 1 0 ea
20 1 0 1 0 0 0 0 0 0 0 0 0 No esp.
21 1 0 1 0 1 0 0 0 0 0 0 0 No esp.
22 1 0 1 1 0 0 0 0 0 0 0 0 No esp.
23 1 0 1 1 1 0 0 0 0 0 0 0 No esp.
24 1 1 0 0 0 0 0 0 0 0 0 0 No esp.
25 1 1 0 0 1 0 0 0 0 0 0 0 No esp.
26 1 1 0 1 0 0 0 0 0 0 0 0 No esp.
27 1 1 0 1 1 0 0 0 0 0 0 0 No esp.
28 1 1 1 0 0 0 0 0 0 0 0 0 No esp.
29 1 1 1 0 1 0 0 0 0 0 0 0 No esp.
30 1 1 1 1 0 0 0 0 0 0 0 0 No esp.
31 1 1 1 1 1 0 0 0 0 0 0 0 No esp.
En este esquema, a las lneas de direccin de la memoria slo llegan las variables de estado de
la MEF. As, el largo requerido de la memoria es sensiblemente menor que en el caso del di-
reccionamiento por pasos de enlace. Se necesitar slo una direccin de memoria por cada
14
estado de la MEF. Como esto da lugar a una memoria corta y ancha, estos esquemas tambin
reciben el nombre de microprogramacin horizontal, y en general son los que permiten un
mayor grado de paralelismo en el funcionamiento de un sistema basado en microprograma-
cin.
La carta ASM del ejemplo debe modificarse para cumplir con la restriccin impuesta. Se de-
ben agregar estados en las transiciones que dependen de ms de una entrada, ya que este es-
quema slo permite seleccionar una entrada por estado. As, en la carta se deben agregar 2
estados: uno entre las dos casillas de decisin que afectan al estado b y otro entre las casillas
de decisin que afectan al estado c. En los casos en que hayan ms entradas que afecten a un
estado, se debern agregar todos los estados que sean necesarios entre las casillas de decisin
para cumplir con la restriccin impuesta.
Como no se admiten salidas Mealy, se debe transformar la salida condicional que contiene la
salida INT en un estado, con las modificaciones pertinentes para que no se cambie el algorit-
mo verbal definido para la MEF. Como en el lazo formado por los estados b y c se debe man-
tener activa la salida HABCNT, en el estado agregado para la salida Mealy tambin debe
agregarse dicha salida. La Fig. 3.12 muestra la carta ASM modificada para este esquema.
Como puede observarse, los requerimientos de la memoria han cambiado (ver la Fig. 3.13).
Para este caso se necesita: 1 bit para la seleccin de las entradas (se tienen 2 entradas); 3 bits
para el prximo estado si la entrada vale 0, 3 bits para el prximo estado si la entrada vale 1 y
por ltimo 4 bits para las instrucciones o salidas. Esto hace un total de 11 bits de ancho de
palabra de la ROM. Por otra parte, se necesita nicamente una palabra de memoria por cada
estado de la MEF, que con los estados que se agregaron suman 8.
15
000
VENT
001
b
HABCNT
Q15
010 101
c f
HABCNT HABCNT
Q15 VENT
011 100
110
e d
INT, HABCNT HABCNT g
CRGLTCH
111
VENT h
LIMPCNT
16
Direccin
MEMORIA
1 3 3 4
Pxmo. Est. Pxmo. Est.
3 Seleccin Instr.
0 1
Salidas
VENT 0
Mux 2:1
0 1 D3 = INT
Multiplexor 2:1 D2 = CRGLTCH
Q15 1 D1 = LIMPCNT
D0 = HABCNT
17
Para el estado a (ver la Fig. 3.14), se debe seleccionar la entrada VENT, por lo que en el cam-
po de seleccin se debe colocar un 0, indicando que el multiplexor de las entradas transfiera a
su salida el valor de dicha entrada. Si la entrada VENT vale 0, el prximo estado es el mismo
estado a, por lo que se debe colocar el valor 000 en el campo correspondiente al prximo es-
tado por 0. Si VENT vale 1, el prximo estado es el b, por lo que se debe colocar el valor 001
en el campo correspondiente al prximo estado por 1. En funcin del valor de la entrada, el
multiplexor horizontal seleccionar uno de los dos valores de prximo estado definidos para
cargarlo en el registro cauce con el prximo flanco del reloj. Como en el estado a todas las
salidas estn inactivas, se pone un 0 en todas las columnas del campo definido para las sali-
das.
Colocar un 1 en la columna
correspondiente a esta salida.
001 Entrada que hay que
seleccionar con el campo de
b Seleccin.
HABCNT
010 101
c f
HABCNT HABCNT
Para el estado b (ver la Fig. 3.15) hay definidos dos prximos estados diferentes, por lo que
este es el caso ms general. En este caso se debe seleccionar la entrada Q15, por lo que en el
campo de seleccin se debe colocar un 1. En los campos de prximo estado por 0 y por 1 se
coloca 101 y 010 respectivamente. En este estado slo est activa la salida HABCNT, y por lo
tanto se debe colocar un 1 en la columna correspondiente a esta salida (D0).
El llenado de la mayora de los otros estados es similar al anterior. Como caso particular se
tienen las transiciones incondicionales entre estados, es decir aqullas transiciones entre esta-
dos que no dependen de ninguna entrada y por lo tanto tienen definido un nico prximo es-
tado. En este caso, en los campos de prximo estado por 0 y 1 se debe colocar el mismo valor.
Por ejemplo, para la transicin de g h (ver la Fig. 3.16) el prximo estado es el 111 y se
debe colocar ese valor en ambos campos de prximo estado. En el campo de seleccin de las
entradas se puede colocar cualquier valor (0 1), pero no un valor no especificado ya que en
la memoria no se pueden cargar valores indefinidos. Para el llenado del campo de instruccio-
nes se sigue el mismo procedimiento que para los otros casos. En el caso en que en un estado
se active ms de una salida, como por ejemplo en el estado e, se debe colocar un 1 en la co-
lumna correspondiente a cada salida que aparezca en dicho estado. En la Tabla 3.11 se tiene el
contenido completo de la memoria para este esquema.
18
Figura 3.16 Determinacin de los valores de los campos del estado g.
Como puede observarse, la cantidad de bits necesarios para implementar este esquema es sen-
siblemente inferior al caso de direccionamiento por pasos de enlace. Usando direccionamiento
por pasos de enlace se tienen 20 x 7 = 140 bits, mientras que con direccionamiento por pares
Estado-Entrada, se tienen 8 x 11 = 88 bits para el mismo ejemplo, con un mejor aprovecha-
miento de la memoria.
Si bien la cantidad de bits utilizados en este ltimo caso es inferior, la realizacin prctica del
diseo puede requerir ms circuitos integrados (salvo que se haga la implementacin con un
FPGA o un ASIC). Por lo general las memorias se fabrican de 8 bits de ancho, por lo que el
primer caso requiere 1 CI, mientras que el segundo 2 CIs de memoria. En funcin del tamao
del problema y de los requerimientos de memoria, se deber tener cuidado en la definicin del
formato de la palabra de memoria. Ms adelante se ver una forma de reducir el ancho de la
palabra mediante la codificacin de las salidas.
19
incluir en el formato de la palabra de memoria 2 p campos de prximo estado, siendo p la
cantidad de entradas que se admiten por estado en la carta ASM. Adems, se debern agregar
los multiplexores que hagan falta para seleccionar la cantidad de entradas por estado que ad-
mita el esquema. En la Figura 3.17 se muestra el esquema del direccionamiento llamado de 4
Vas (porque admite 4 prximos estados).
Como se puede observar, este esquema es ms costoso en hardware que el anterior, pero se
tiene la ventaja que se tendrn que agregar menos estados si se tiene que modificar la carta. Se
siguen imponiendo las restricciones del caso de 2 vas, aunque ms relajadas con respecto a
las entradas. En este caso no se pueden tener ms de 2 entradas afectando a la transicin de
cada estado y slo se admiten salidas tipo Moore.
En la Fig. 3.18 se muestra cmo hay que llenar la memoria en el caso ms general. El campo
de seleccin en este caso, queda dividido en dos partes. Un grupo de bits S0 seleccionar la
primera entrada del multiplexor correspondiente a las entradas E1, y otro grupo de bits S1
seleccionar la segunda entrada del multiplexor correspondiente a las entradas E2.
20
PPP
Campo de Instrucciones:
p Colocar un 1 en la
Entrada que hay que Lista de Salidas
columna de cada salida
seleccionar con el campo que aparece en la lista.
de Seleccin S0.
E2
E2
q r s t
Es de destacar que no siempre hace falta poner los dos multiplexores de las entradas. Incluso
hay casos en los que no hace falta ninguno. Si la MEF tiene slo 2 entradas, dichas entradas
hay que conectarlas directamente al multiplexor horizontal y en tal caso, el campo de selec-
cin de la memoria no existe. Otro caso particular es cuando la MEF tiene 3 entradas y se da
el caso de que en cualquier transicin una de ellas siempre va acompaada de alguna de las
otras dos. En tal caso, la que siempre aparece se conecta directamente a una de las entradas
del multiplexor horizontal, mientras que la otra entrada se selecciona con un multiplexor de
entradas con el campo de seleccin correspondiente. En este caso sera un error agregar un
multiplexor para seleccionar slo una entrada.
El campo de prximo estado se llena de manera anloga al de 2 Vas, nada ms que en este
caso hay 4 campos a llenar de acuerdo a la combinacin binaria de las entradas. Un caso par-
ticular es cuando la transicin entre estados es incondicional, en el que en el campo de selec-
cin se puede poner cualquier valor y todos los campos de prximo estado se llenan con el
mismo valor de prximo estado. Lo mismo para las transiciones afectadas por una sola entra-
da, en el que dos campos llevan un valor de prximo estado y los otros dos llevan otro. Para el
llenado del campo de instrucciones se procede igual que en los casos anteriores, recordando
que las salidas Moore que aparecen en el estado se deben colocar en la fila correspondiente a
dicho estado (y no en la fila del prximo estado!!!).
Para el caso del tacmetro digital de ejemplo, la nica modificacin que habra que hacerle a
la carta ASM es transformar la casilla de salida condicional (salida Mealy) que depende del
estado c en un estado (el f), para cumplir con la restriccin de que slo hayan salidas Moore.
Para preservar el correcto funcionamiento de la MEF, adems se debe incluir en el estado f la
salida HABCNT. En la Fig. 3.19 se tiene la carta modificada para este esquema.
21
Figura 3.19 Carta modificada para el esquema de 4 Vas.
MEMORIA
3 3 3 3 4
Pxmo. Est. Pxmo. Est. Pxmo. Est. Pxmo. Est.
Instr.
00 01 10 11
Salidas
0 1 2 3 D3 = INT
VENT S0 D2 = CRGLTCH
Multiplexor 4:1 D1 = LIMPCNT
Q15 S1 D0 = HABCNT
22
En este caso la mquina slo tiene 2 entradas, y tal como se explic arriba, no hace falta
ningn multiplexor para las entradas. La entrada VENT se conecta directamente a la entrada
de seleccin S0 del multiplexor horizontal y la entrada Q15 a la S1, tal como se muestra en la
Fig. 3.20. En la palabra de memoria no hay ningn campo de seleccin de entradas.
Figura 3.21 Determinacin de los valores del campo de prximo estado del estado a.
Est. A2 A1 A0 C*00 B*00 A*00 C*01 B*01 A*01 C*10 B*10 A*10 C*11 B*11 A*11 D3 D2 D1 D0
a 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0
23
Valor a colocar en el campo
de prximo estado si las
entradas valen 01.
001
Colocar un 1 en la
b columna
HABCNT
correspondiente a
Valor a colocar en el campo esta salida.
de prximo estado si las
entradas valen 10 y 11.
Q15
010
c VENT
HABCNT
El estado b tiene definidos 3 prximos estados, habiendo dos que dependen de las dos entra-
das y uno que depende de una sola. As, si las entradas valen 00, en ese campo hay que colo-
car el valor 011, si valen 01 el valor es 001 y si valen 1X, en ambos campos hay que colocar
010. Tambin hay que colocar un 1 en la columna correspondiente a la salida HABCNT (D0).
Est. A2 A1 A0 C*00 B*00 A*00 C*01 B*01 A*01 C*10 B*10 A*10 C*11 B*11 A*11 D3 D2 D1 D0
b 0 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0 0 0 1
Un caso particular es el de las transiciones incondicionales. Por ejemplo, para el estado d (ver
la Fig. 3.22), el prximo estado es el e sin importar el valor de ninguna de las entradas de la
MEF. Por lo tanto habr que poner el mismo valor (100) en todos los campos de prximo es-
tado. La salida que se activa en este estado es CRGLTCH, por lo que hay que colocar un 1 en
la columna correspondiente (D2). La Tabla 3.15 resume el contenido de la memoria para el
esquema de 4 Vas.
24
Figura 3.23 Determinacin de los valores del campo de prximo estado del estado d.
Est. A2 A1 A0 C*00 B*00 A*00 C*01 B*01 A*01 C*10 B*10 A*10 C*11 B*11 A*11 D3 D2 D1 D0
d 0 1 1 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0
Est. A2 A1 A0 C*00 B*00 A*00 C*01 B*01 A*01 C*10 B*10 A*10 C*11 B*11 A*11 D3 D2 D1 D0
a 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0
b 0 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0 0 0 1
c 0 1 0 1 0 1 1 0 1 0 1 1 0 1 0 0 0 0 1
d 0 1 1 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0
e 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
f 1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 1 0 0 1
- 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25
d) Retener la cuenta actual usando las entradas de habilitacin ENP y ENT.
El uso del contador agrega restricciones adicionales, ya que, en funcin de las entradas de
control que se usen, se debe adaptar el resto del circuito al funcionamiento del contador. La
entrada Limpiar (CLR_L) normalmente se usa para la inicializacin de la MEF. Si bien se
pueden plantear esquemas en el que se usen todas las entradas de control de forma convenien-
te, en este trabajo slo plantearemos un esquema en el que se usa la entrada LD_L. En tal caso
la principal restriccin que aparece se da en la asignacin de estados. En general para cual-
quier estado dado, uno de los dos prximos estados deber siempre tener un cdigo que sea el
estado actual ms 1. Es bastante obvio que esto se debe a que el prximo estado asumido por
defecto es el actual ms 1, al que se le da el nombre de direccin asumida. El otro estado, que
puede tener cualquier otro cdigo de estado, se alcanza poniendo en bajo la entrada LD_L,
con lo que se cargar una nueva direccin de la memoria (la direccin de salto) en el conta-
dor.
De esta manera, al haber siempre una direccin asumida, el campo de prximo estado slo
necesita tener un solo campo, el de la direccin de salto. De esta manera se obtiene un es-
quema con menos bits de ancho. Una primera aproximacin a este esquema es el mostrado en
la Fig. 3.24.
En este caso el formato de la palabra se divide en 3 campos: uno para la direccin de salto,
otro para indicar si el contador se debe incrementar o si debe cargar el prximo estado desde
la memoria y un tercero para las instrucciones. El bit de Incrementar/Cargar se conecta a la
entrada respectiva del contador (LD_L). Si bien este esquema permite implementar una MEF,
no permite realizar saltos condicionados, por lo que su uso es muy limitado.
Una forma de tener la posibilidad de efectuar saltos condicionados por las entradas, es agregar
un multiplexor para las entradas y reestructurar el formato de la palabra de memoria, tal como
se muestra en la Fig. 3.25. Se sigue usando un campo para la direccin salto, que se conecta a
la carga en paralelo del PC. Con un segundo campo se selecciona una entrada del multi-
26
plexor de entrada, cuya salida se conecta a la entrada de Incrementar/Cargar (LD_L) del PC.
El tercer campo se utiliza para las instrucciones de salida de la mquina.
En el multiplexor de entrada puede ser necesario conectar una de las entradas a 0 y otra a 1,
de manera de tener la posibilidad de seleccionar un salto forzado o un incremento del PC
para las transiciones incondicionales. Es necesario aclarar que estas entradas del multiplexor
deben conectarse slo en caso de ser necesario. Si no hacen falta, no se deben incluir, ya que
en todos los casos se debe tratar de hacer la implementacin con el circuito ms simple.
En algunos casos se deber hacer algn cambio en las casillas de condicin de la carta para
cumplir con los requisitos del esquema de direcciones asumidas. Supongamos el caso mostra-
do en la Fig. 3.26. Si luego de hacer la asignacin de estados (y no habiendo forma de cam-
biarla) queda algn estado en el que la direccin asumida est por la salida negada de la casi-
lla de decisin (y por lo tanto, no se cumple con la tabla mostrada en la Fig. 3.25), se puede
cambiar la posicin de la burbuja de negacin al otro paso de enlace de salida de la casilla.
Para preservar el algoritmo descrito por la carta ASM, dentro de la casilla de decisin se debe
colocar el complemento de la entrada que afecta esa transicin. En tal caso, en el multiplexor
de entrada deber conectarse el complemento de la entrada afectada utilizando un inversor.
27
Figura 3.26 Modificacin de las casillas de decisin.
En primer lugar, se debe tener la carta ASM con las modificaciones impuestas por el esquema
de direccionamiento de 2 Vas, es decir una entrada por estado y slo salidas Moore (ver la
Fig. 3.12). Dado que este esquema tiene una restriccin adicional, para hacer la asignacin de
estado se debern buscar caminos por la carta de manera que siempre que se pasa a travs de
una casilla de decisin, uno de los prximos estados tenga la direccin asumida. Esta fase se
debe hacer por prueba y error, hasta obtener un resultado satisfactorio.
Se puede observar que hay tres transiciones en las que no se cumple con los requisitos del
esquema: la de los estados b, c y f. En todos esos casos se debe cambiar la posicin de la bur-
buja y poner dentro de la casilla de decisin el complemento de la entrada. En la Fig. 3.28 se
tiene la carta modificada, con una asignacin de estados que cumple con las restricciones im-
puestas.
28
a
VENT
b
HABCNT
Q15
c f
HABCNT HABCNT
Q15 VENT
e d
INT, HABCNT HABCNT g
CRGLTCH
VENT h
LIMPCNT
29
000
VENT
001
b
HABCNT
Q15
110 010
c f
HABCNT HABCNT
Q15 VENT
111 101
011
e d
INT, HABCNT HABCNT g
CRGLTCH
100
VENT h
LIMPCNT
30
Figura 3.29 Esquema de direcciones asumidas para el caso de ejemplo.
Para el llenado de la memoria con este esquema se procede de forma muy similar al esquema
de direccionamiento por pares Estado-Entrada, con la diferencia de que el campo de prximo
estado ahora slo contiene un valor (la direccin de salto). Slo se detallarn dos casos tpi-
cos, un estado que tenga una entrada y otro que tenga una transicin incondicional.
31
Estado A2 A1 A0 C* B* A* S1 S0 D3 D2 D1 D0
b 0 0 1 1 1 0 0 1 0 0 0 1
Tabla 3.16 - Llenado de la memoria para el estado b.
Para el estado b (ver la Fig. 3.30), se debe seleccionar la entrada Q15 , por lo que en el campo
de seleccin se debe colocar el valor 01. La direccin de salto, que se alcanza por la salida
negada de la casilla de decisin, es la 110. Por ltimo, habr que colocar un 1 en la columna
correspondiente a la salida HABCNT (D0).
100
h Colocar un 1 en la columna
LIMPCNT
correspondiente a esta salida.
Direccin de
000
salto
a
Estado A2 A1 A0 C* B* A* S1 S0 D3 D2 D1 D0
h 1 0 0 0 0 0 0 0 0 0 1 0
Tabla 3.17 - Llenado de la memoria para el estado h.
El estado h tiene cmo nico prximo estado el estado a (ver la Fig. 3.31). En este caso, por
tratarse de una transicin incondicional, con el campo de seleccin se debe elegir la entrada 0
del multiplexor colocando 00 en el campo de seleccin. Esto forzar al contador a realizar una
carga. En el campo de la direccin de salto se coloca el valor 000. Luego hay que colocar un 1
en la columna correspondiente a la salida LIMPCNT (D1).
Estado A2 A1 A0 C* B* A* S1 S0 D3 D2 D1 D0
a 0 0 0 0 0 0 1 0 0 0 0 0
b 0 0 1 1 1 0 0 1 0 0 0 1
f 0 1 0 0 0 1 1 1 0 0 0 1
g 0 1 1 1 0 0 0 0 0 1 0 0
h 1 0 0 0 0 0 0 0 0 0 1 0
d 1 0 1 0 1 1 1 0 0 0 0 1
c 1 1 0 1 0 1 0 1 0 0 0 1
e 1 1 1 0 0 1 0 0 1 0 0 1
Tabla 3.18 Contenido de la memoria para el esquema de direcciones asumidas.
32
requerida para el caso de ejemplo es de 8 x 9 bits = 72 bits. Se tiene una memoria ms peque-
a que en los casos anteriores, pero se tiene que agregar ms hardware externo a la memoria.
En este caso ya no hay que conectar una de las entradas a Vcc cuando se quiere hacer un salto
incondicional incrementando el contador. Bastar con seleccionar la entrada 0 del multiplexor
y poner un 1 en el campo de polaridad.
0 1 2 3
S1
S0
Multiplexor
Incrementar/Cargar
PC Reloj
Contador con
carga en paralelo
MEMORIA
Direccin de
Polaridad Seleccin Instrucciones
Salto
Salidas
33
Pol. S1 S0 Funcin
0 0 0 Ir a la direccin de salto.
0 0 1 Saltar si la COND1 es Falso.
0 1 0 Saltar si la COND2 es Falso.
0 1 1 Saltar si la COND3 es Falso.
1 0 0 Incrementar el PC.
1 0 1 Saltar si la COND1 es Verdadero.
1 1 0 Saltar si la COND2 es Verdadero.
1 1 1 Saltar si la COND3 es Verdadero.
Tabla 3.19 Operacin del esquema de direcciones asumidas mejorado.
34
Para hacer la asignacin de estados se procede igual que en el caso anterior, pero en este caso
no es necesario modificar las casillas de decisin de la carta ASM. Por lo dems, rigen las
mismas restricciones impuestas para el esquema de direcciones asumidas. En la Figura 3.34 se
tiene la carta con una asignacin de estados posible.
000
VENT
001
b
HABCNT
Q15
110 010
c f
HABCNT HABCNT
Q15 VENT
111 101
011
e d
INT, HABCNT HABCNT g
CRGLTCH
100
VENT h
LIMPCNT
Para este caso tambin se explicarn en detalle algunos casos tpicos. Para el estado a (ver la
Fig. 3.35), se debe seleccionar la entrada VENT, por que en el campo de seleccin se coloca el
valor 10. En este estado la MEF debe saltar si la condicin es Falso, por lo que el bit de pola-
ridad debe ponerse en 0. En este estado no hay ninguna salida activa, por lo que el campo de
instrucciones se deja totalmente en 0. La Tabla 3.20 muestra el contenido de la memoria para
el estado a.
35
000 Direccin de
salto
a
Direccin
001
asumida
b
HABCNT
Estado A2 A1 A0 C* B* A* P S1 S0 D3 D2 D1 D0
a 0 0 0 0 0 0 0 1 0 0 0 0 0
Tabla 3.20 - Llenado de la memoria para el estado a.
Estado A2 A1 A0 C* B* A* P S1 S0 D3 D2 D1 D0
b 0 0 1 1 1 0 1 0 1 0 0 0 1
Tabla 3.21 - Llenado de la memoria para el estado b.
Para el estado b (ver la Fig. 3.36), se debe seleccionar la entrada Q15, por lo tanto, en el cam-
po de seleccin se debe colocar el valor 01. En este estado la MEF debe saltar si la condicin
es Verdadero, por lo que el bit de polaridad debe ponerse en 1. La direccin de salto es la co-
rrespondiente al estado c, y en dicho campo se debe colocar 110. En este estado se activa la
salida HABCNT, por lo que se debe colocar un 1 en la columna correspondiente (D0). La Ta-
bla 3.21 muestra el contenido de la memoria para el estado b.
36
Otro caso particular es el de las transiciones incondicionales. En la carta ASM del caso de
ejemplo se tienen dos casos tpicos. El primero es una transicin incondicional con incremen-
to del contador, tal como en la transicin de g h.
011
g Colocar un 1 en la columna
CRGLTCH
correspondiente a esta salida.
Direccin
100
asumida
h
LIMPCNT
Estado A2 A1 A0 C* B* A* P S1 S0 D3 D2 D1 D0
g 0 1 1 1 0 0 1 0 0 0 1 0 0
Tabla 3.22 - Llenado de la memoria para el estado g.
En este caso se debe seleccionar la entrada GND, por lo que en el campo de seleccin se debe
colocar 00. Como se trata de un incremento del PC, el bit de polaridad debe ponerse en 1. En
este estado se activa la salida CRGLTCH, por lo que se debe colocar un 1 en la columna co-
rrespondiente (D2). El campo de la direccin de salto es un valor no especificado, pero por
robustez, conviene poner la direccin del prximo estado (100). La Tabla 3.22 muestra el con-
tenido de la memoria para el estado g.
37
Otro caso de transicin incondicional es la de e b, pero en esta caso se debe usar una direc-
cin de salto, tal como se ilustra en la Figura 3.38. En el campo de seleccin se debe colocar
00 para seleccionar la entrada conectada a GND y en el campo de polaridad se debe colocar
un 0 para forzar la carga del contador con la direccin de salto. En este caso se activan dos
salidas, INT y HABCNT, por lo que se debe colocar un 1 en las columnas correspondientes a
dichas salidas (D3 y D0). La Tabla 3.23 resume el contenido de la memoria para el estado e y
la Tabla 3.24 el contenido completo de la memoria para el esquema de direcciones asumidas
mejorado.
Estado A2 A1 A0 C* B* A* P S1 S0 D3 D2 D1 D0
e 1 1 1 0 0 1 0 0 0 1 0 0 1
Tabla 3.23 - Llenado de la memoria para el estado e.
Estado A2 A1 A0 C* B* A* P S1 S0 D3 D2 D1 D0
a 0 0 0 0 0 0 0 1 0 0 0 0 0
b 0 0 1 1 1 0 1 0 1 0 0 0 1
f 0 1 0 0 0 1 1 1 0 0 0 0 1
g 0 1 1 1 0 0 1 0 0 0 1 0 0
h 1 0 0 0 0 0 0 0 0 0 0 1 0
d 1 0 1 0 1 1 0 1 0 0 0 0 1
c 1 1 0 1 0 1 1 0 1 0 0 0 1
e 1 1 1 0 0 1 0 0 0 1 0 0 1
Tabla 3.24 Contenido de la memoria para el esquema de direcciones asumidas mejorado.
El diagrama de la mquina debe ser modificado de manera de agregar los estados necesarios.
Se deben diferenciar los estados que producen salidas, de los que producen saltos condiciona-
les o incondicionales. Se mantienen las restricciones vistas para el criterio de direcciones
asumidas, es decir, nicamente se admiten una entrada por estado y salidas Moore. Adems se
restringe la asignacin de estados, uno de los prximos estados debe tener la direccin actual
ms 1.
Un formato puede ser el siguiente: un campo de 1 bit, denominado de formato, indica qu tipo
de palabra es: si en ese campo hay un 1 es una palabra de instrucciones y si hay un 0 es una
palabra de seleccin de la entrada y salto. La palabra que es instruccin, tendr el resto de los
38
bits para indicar las salidas que se producen en ese estado. La palabra que es seleccin y salto
tendr una parte asignada a cada una de estas funciones.
Cabe aclarar que tambin es posible implementar un formato en el que cada campo bsico
tenga una palabra distinta, en cuyo caso habr que usar 2 bits para el campo de formato de la
palabra y las palabras tendrn 3 formatos distintos. En esto el diseador tiene libertad de ele-
gir los formatos que ms se adecuen al problema.
Formato 1 Formato 2
Instrucciones Seleccin y salto
Listado de salidas
Al estado asumido
(+1) COND
Supongamos que se usan slo dos formatos distintos, tal como se muestra en la Fig. 3.39. Si
bien este esquema permite ahorrar bits de la memoria, lo hace a un costo, ms all de los cir-
cuitos extra que haya que agregar. Por un lado se debe modificar la carta ASM de una manera
ms radical. Por cada estado de la carta original en general debern colocarse 2 estados, uno
de cada formato. Hay una posible excepcin a esta regla, que se explicar ms adelante con el
caso de ejemplo. Al haber una mayor cantidad de estados, normalmente se requerirn ms
variables de estados y la asignacin de estados se har ms engorrosa. Otra desventaja que se
tiene es que para cada estado original se necesitarn 2 ciclos de reloj y esto impactar en la
frecuencia mxima de trabajo de la MEF. Por lo tanto, si el circuito tiene requisitos de rendi-
miento muy altos se desaconseja usar este esquema y usar algunos de los otros esquemas pro-
puestos.
Adems, en la salida se debe agregar un cerrojo transparente manejado por el bit de formato.
Debido a que los mismos bits de datos de la memoria se usan para distintas funciones, interesa
retener a la salida de la MEF nicamente lo que est a la salida de la MEF cuando se est en
un estado de instrucciones. Cuando la mquina se encuentra en un estado de salto/seleccin,
se retienen las salidas del estado anterior (Formato 1) independientemente del valor que se
39
presente en la entrada del cerrojo. Para la seleccin de las entradas en las transiciones condi-
cionales se debe usar la Tabla 3.19. En la Fig. 3.40 se muestra el esquema propuesto para al
caso de ejemplo, basado en el esquema de direcciones asumidas mejorado.
No
GND Q15 VENT Usada
0 1 2 3
S1
S0
Multiplexor 4:1
Incrementar/Cargar
PC Reloj
Contador con
carga en paralelo
MEMORIA
1
Bit de
formato 1 2 4
0 Polaridad Seleccin Direccin de salto
1 Instrucciones
C
Cerrojo
D Q Salidas
D3 = INT
D2 = CRGLTCH
D1 = LIMPCNT
D0 = HABCNT
En la Fig. 3.41 se muestra la carta ASM para el problema de ejemplo, adaptada a los requisi-
tos de este esquema. Se puede observar que la mayora de los estados de la carta realizada
para el esquema de direcciones asumidas mejorado se ha desdoblado en dos estados. Como
slo se puede seleccionar una entrada por estado de seleccin/salto, las casillas de decisin
que deban separarse para cumplir con esta restriccin requieren slo un estado de Formato 2.
La salida correspondiente al estado del cual dependen las entradas separadas de esta manera
quedar acerrojada en el cerrojo de salida hasta que se decida el prximo estado con otra sali-
da vlida. En total se tienen 13 estados por lo que sern necesarias 4 variables de estado para
implementar esta MEF. El procedimiento para hacer la asignacin de estados es similar al
usado en la Seccin 3.4.1.
40
De todas maneras hay algunas particularidades que remarcar. La transicin de f g es incon-
dicional y con la asignacin de estados realizada se tiene que el cdigo del estado g es el del
estado f ms 1 (direccin asumida). En este caso no hace falta agregar un estado de Formato
2, ya que se incrementar el contador automticamente. Sin embargo, la transicin incondi-
cional de g a es igual al caso general, en el que se deber incluir un estado extra de For-
mato 2 para poder realizar el salto incondicional. Una situacin similar se tiene en el estado l.
Para este esquema tambin se detallar el procedimiento para llenar la memoria para casos de
transiciones condicionales e incondicionales. Dado que cada estado original de la mquina se
ha desdoblado casi siempre en dos estados, se proceder al llenado de la memoria consideran-
do los pares de estados de Formato 1 y Formato 2.
El estado a es de Formato 1, por lo que slo se deben llenar los bits correspondientes a las
salidas definidas para este estado (bits D3 ~ D0). Como ninguna de las salidas se activa, todos
los bits se ponen en 0. En las palabras de Formato 1, como slo hay definidas 4 salidas, los
41
bits rotulados con P, S1 y S0 son valores no especificados y se pueden llenar con cualquier
valor, en este caso, con ceros.
Direccin asumida
0001 del estado a.
b
Estado A3 A2 A1 A0 F P S1 S0 D3 D2 D1 D0
a 0 0 0 0 1 0 0 0 0 0 0 0
b 0 0 0 1 0 0 1 0 0 0 0 0
Tabla 3.25 - Llenado de la memoria para los estados a y b.
El estado c (ver la Fig. 3.43) es de instrucciones, por lo que slo hay que colocar un 1 en la
columna correspondiente a la salida HABCNT (D0). El estado d es el primer estado de selec-
cin y salto asociado al estado c. En el multiplexor de entrada se debe seleccionar la entrada
Q15, por lo que en el campo de seleccin se debe colocar 01. En este caso el bit de polaridad
debe ir en 1, debido a que en la carta ASM la direccin de salto se alcanza por el camino de la
entrada directa (saltar si Q15 es Verdadero). Por lo tanto, para que se pueda cargar la direc-
cin de salto en el contador se debe negar la entrada. En el campo de la direccin de salto se
debe colocar el cdigo del estado j (1001).
El estado e es el segundo estado de seleccin y salto asociado al estado c. En este caso se debe
saltar si la condicin de VENT es Falso. Por ello, el bit de polaridad debe ir en 0. El campo de
seleccin debe ponerse en 10 para elegir VENT, y la direccin de salto es la correspondiente al
estado c (0010). Como se puede observar, en este caso quedan dos estados de seleccin y sal-
to contiguos. La salida HABCNT permanece acerrojada con en valor presente en el estado 1,
mientras se termina de decidir cul es el prximo estado en base a la condicin de las dos en-
tradas consultadas en forma sucesiva en los estados d y e.
42
Figura 3.43 - Determinacin de los valores de los campos de los estados c y d.
Estado A3 A2 A1 A0 F P S1 S0 D3 D2 D1 D0
c 0 0 1 0 1 0 0 0 0 0 0 1
d 0 0 1 1 0 1 0 1 1 0 0 1
e 0 1 0 0 0 0 1 0 0 0 1 0
Tabla 3.26 - Llenado de la memoria para los estados c, d y e.
El estado f es un caso particular (ver la Fig. 3.44). En este caso la transicin de f g es in-
condicional y el estado g tiene asignado un cdigo de estado que es el de f ms 1. En este caso
no hace falta agregar un estado de Formato 2, ya que la direccin asumida se alcanza por las
caractersticas del cableado del circuito. En el estado f el bit de formato est en 1, y como esa
lnea de dato est conectada a la compuerta O que maneja la entrada de Incrementar/Cargar
del contador, se forzar un incremento del PC. Por lo tanto, en este caso slo hay que llenar
el campo de instrucciones, poniendo un 1 en la columna correspondiente a CRGLTCH (D2).
43
Estado A3 A2 A1 A0 F P S1 S0 D3 D2 D1 D0
f 0 1 0 1 1 0 0 0 0 1 0 0
Tabla 3.27 - Llenado de la memoria para el estado f.
1011
l HABCNT, INT Colocar un 1 en la columna
correspondiente a estas salidas.
1100
Direccin asumida
m del estado l.
Direccin de salto
0010 del estado m.
c HABCNT
Estado A3 A2 A1 A0 F P S1 S0 D3 D2 D1 D0
l 1 0 1 1 1 0 0 0 1 0 0 1
m 1 1 0 0 0 0 0 0 0 0 1 0
Tabla 3.28 - Llenado de la memoria para los estados l y m.
El estado l requiere una transicin incondicional al estado c, pero con una direccin de salto
(ver la Fig. 3.45). Por lo tanto, en el estado l se debe colocar un 1 en las columnas correspon-
dientes a las salidas INT (D3) y HABCNT (D1). Para poder realizar el salto incondicional se
agrega el estado m de Formato 2, cuyos campos se deben llenar de la siguiente manera. Con el
campo de seleccin se debe seleccionar la entrada conectada a GND, colocando el valor 00. El
bit de polaridad debe ponerse en 0 para transferir un 0 a la entrada Incrementar/Cargar del
contador y forzar un salto. Por ltimo, en el campo de la direccin de salto se carga el cdigo
del estado c (0010).
Como en otros casos, para mejorar la robustez de la MEF a los estados no usados conviene
definirlos como de Formato 2, con un salto incondicional al estado de inicio. Esto no implica
ningn costo extra.
La Tabla 3.29 resume el contenido de la memoria para el esquema de formato variable para el
caso de ejemplo. La memoria requerida es de 8 x 13 = 104 bits. Se observa que se requieren
ms bits que en el caso de direcciones asumidas, pero el ancho de la memoria es menor. En
este caso el diseo entrara en un solo chip de una memoria comercial.
44
Estado A3 A2 A1 A0 F P S1 S0 D3 D2 D1 D0
a 0 0 0 0 1 0 0 0 0 0 0 0
b 0 0 0 1 0 0 1 0 0 0 0 0
c 0 0 1 0 1 0 0 0 0 0 0 1
d 0 0 1 1 0 1 0 1 1 0 0 1
e 0 1 0 0 0 0 1 0 0 0 1 0
f 0 1 0 1 1 0 0 0 0 1 0 0
g 0 1 1 0 1 0 0 0 0 0 1 0
h 0 1 1 1 0 0 0 0 0 0 0 0
i 1 0 0 0 0 1 1 0 0 1 0 1
j 1 0 0 1 1 0 0 0 0 0 0 1
k 1 0 1 0 0 1 0 1 1 0 0 0
l 1 0 1 1 1 0 0 0 1 0 0 1
m 1 1 0 0 0 0 0 0 0 0 1 0
- 1 1 0 1 0 0 0 0 0 0 0 0
- 1 1 1 0 0 0 0 0 0 0 0 0
- 1 1 1 1 0 0 0 0 0 0 0 0
Tabla 3.29 Contenido de la memoria para el esquema de formato variable.
En este caso, por tener la MEF slo 2 entradas, no se necesita modificar la carta ASM, an
cuando en otros casos podra ser necesaria alguna modificacin de la misma. Por ejemplo, si
una MEF tiene 3 entradas y se usa un multiplexor vertical de entrada para dos de ellas, habr
que separar con estados las casillas de decisin que contengan las dos entradas que van al
multiplexor, esto si es que aparecen juntas en un determinado estado de la mquina.
Para el caso de ejemplo se usan las lneas de direccin A3, A2 y A1 para el estado presente,
correspondientes a las variables de estado C, B y A respectivamente. La lnea de direccin A0
se usa para la entrada Q15. La entrada VENT se utiliza para la seleccin del prximo estado
por 0 por 1, sin necesidad de un multiplexor vertical de entrada (se conecta directamente al
multiplexor horizontal). El campo de prximo estado utiliza 6 bits, separados en dos campos
de 3 bits cada uno, y se define as: D9 = C*0, D8 = B*0, D7 = A*0 D6 = C*1, D5 = B*1 y
45
D4 = A*1. El campo de instrucciones o salidas se define como en los casos ya vistos: D3 =
INT, D2 = CRGLTCH, D1 = LMPCNT y D0 = HABCNT.
Q15
MEMORIA
3 3 4
Pxmo. Est. Pxmo. Est.
Instrucciones
0 1
Salidas
0 1 D3 = INT
VENT Multiplexor 2:1 D2 = CRGLTCH
D1 = LIMPCNT
D0 = HABCNT
En este caso particular, a cada estado le corresponden dos palabras de la memoria, las que
quedan en forma consecutiva por la forma en que se conect la entrada Q15 (al bit menos
significativo de la direccin).
El prximo estado del estado a (ver la Fig. 3.47) queda determinado slo por la entrada
VENT. Como en la transicin no se ve involucrada la entrada Q15, en la memoria habr que
repetir la misma informacin en las dos filas correspondientes al estado a. En cada fila habr
46
que colocar el valor 000 en el campo correspondiente al prximo estado por 0 de la casilla de
decisin y 001 en el campo correspondiente al prximo estado por 1 de la misma.
El estado b tiene definido 3 prximos estados: b, c y d (ver la Fig. 3.48). La primera fila de
este estado, con la direccin 0010, corresponde a las transiciones b b y b d. El campo
correspondiente al prximo estado por 0 se debe llenar con 011 (estado d) y el campo corres-
pondiente al prximo estado por 1 con 001 (estado b). La segunda fila de este estado, con la
direccin 0011, corresponde a la transicin b c. Esta transicin slo depende de la entrada
Q15, por lo que los dos campos correspondientes al prximo estado por 0 y por 1 tendrn el
mismo valor, 010. En este estado slo est activa la salida HABCNT, y por lo tanto se debe
colocar un 1 en la columna correspondiente a esta salida (D0).
Valor a colocar en el
001 campo de prximo
estado si la entrada
b Colocar un 1 en VENT vale 1.
HABCNT la columna
correspondiente
a esta salida.
Q15
Direccin 0011 Direccin 0010
010
c VENT
HABCNT
Valor a colocar en el
011 campo de prximo
Valor a colocar en
estado si la entrada
los dos campos de d VENT vale 0.
prximo estado. CRGLTCH
El estado c tambin tiene definidos 3 prximos estados y tiene una salida Mealy (INT) y una
Moore (HABCNT) (ver la Fig. 3.49). La primera fila de este estado define la transicin
c b, y le corresponde la direccin de memoria 0100. Como por este camino no interviene la
entrada VENT, se repite el mismo valor (001) para los dos campos de prximo estado. La se-
gunda fila de este estado, con la direccin 0101, define las transiciones c c y c d. El
47
campo correspondiente al prximo estado por 0 se debe llenar con 011 (estado d) y el campo
correspondiente al prximo estado por 1 con 010 (estado c). El campo de instrucciones debe
tener un 1 en las dos filas de este estado para la columna correspondiente a HABCNT (D0),
por ser una salida Moore. Sin embrago, la salida INT (D3), que es Mealy, slo debe activarse
en este estado si Q15 vale 0, es decir en la fila correspondiente a la direccin 0100. Aqu es
donde se ve la ventaja de este esquema combinado.
Valor a colocar en
001 los dos campos de
prximo estado.
b
HABCNT
Colocar un 1 en la columna
correspondiente a esta
salida en las dos direcciones Q15
usadas para el estado c.
010
Valor a colocar en el
c campo de prximo
HABCNT estado si la entrada
VENT
VENT vale 1.
Direccin
0100
011
d
Q15 CRGLTCH
Direccin 0101
INT
VENT Valor a colocar en el
campo de prximo
estado si la entrada
VENT vale 0.
Colocar un 1 en la columna
correspondiente a esta salida
slo en la direccin 0100.
Los otros dos estados (d y e) no presentan mayor dificultad, por tener transiciones incondicio-
nales. En ambos casos los campos de prximo estado deben llenarse con el mismo valor en las
2 filas correspondientes a dichos estados. Los estados no usados conviene apuntarlos al estado
inicial para darle ms robustez al diseo. La Tabla 3.33 muestra el contenido de la memoria
para este caso de esquemas combinados. Se utilizan 10 x 10 = 100 bits de la memoria para su
implementacin. Este valor se encuentra en un valor intermedio entre los 140 bits utilizados
en el esquema de Pasos de Enlace, y los 88 utilizados en el esquema de Pares Estado-Entrada.
48
Como se puede observar, la penalizacin por la utilizacin de una salida Mealy en este caso
no es muy severa (slo 12 bits ms).
Por otra parte, las salidas que son complementarias pueden obtenerse mediante el uso de in-
versores. Esto tambin puede observarse en la misma carta ASM o bien en el contenido de la
memoria, por simple inspeccin.
49
Figura 3.50 Esquema de direcciones asumidas mejorado con salidas codificadas.
Por ltimo, las salidas que son excluyentes entre s se pueden codificar en un nmero menor
de bits, obtenindose las mismas mediante el uso de un decodificador o bien con un circuito
combinacional adecuado. En el caso de que se utilice un decodificador, debe reservarse una
combinacin para el caso en que ninguna de las salidas del mismo est activa. En algunos
casos, el decodificador dispone de un terminal para colocar todas las salidas en 0, en cuyo
caso puede usarse un bit de la ROM para este fin, pero habr que analizar la conveniencia o
no de usarlo.
Para el caso de ejemplo, podemos lograr una reduccin en el ancho de la palabra usando un
decodificador para las salidas CRGLTCH, LMPCNT e INT, ya que nunca se activan simult-
neamente. En la Tabla 3.34 se tiene una codificacin posible de dichas salidas. La salida
HABCNT se activa en varios estados y en uno de ellos junto con la salida INT, por lo tanto
conviene reservar un bit exclusivo para ella. Como ejemplo de codificacin de las salidas se
tomar el esquema de direcciones asumidas mejorado, que se muestra en la Fig. 3.50. La pa-
labra ahora se conforma as: 3 bits para la direccin de salto, 1 bit de polaridad, 2 bits para
seleccionar la entrada, 2 bits para codificar las 3 salidas mencionadas arriba (D2 y D1) y 1 bit
para la salida HABCNT (D0).
50
Salida Cdigo
D2 D1
No usada 0 0
LMPCNT 0 1
CRGLTCH 1 0
INT 1 1
Estado A2 A1 A0 C* B* A* P S1 S0 D2 D1 D0
a 0 0 0 0 0 0 0 1 0 0 0 0
b 0 0 1 1 1 0 1 0 1 0 0 1
f 0 1 0 0 0 1 1 1 0 0 0 1
g 0 1 1 1 0 0 1 0 0 1 0 0
h 1 0 0 0 0 0 0 0 0 0 1 0
d 1 0 1 0 1 1 0 1 0 0 0 1
c 1 1 0 1 0 1 1 0 1 0 0 1
e 1 1 1 0 0 1 0 0 0 1 1 1
Tabla 3.35 - Contenido de la memoria para el esquema con salidas codificadas.
En el caso de ejemplo la codificacin de las salidas permite ahorrar solo un bit de la memoria,
pero en casos ms complejos, como puede ser la MEF de la unidad de control de un micro-
procesador, la reduccin en el ancho de la palabra puede ser considerablemente mayor (ver el
Cap. 12 de la referencia bibliogrfica 3). Si bien como ejemplo se ha aplicado a este esquema,
la codificacin de las salidas se puede realizar en cualquiera de los esquemas planteados. El
precio a pagar por tener una memoria ms angosta es el(los) decodificador(es) que habra que
agregar para decodificar las salidas que hayan sido codificadas. En el esquema de micropro-
gramacin vertical, el decodificador debe colocarse despus del cerrojo utilizado para retener
las salidas cuando se est en un estado de Formato 2.
51
macin utilizado), y el tiempo de establecimiento de los flip-flops que conforman el registro
cauce.
Lo que se trata en esta seccin entra dentro de lo que se llaman mecanismos de aceleracin,
que se usan para incrementar el rendimiento de un sistema de cmputo. Entre ellos se pueden
mencionar la prebsqueda de instrucciones, el uso de memorias cach para instrucciones y
datos, la segmentacin de la CPU, el uso de TLBs (Translation Lookaside Buffers) para las
direcciones, la ejecucin especulativa, la repeticin de unidades funcionales, etc.
52
GND COND1 COND2 COND3
0 1 2 3
S1
Multiplexor de Condicin
S0
0 1 Registro de
Multiplexor Direcciones Reloj
de Direcciones Asumidas
Incrementador
(Dir. Actual +1)
MEMORIA
Direccin
Polaridad Seleccin Instrucciones
de Salto
Salidas
53
4. CONCLUSIONES
En este trabajo se han expuesto distintos esquemas bsicos de la estructura de una MEF mi-
croprogramada. Como se ha mostrado con un caso de ejemplo bastante sencillo, el microcdi-
go (o firmware) puede resultar de longitudes y anchos diferentes. En general se puede decir
que mientras ms horizontal es el microprograma, ms paralelismo se puede lograr con la
unidad de control. La cantidad de microinstrucciones necesarias para ejecutar una tarea resulta
de esta manera menor. Por el contrario, si el microprograma se hace ms vertical, se tienen
menos bits por palabra haciendo el diseo ms econmico, pero hacen falta ms microinstruc-
ciones para realizar la misma tarea. La velocidad y el rendimiento del sistema es menor.
Adems de las memorias ROM de todo tipo que existen (ROM por mscara, PROM,
EPROM, EEPROM), en la actualidad se dispone de una amplia gama de dispositivos lgicos
programables (SPLDs, CPLDs, FPGAs, etc.) que permiten implementar prcticamente cual-
quier MEF, por compleja que sea, en un solo chip. La evolucin tecnolgica hacia dispositi-
vos programables cada vez ms complejos ha ido modificando los criterios de decisin con
respecto a la conveniencia o no de usar tcnicas de microprogramacin para implementar una
MEF. A esto se suma la facilidad con la que ahora se pueden realizar diseos sumamente
complejos utilizando lenguajes de descripcin de hardware, como VHDL, ABEL o Verilog,
que luego se pueden implementar en un dispositivo programable o bien en un chip a medida
ASIC.
Ventajas:
54
Desventajas:
Se puede llegar a encontrar un ancho de palabra que optimice el costo y la velocidad de fun-
cionamiento del circuito. Una ROM organizada con una palabra por estado del algoritmo de
control tiene el menor nmero de estados para dicho algoritmo, y para una frecuencia deter-
minada del reloj, se tendr la mxima velocidad de funcionamiento. Si se restringe el ancho
de la palabra, el nmero de estados, y por lo tanto de microinstrucciones, se incrementar, con
lo que la velocidad del sistema ser menor. El costo de una ROM es, en general, una funcin
de su capacidad en bits, por lo que el producto de la cantidad de palabras por el ancho de la
palabra da una idea del funcional de costo del sistema a optimizar. Si se logra minimizar este
valor, se tendr en general el menor costo, con algn sacrificio en la velocidad de la MEF.
Si bien este trabajo tiene como finalidad principal explicar cmo se implementa una MEF con
las tcnicas de microprogramacin, hay otras conclusiones que tambin se pueden sacar del
mismo. Por un lado, de todo lo expuesto se puede inferir que hay muchas formas de realizar lo
mismo. Unas son ms rpidas y costosas, otras ms lentas y baratas y este concepto se extien-
de a todo un sistema de cmputo. De ah que este tema apunta a desarrollar los criterios de
costo/rendimiento muy extendidos en todos los campos de la ingeniera. Como se puede ob-
servar, encontrar el diseo ptimo puede llevar varios intentos.
Casualmente como su uso est tan difundido, se hace necesario conocer en detalle cmo fun-
cionan internamente, ms que nada para sacar el mximo de provecho de los mismos. Como
ya se dijo, la principal utilizacin de las tcnicas de microprogramacin es en la implementa-
cin de la unidad de control de un microprocesador, particularmente de los denominados
CISC (Complex Instruction Set Computer). Se hace esta aclaracin ya que los microprocesa-
dores RISC (Reduced Instruction Set Computer) suelen tenerla cableada por cuestiones de
velocidad. Pero esa discusin se deja para cursos ms avanzados.
55
A lo largo del curso se han visto prcticamente todos los elementos bsicos que se encuentran
en un microprocesador: registros, contadores, registros de desplazamiento, memorias ROM y
RAM, decodificadores, mutliplexores, etc. El corazn de un microprocesador es su unidad de
control, que como ya se dijo, es una MEF. Es la que hace que todos esos componentes en
conjunto tengan una funcionalidad muy superior a la de sus componentes aislados. Es la res-
ponsable de activar todas las seales que permiten traer instrucciones de memoria, mover los
datos a travs de las unidades funcionales y llevar los resultados a memoria principal. Y de
ah la importancia de verla con un cierto grado de detalle. Se entiende que en la medida que
todo esto se conozca en profundidad, se facilitar la comprensin del curso que sigue, centra-
do en la programacin de un microprocesador a bajo nivel.
5. LECTURA ADICIONAL
Como referencia bsica se us el libro de Christopher Clare, Desinging Logic Systems Using
State Machines [1]. En el Captulo V se puede encontrar el desarrollo de una MEF que im-
plementa un juego de Black Jack, pero con menos esquemas a los planteados en este trabajo.
En el Captulo 12 del libro de Randy H. Katz, Contemporary Logic Design [3] se describe la
implementacin completa de la unidad de control de un microprocesador simple usando es-
quemas de microprogramacin horizontal y vertical. Resulta interesante el esquema de micro-
programacin vertical propuesto. Los esquemas ms avanzados se han tomado del Captulo 4
del libro de Michel A. Lynch, Microprogrammed State Machine Design [2]. Este libro descri-
be con bastante detalle la tecnologa rebanada de bits (bit slice) que se populariz en los 80,
pero que ahora ha quedado demod con la introduccin de los dispositivos programables
avanzados, especialmente los FPGA, y los lenguajes de descripcin de hardware.
6. BIBLIOGRAFA
1. Clare, Christopher R.- Desinging Logic Systems Using State Machines, McGraw-Hill,
1973.
56