Vous êtes sur la page 1sur 387

CAPTULO 1

INTRODUCCIN A LAS MQUINAS SECUENCIALES


SINCRNICAS

1.1 INTRODUCCIN
En la academia, para su estudio, los sistemas digitales suelen dividirse en
dos grupos, en el primer grupo estn los circuitos combinacionales y en el
segundo grupo los circuitos secuenciales sincrnicos y asincrnicos. Este
libro presenta exclusivamente el diseo de los circuitos y sistemas
secuenciales sincrnicos.

1.2 CIRCUITOS SECUENCIALES SINCRNICOS


El estudio de los circuitos secuenciales sincrnicos, en este libro, se inicia
mostrando las caractersticas qu tienen los circuitos combinacionales y
los circuitos secuenciales con la finalidad de clarificar sus diferencias.
Los circuitos combinacionales estn formados por puertas lgicas
interconectadas entre si de alguna manera, los valores de las salidas de
estos circuitos estan dadas por sus ecuaciones booleanas respectivas
que se obtienen normalmente de una tabla de verdad que relaciona los
valores de las entradas con los valores de las salidas, sin tomar encuenta
los retardos de propagacin (que tan rpido aparecen los valores lgicos
en sus salidas cuando los valores lgicos en sus entradas han cambiado)
de las puertas, es claro que desde el punto de vista de la velocidad de
respuesta de un circuito combinacional, da igual tener una sola puerta
que muchas puertas conectadas en serie (sin retroalimentacin), porque
los valores en las salidas aparecen instantneamente, por esta razn,
para analizar una de las caractersticas de un circuito combinacional se
puede tomar como ejemplo a cualquier puerta lgica, para este caso, se
1
escoge a una simple puerta lgica AND (Y) de dos entradas, la
caracterstica fundamental de este circuito lgico, de acuerdo a la tabla de
verdad de funcionamiento, es que el valor de su salida depende
exclusivamente solo de los valores que tenga la puerta AND en sus
entradas y de ninguna otra particularidad. La figura 1.1 a) y b) muestra
este circuito lgico combinacional con su tabla de verdad.
Si se toma en consideracin el retardo de propagacin (RP) de la puerta
AND, figura 1.1 c), esta puerta, podra ser representada como una puerta
ideal, sin retardo, ms una memoria (RP) virtual, la memoria virtual
aparece debido a que el valor de la salida de esta puerta se mantendr
sin cambiar durante un tiempo igual al retardo de propagacin, a pesar de
que los valores en las entradas han cambiado esto muestra la figura 1.1
d).
Una de las caractersticas de un circuito secuencial, a diferencia de los
circuitos combinacionales, es que el valor de sus salidas en un instante
determinado no solo dependen del valor que tengan sus entradas en ese
instante, sino tambin, dependen de todos los valores anteriores que
estuvieron presentes en esas entradas, estos valores anteriores son los
valores pasados (historia pasada) de las entradas.

Figura 1.1 Circuito combinacional simple.

En los circuitos secuenciales las salidas se hacen dependientes de la


historia pasada de sus entradas, porque tienen capacidad de memoria y

2
retroalimentacin o feedback. Debe notarse que se hace referencia a una
capacidad de memoria, por lo tanto, puede ser una dispostivo de memoria
o una memoria virtual.
La figura 1.2 muestra un circuito digital realimentado. Una seal de
realimentacin o feedback, es una muestra de la seal de salida. En la
figura 1.2 las seales de salida S1 y S2 son muestras de las seales de
salida de las puertas P1 y P2 respectivamente que se realimentan a las
entradas de las puertas P1 y P2.

Figura 1.2 Circuito con retroalimentacin o feedback.

Si la identificacin, en un circuito, de una seal retroalimentada es difusa,


para identificar esta seal con claridad, se puede dibujar el circuito de otra
manera, por ejemplo, el circuito de la figura 1.2 se dibuja de dos maneras
diferentes, como muestra la figura 1.3 a) y b), como se puede ver la seal
de realimentacin y el camino de retroalimentacin quedan claramente
identificados.

Figura 1.3 Un mismo circuito dibujado de dos maneras.

3
En general un sistema secuencial digital puede tener varios caminos de
retroalimentacin, como indica el modelo general de bloques de un
sistema de este tipo que se puede ver en la figura 1.4, en esta figura, el
bloque superior denominado de lgica de transformacin y mezcla de las
entradas y salidas recibe tanto las entradas del mundo exterior, as como,
tambin las salidas del bloque intermedio, denominado elemento de
memoria, estas son las seales de salida que se retroalimentan y se
combinan con las entradas al sistema, el tercer bloque, denominado de la
lgica de las salidas condicionales se encarga de generar las salidas del
sistema.
Las caracteristicas de los circuitos secuenciales pueden ser determinadas
apartir de un anlisis del diagrama de bloques general de la figura 1.4, de
all, dos caractersticas son evidentes:

1. La presencia de un dispositivo fsico de memoria,


2. En ausencia de un dispositivo fsico de memoria debe tener
capacidad de memoria virtual.
3. Debe tener por lo menos un camino de realimentacin desde
las salidas de la memoria a las entradas del sistema.

En tanto que los circuitos combinaciones tienen las caractersticas


siguientes:

1. La ausencia de un dispoditivo fisico de memoria.


2. Capacidad de memoria virtual.
3. La ausencia de caminos de retroalimentacin.
4. Los valores de las salidas son una funcin exclusiva de los
valores de las entradas.

4
Respecto de la memoria virtual, en este libro, debe entenderse la
capacidad de memoria que tienen las puertas lgicas debido a los
retardos de propagacin.

Figura 1.4 Diagrama de bloques de un sistema digital.

Antes de continuar con el estudio de las caractersticas de los circuitos


combinacionales y secuenciales, se exponen algunos ejemplos para
aclarar como reconocer los caminos de retroalimentacin en los sistemas
realimentados.

5
Ejemplo 1.1
Para el diagrama de bloques del sistema que se indica en la figura 1.5
indique cuantos caminos de retroalimentacin existen.

Figura 1.5 Diagrama de bloques de un sistema.

Hay un solo camino de realimentacin y es mediante la muestra de la


seal de salida del bloque dos que va a la entrada del bloque uno.

Ejemplo 1.2
Para el diagrama de bloques del sistema que se indica en la figura 1.6
indique cuantos caminos de retroalimentacin existen.

Figura 1.6 Diagrama de bloques para el ejercicio 1.2.

6
Hay un camino de retroalimentacin y va de la salida del bloque dos a la
entrada del bloque uno. Para distinguir de mejor manera los caminos
realimentados se dibuja el sistema de otra manera como se indica en la
figura 1.7.

Figura 1.7 Diagrama de bloques modificado para el ejercicico 1.2.

Ejemplo 1.3
Identifique los caminos de realimentacin que tiene el sistema que se ve
en la figura 1.8.
De la figura 1.8 se puede determinar que solo hay un camino de
realimentacin, puesto que el bloque tres es una interfaz que permite la
realimentacin de la salida del bloque de salida y el sistema de entradas.

Figura 1.8. Diagrama de bloques de un sistema.

7
Ejemplo 1.4
Identifique los caminos de realimentacin que tiene el sistema que se ve
en la figura 1.9.

Figura 1.9. Diagrama de bloques para el ejercicio 1.4.

El sistema de la figura 1.9 tiene dos caminos de realimentacin, debe


observarse que es el mismo circuito del ejercicio anterior aadido el
bloque cuatro que contiene un camino de realimentacin.
Regresando al estudio de las caractersticas de los circuitos
combinaciones y secuenciales. En la figura 1.10 se indica la relacin entre
la salida S y las entradas E1 y E2.

Figura 1.10. Representacin grfica de un sistema combinacional.

8
En donde se indica que la salida S solo depende del valor que las
entradas E1 y E2 tienen en ese instante y de nada ms, en la tabla 1.1 se
resume los valores que van tomando las entradas y la salida al transcurrir
el tiempo.

Tabla 1.1. Valores de las entradas E1, E2 y la salida S.

Las entradas E1 y E2 en el tiempo t0 reciben los valores 00 y el sistema


genera la salida S igual a 0, por tanto, solo depende de las entradas
presentes en el tiempo t0, luego las entradas cambian a 01 en el tiempo
t1 y la salida S tiene ahora el valor 1, y solo depende de los valores
presentes en las entradas en ese tiempo t1, luego las entradas cambian a
11 en el tiempo t2 y la salida S vale 1, y solo depende de los valores
presentes en las entradas en ese instante t2, a continuacin, las entradas
en el tiempo t3 cambian a 10 y la salida S cambia a 0, igual que en los
casos anteriores solo depende de los valores presentes en las entradas y
el sistema responde de esta manera en forma indefinida, as es como se
comporta un circuito combinacional, la o las salidas dependen solo de los
valores de las entradas.
En la figura 1.11 en cambio se muestra un diagrama de bloque de un
sistema secuencial las entradas E1 y E2 en el tiempo t0 reciben las
entradas 00 respectivamente y el sistema genera la salida S igual a 0,
este valor de salida solo depende de las entradas presentes al tiempo t0,
ya que se supone que el sitema arranca al tiempo t0, luego las entradas
cambian a 01 en el tiempo t1 y la salida S tiene ahora el valor 1, que
depende de los valores de las entradas presentes (01) en ese tiempo t1
adems de los valores anteriores que en el tiempo t0 fueron 00 en E1 y
9
E2 respectivamente, luego las entradas cambian a 11 en el tiempo t2 y la
salida S tiene ahora el valor 1, que depende de los valores de las
entradas presentes (11) en ese tiempo t2, adems de los valores
anteriores de E1 y E2 que en el tiempo t0 fueron 00, en el tiempo t1
fueron 01 respectivamente, al tiempo t3 las entradas E1 y E2 cambian a
10 y la salida toma el valor de 0 que depende de los valores de las
entradas presentes (10) en ese tiempo t3, adems de los valores
anteriores de E1 y E2 que en el tiempo t0 fueron 00 en el tiempo t1 fueron
01 y en el tiempo t2 fueron 11 en E1 y E2 respectivamente y el sistema
responde de esta manera en forma indefinida.

Figura 1.11. Representacin grfica de un sistema secuencial.

1.3 EL ELEMENTO DE MEMORIA


El elemento de memoria ms simple almacena un solo bit de informacin
en su salida, est construido mediante puertas lgicas conectadas
mediante un acople cruzado y toma el nombre de celda binaria, bscula
o latch.
Tomando como base a estas celdas binarias se construyen memorias
mucho ms complejas como son los Flip-Flops y en base a estos se
construyen registros que que pueden almacenar varios bits de
informacin.

1.4 LA CELDA BINARIA, LATCH BSICO, BSCULA

10
Una celda binaria, latch bsico o bscula, es un circuito construido con
dos puertas lgicas, es realimentado y su funcin es almacenar en forma
condicional un solo bit de informacin en su salida, ya sea un uno lgico o
un cero lgico, la figura 1.12 muestra su representacin en forma de un
bloque, tiene dos entradas, la una se denomina SET y la otra RESET y
tiene dos salidas que se las llama Q y /Q respectivamente, en este libro la
barra oblicua, diagonal o slash cuyo smbolo es /, representa a una
variable negada, as por ejemplo, si A es una variable, entonces, /A es la
negacin de esa variable A.

Figura 1.12. Diagrama de una Celda Binaria.

En sistemas digitales una celda binaria, bscula o latch bsico se


construye mediante puertas lgicas, hay dos formas de construir, la una
es una celda binaria con puertas NAND de acople cruzado y la otra forma
es mediante compuertas NOR tambin de acople cruzado, las dos
estructuras muestra la figura 1.13.
Como se puede ver en la figura 1.13 cada estructura es realimentada
desde sus salidas Q y /Q hacia la entrada de la puerta opuesta.
Cuando la entrada SET es verdadera la salida Q se hace verdadera,
siempre que la entrada RESET sea falsa, y cuando la entrada RESET es
verdadera, siempre que la entrada SET sea falsa, la salida Q se pone en
su condicin de falsa, a cero lgico, en resumen para almacenar un uno
lgico el SET (set implica poner a uno) tiene que ser verdadero y el
RESET falso, para poner la salida Q a cero, la entrada RESET debe ser
verdadera y falsa la entrada SET, en la tabla 1.2 se resume la operacin
de una celda binaria. Las celdas binarias con puertas NAND responden

11
sus entradas a lgica negativa, y las celdas binarias con puertas NOR,
responden sus entradas a lgica positiva.

Figura 1.13. Dos formas de construir una celda binaria.

Tabla 1.2 Operacin de una celda binaria


La tabla 1.3 muestra la operacin de una celda binaria con puertas NAND,
que trabajan con lgica negativa, un valor verdadero se representa con un
cero lgico y un valor falso con un uno lgico.

Tabla 1.3. Operacin de una celda binaria con puertas NAND.

12
La tabla 1.4 muestra la operacin de una celda binaria con puertas NOR,
como ya se indic, trabaja sus entradas con lgica positiva, esto implica
que un valor verdadero se representa con un uno lgico y un valor falso
con un cero lgico.

Tabla 1.4. Operacin de una celda binaria con puertas NOR.

Al realizar un anlisis cuidadoso del contenido de las tablas 1.3 y 1.4 se


puede concluir que la salida Q tiene el mismo contenido en las dos tablas,
sin embargo las entradas SET y RESET puestas en su respectiva lgica
(positiva o negativa), si cambian, porque funciona en el primer caso con
lgica negativa y en el segundo con lgica positiva, por lo tanto las tablas
en funcin de ceros y unos lgicos son diferentes. Pero realizan la misma
funcin.
El funcionamiento de un latch bsico en funcin de valores verdaderos y
falsos es siempre el mismo e independiente del tipo de lgica, es decir,
cuando se realiza una operacin de SET, el SET debe ser verdadero
(set=v) y la salida Q se hace igual a 1 lgico, set significa poner, colocar,
poner en la salida Q un uno lgico.
Cuando se realiza una operacin de RESET, el reset debe ser verdadero
(reset=v) y la salida Q =0.
Cuando no se realiza ni una operacin de SET ni una de RESET, significa
que el SET es falso (indica que no guarde un uno en Q) y el RESET es
tambin falso (indica que no guarde un cero en Q), en otras palabras se
13
est ordenando al Latch que no haga nada, es decir, el valor de Q no
cambia, se mantiene.
En resumen, es importante mantener presente la tabla de operacin
general (en funcin de valores verdaderos y falsos) de una celda binaria
(tabla 1.2) y acoplar esta tabla al tipo de lgica, positiva o negativa de la
celda binaria, esto se realiz para construir las tablas 1.3, que responde a
lgica negativa, y 1.4 que responde a lgica positiva.
Otro punto importante es tambin notar que en una celda binaria con
puertas NAND, la entrada SET est en la misma puerta que contiene la
salida Q, en cambio en una celda binaria con puertas NOR la entrada SET
est en la misma puerta que contiene la salida /Q.

Ejemplo 1.5
Demuestre la operacin de una celda binaria con puertas NAND. Y
explique claramente los resultados obtenidos.
Para demostrar la operacin de una celda binaria con puertas NAND un
camino es encontrar la tabla de verdad de funcionamiento de esta celda,
para lograr este propsito se debe primero encontrar las ecuaciones
booleanas para las salidas Q y /Q y luego elaborar la tabla de verdad para
estas ecuaciones.
En la figura 1.14 se muestra una celda binaria con puertas NAND, para
que queden identificadas con claridad todas las entradas y salidas que
intervienen en esta celda binaria, se representa la celda como un bloque,
la figura 1.15 muestra este bloque.
De la figura 1.15 se ve claramente que existen cuatro entradas al bloque y
son: SET, RESET, Q y /Q, las dos ltimas tambin son entradas debido a
que son realimentadas hacia el sistema de entradas, sin embargo Q y /Q ,
los dos, son redundantes entre si debido a que la una es la negada de la
otra y por lo tanto se puede considerar a una sola de ellas a Q por
ejemplo.

14
Figura 1.14. Celda Binaria con puertas NAND.

As, el sistema tiene tres entradas SET, RESET y Q, y dos salidas Q y /Q,
con este anlisis en mente se escriben las ecuaciones booleanas y se
construye la tabla de verdad, como son tres entradas se tiene una tabla
de verdad de 23 = 8 filas.

Figura 1.15. Diagrama de bloques de la Celda Binaria con puertas NAND.

De la figura 1.14 se tienen dos ecuaciones:


1. Q= /(SET./Q)
2. /Q=/(Q.RESET)

Remplazando /Q de (2) en (1), se tiene: Q= /(SET./(Q.RESET)).


Q= /SET + (Q.RESET). La tabla 1.5 representa a estas ecuaciones.

15
Tabla 1.5. Celda Binaria con puertas NAND.

La tabla 1.5 se resume de mejor manera en la tabla 1.6.

Tabla 1.6. Resumen de la tabla 1.5.

16
Como se puede observar en la tabla 1.6 la salida Q se encuentra en los
dos lados de la tabla, como entrada y como salida, este fenmeno se
debe a que la salida Q que esta como entrada en la tabla de verdad,
representa el valor actual de la salida Q, es decir antes de que se
actualicen las entradas SET Y RESET, por esto se le denomina Qn, que
es la representacin del estado presente de Q.
La salida Q que est como salida en la tabla de verdad representa el
estado al que va la salida Q cuando se han cambiado los valores en las
entradas SET Y RESET, por esto se le llama el estado siguiente de Q y se
la representa como Qn+1.
Entonces la salida Q de una celda binaria representa tanto al valor actual,
estado presente o Qn, como al valor siguiente o Qn+1 al cual va la salida
Q cuando se han actualizado los valores en las entras SET y RESET, en
la figura 1.16 se representa esta situacin.

Figura 1.16. Representacin de Qn y Qn+1.

En la figura 1.16 se supone que el valor o estado presente de Q, es decir


Qn es 0, y SET = 1 Y RESET = 0, con estas condiciones se actualizan los
valores de las entradas SET y REST a 0 y 1 respectivamente y Q cambia

17
a su estado siguiente igual a 1, esto es Qn+1=1, este estado siguiente se
convierte inmediatamente en el nuevo estado presente.
Esta nomenclatura se utiliza para construir la tabla de verdad que se
indica en la tabla 1.16.
Y la ecuacin queda:

Qn+1= /SET + (Qn.RESET).

1.5 DIAGRAMA DE TIEMPO PARA SET Y RESET VERDADEROS


Para ver el fenmeno de la indeterminacin de la salida Q de una celda
binaria cuando el SET y RESET son los dos verdaderos al mismo tiempo,
se propone el diagrama de tiempo de la figura 1.18, las puertas reales
tienen un retardo de propagacin, que es el tiempo que se demora la
salida de la puerta en responder a cambios en sus entradas.
Para el primer caso se supone una celda binaria que trabaja con lgica
negativa y la puerta a la que se encuentra conectada la seal RESET,
tiene un retardo de propagacin de de 8 nanosegundos, y la otra puerta
16 nanosegundos, la celda redibujada muestra la figura 1.17.
Se supone que al tiempo t= 0, las seales SET Y RESET se hacen
verdaderas al mismo tiempo, es decir las dos caen a cero voltios o nivel
bajo, antes del tiempo t=0, Q=0 y /Q=1, as como SET=1 Y RESET=0.

Figura 1.17 Celda Binaria y retardos de propagacin.


18
Figura 1.18. Diagrama de tiempo para set y reset verdaderos.

Para el segundo caso, la puerta a la que se encuentra conectada la seal


RESET, tiene un retardo de propagacin de 16 nseg., y la otra puerta un
retardo de propagacin de 8 nseg., el grfico de la celda redibujada es
como se indica en la figura 1.19, el diagrama de tiempo se indica en la
figura 1.20.

Figura 1.19. Celda binaria y retardos de propagacin.

Se supone que al tiempo t= 0, las seales SET Y RESET se hacen


verdaderas al mismo tiempo, es decir las dos caen a cero voltios o nivel
bajo, antes del tiempo t=0, Q=0 y /Q=1, as como SET=1 Y RESET=0.

19
Figura 1.20. Diagrama de tiempo para set y reset verdaderos.

Como se puede concluir del anlisis de los dos diagramas de tiempo,


cuando las dos entradas de una celda binaria son las dos verdaderas, el
valor que toma Q no se puede predecir porque depende del retardo de
propagacin de las puertas, y los retardos de las puertas difcilmente son
iguales, es ms todava es difcil determinar de antemano cul de las
puertas tendr el mayor o menor retardo, en definitiva el estado de Q bajo
la condicin estudiada es incierto y depende de la tecnologa de
construccin de las puertas.

1.6 APLICACIONES DE LOS LATCH BSICOS


Las celdas binarias o Latch bsicos tienen varias aplicaciones aqu se
muestran tres y son:

1. Elemento de memoria.
2. Eliminador de rebotes.
3. Implementacin de Flip-Flops y Latch Asincrnicos.

20
La operacin como elemento de memoria ya se describi, como
eliminador de rebotes se discute en el siguiente apartado y el uso en la
construccin de Latch asincrnicos se describir ms adelante.

1.6.1 EL LATCH BSICO COMO ELIMINADORA DE REBOTES


Un rebote se produce cuando se manipula un interruptor, por ejemplo, en
la figura 1.21 se muestra un circuito que permite abrir o cerrar un circuito.
El voltaje de salida es cero cuando el interruptor est en la posicin
indicada en le figura 1.21.

Figura 1.21. Interruptor abierto.

En la figura 1.22 a) se puede observar al interruptor cerrado y en la figura


1.22 b) la forma de onda que se genera al cerrar el interruptor, debe
observarse que el interruptor en el instante en que se cierra genera un
tren de niveles de voltaje altos y bajos que luego de unos pocos
milisegundos se estabiliza en el nivel deseado, en este caso en el nivel
alto, a esta etapa en donde se ha generado ese tren de pulsos se llama
rebote de la seal.
Un inetrruptor ideal debe generar un solo nivel cuando se abre o cierra,
pues el objetivo de un interruptor es poner un solo nivel en la entrada de
un circuito digital y no un conjunto de niveles.
21
Todo interrptor mecnico presenta rebotes y es necesario eliminarlos.

Figura 1.22. Rebote de la seal en un interruptor.

Una celda binaria se puede utilizar como un dispositivo para eliminar los
rebotes producidos por un interruptor.
En el circuito de la figura 1.23, pone el SET o RESET en nivel bajo, si el
interrptor est en la posicin como se indica en la figura 1.23 a), el RESET
est en un potencial alto y el SET en bajo, por lo tanto la salida Q va a
alto, se supone que es una celda binaria con puertas NAND.
Cuando el interruptor por efecto del rebote queda desconectado de la
entrada SET, esta entrada va a nivel alto quedando las dos entradas SET
y RESET momentneamente en nivel alto y por lo tanto la salida Q
mantiene el ltimo nivel, el alto.
Para el caso de la figura 1-22 b), la entrada SET est en alto y RESET
est en bajo y por lo tanto la salida Q va a bajo.
Cuando el interruptor por efecto del rebote queda desconectado de la
entrada RESET, esta entrada va a nivel alto quedando las dos entradas
SET y RESET momentneamente en nivel alto y por lo tanto la salida Q
mantiene el ltimo nivel, el bajo.

22
Figura 1.23. a) SET verdadero, b) RESET verdadero.

Otra forma de construir circuitos eliminadores de rebote es mediante


inversores, en la figura 1.24 se muestran dos circuitos de este tipo.

Figura 1.24. Inversores conectados como eliminadores de rebote

1.7 EL FLIPFLOP ACTIVADO POR NIVEL O LATCH ASINCRNICO


Un latch bsico almacena un bit en su salida Q, el valor de la salida Q
depende de los valores que tengan sus entradas set y reset. Hay
dispositivos que trabajan en una forma parecida a un latch bsico, pero,
con una gran diferencia y esta diferencia est en que estos dispositivos,
actualizan y guardan un bit en su salida Q, si y solamente si, una seal
especial de control les da la orden de actualizar y guardar, vale recalcar
23
que si esta seal de control no les da la orden, la salida Q no se actualiza
pero mantiene guardado el bit antiguo en su salida Q.
La seal de control tiene la funcin de indicarle al dispositivo en que
instante debe actualizar el valor de la salida Q, el valor al cual se actualiza
la salida Q, un cero o un uno, va a depender de los valores que el
dispositivo tenga en sus entradas SET Y RESET. A estos dispositivos se
les denomina latch asincrnicos o Flop-Flops sensibles o activados por
nivel.
Estos dispositivos guardan su bit en la salida Q de un Latch bsico, por lo
tanto, todo latch asincrnico tiene en su interior un latch bsico. Es ms la
salida Q del latch asincrnico es la misma salida Q del latch bsico.
La seal de control en este tipo de dispositivos puede ser un interruptor
pero normalmente es una seal de voltaje peridica, con niveles altos y
bajos, que se le llama reloj o tambin conocida como clock (CLK), de sus
siglas en ingls.
El diagrama de bloque general de un Flip Flop activado por nivel o latch
bsico se muestra en la figura 1.25, como se puede ver consta de n
entradas (E1 a En), la seal de reloj (control) y dos salidas Q y /Q.

Figura 1. 25. Diagrama de bloque general de un latch asincrnico.

El diagrama de bloques, a diferencia del diagrama de bloque general, del


24
latch asincrnico muestra con ms detalle el interior del mismo, en el
consta el latch bsico y el decodificador de set y reset, este diagrama se
muestra en la figura 1.26.
Las n entradas del latch asincrnico definen el valor (uno o cero) que el
dispositivo va a almacenar en su salida Q y el reloj el instante en que
realiza esa accin, como se indic el reloj actualiza la salida Q y por
supuesto la salida /Q.

Figura 1.26. Diagrama de bloques de un latch asincrnico.

1.7.1 TIPOS DE LATCH ASINCRNICOS


Existen una gran variedad de latch asincrnicos, en realidad se podra
decir que infinitos, ya que como se ver ms adelante puede crearse uno
personalizado, es decir, segn las necesidades de los usuarios.
Sin embargo existen los siguientes tipos tpicos de latch asincrnicos y
son.

1. Flip flop tipo D.


25
2. Flip flop tipo T.
3. Flip flop tipo J-K.
4. Flip flop tipo S.R.

Todo latch asincrnico trabaja en sincrona con la seal de reloj, por lo


tanto es necesario conocer algunas particularidades del reloj.

1.8 EL RELOJ O CLK


Un reloj es una seal de voltaje, formada por niveles altos y bajos
alternados, como se indica en la figura 1.27, tiene una frecuencia en Hz y
un periodo en segundos.

Figura 1.27. El reloj.

1.8.1 TIPOS DE RELOJ


Los dispositivos que tienen una seal de reloj, se activan o son sensibles
a uno de los niveles o a uno de los flancos del reloj, por ejemplo pueden
ser sensibles al nivel alto, o al nivel bajo, o al flanco de subida o al flanco
de bajada, de acuerdo a esta caracterstica se pueden distinguir los
siguientes tipos de relojes:

1. Verdadero con nivel alto.


2. Verdadero con nivel bajo.
3. Verdadero con el flanco de subida.
4. Verdadero con el flanco de bajada.

26
1.8.2 RELOJ VERDADERO CON NIVEL ALTO
Los Flip Flops activados por nivel o latch asincrnicos trabajan con relojes
sensibles a uno de los niveles de la seal de reloj, es decir su reloj puede
ser, verdadero con el nivel alto o con el nivel bajo, en el caso de un reloj
verdadero con el nivel alto la accin de almacenar un bit de informacin
se realiza cuando la seal de reloj est en el nivel alto. La figura 1.28
muestra un reloj con el nivel alto recalcado, a los relojes verdaderos con
nivel alto se suele simbolizar como CLK.H, la H de High o alto, en la figura
1.29 se muestra un dispositivo con la simbologa para el reloj verdadero
con nivel alto.

Figura 1.28 El reloj verdadero con nivel alto.

Figura 1.29. Simbologa del reloj verdadero con nivel alto.

Ntese en la figura 1.29 que el smbolo para un reloj verdadero con nivel
alto es una lnea simple conectada al bloque y simbolizada como CLK.
En general si un dispositivo digital trabaja con un reloj verdadero con nivel
alto, la operacin que tiene que ejecutar el dispositivo, realiza cuando el
reloj este en nivel alto, as por ejemplo, si se trata de un contador, la
27
accin de contar, el contador la ejecutara cuando el reloj este en nivel
alto.

1.8.3 RELOJ VERDADERO CON NIVEL BAJO


En los latch asincrnicos que trabajan con relojes verdaderos con nivel
BAJO, la accin de actualizar y almacenar un bit de informacin se realiza
cuando la seal de reloj est en el nivel bajo, la figura 1.30, muestra un
reloj con el nivel bajo recalcado, se suele simbolizar como CLK.L, la L de
low o bajo.

Figura 1.30 El reloj verdadero con nivel bajo.

Por ejemplo, si se trata de un contador, la accin de contar, el contador la


ejecutara cuando el reloj este en nivel bajo.
La figura 1.31 muestra un dispositivo que tiene la simbologa del reloj
verdadera con nivel bajo, ntese que el smbolo es una lnea recta que
termina en un cero como haciendo referencia a aun cero lgico y se
conecta al dispositivo..

Figura 1.31. Simbologa del reloj verdadero con nivel bajo.

28
1.8.4 RELOJ VERDADERO CON EL FLANCO DE SUBIDA
Los latch asincrnicos que trabajan con relojes verdaderos con el flanco
de subida, la accin de actualizar y almacenar un bit de informacin se
realiza cuando la seal de reloj est haciendo su transicin de nivel bajo a
nivel alto.
La transicin de nivel bajo a nivel alto se muestra en la figura 1.32, se
suele simbolizar como CLK., es decir CLK punto y una flecha hacia

arriba.
Figura 1.32 El reloj verdadero con el flanco de subida.

Por ejemplo, si se trata de un contador, la accin de contar, el contador la


ejecutara cuando el reloj este haciendo su transicin desde el nivel bajo al
nivel alto.
La simbologa para un reloj verdadero con el flanco de subida se muestra
en la figura 1.33, all se puede ver que el reloj est representado por una
recta que termina en una flecha que est dentro del dispositivo.

Figura 1.33. Simbologa del reloj verdadero con el flanco de subida.

29
1.8.5 RELOJ VERDADERO CON EL FLANCO DE BAJADA
En los Flip-Flops que trabajan con relojes verdaderos con el flanco de
bajada, la accin de almacenar un bit de informacin se realiza cuando la
seal de reloj est haciendo su transicin de nivel alto a nivel bajo, esto
se indica en la figura 1.34, se suele simbolizar como CLK.!, es decir clk
punto flecha hacia abajo.

Figura 1.34 El reloj verdadero con el flanco de bajada.

La simbologa para un reloj verdadero con el flanco de bajada se muestra


en la figura 1.35, all se puede ver que el reloj est representado por una
recta que termina en un crculo seguido de una flecha que se encuentra
dentro del dispositivo.
Por ejemplo, si se trata de un contador, la accin de contar, el contador la
ejecutara cuando el reloj este haciendo su transicin desde el nivel alto al
nivel bajo.

Figura 1.35. Simbologa del reloj verdadero con el flanco de bajada.

30
1.9 DISEO DE LATCH ASINCRNICOS
Como se explic un latch asincrnico es sensible al nivel del reloj y se
disea en base a una latch bsico o celda binaria. Para disear un latch
asincrnico se requiere, la siguiente informacin:

1. Las especificaciones de cmo debe trabar el latch asincrnico.


2. El tipo de celda binaria o latch bsico (NAND o NOR) que va a
utilizar.

Las especificaciones de cmo debe trabajar el latch asincrnico se puede


realizar mediante una descripcin oral o escrita o mediante una tabla de
verdad.
La celda binaria o latch bsico que se va a utilizar como base para el
diseo del latch asincrnico hay que especificar, porque un tipo trabaja
con lgica positiva (NOR) y, el otro con lgica negativa (NAND).
El diseo del decodificador de SET y RESET se realiza utilizando las
tcnicas de diseo de circuitos combinacionales, es decir, mediante una
tabla de verdad, es importante notar que este decodificador es un circuito
combinacional.

1.9.1 EL LATCH ASINCRNICO TIPO D


El diagrama de bloque de un latch asincrnico tipo D muestra la figura
1.36, su funcin es tomar el valor que tiene en la entrada D y transmitir a
la salida Q ese valor, en otras palabras, la salida Q es igual a la entrada D
cuando el reloj es verdadero. La descripcin del funcionamiento de este
latch asincrnico, se resume en la tabla 1.7. A esta tabla se le llama la
tabla caracterstica, como se puede ver no es una tabla comn ya que
intervienen el estado presente y el estado siguiente de Q.

31
Figura 1.36. Diagrama de bloques del Latch Asincrnico tipo D.

Como se puede concluir de la tabla 1.7 cuando el reloj est en su


condicin de falso, la salida Q no cambia, ya que el estado presente, Qn,
es igual al estado siguiente Qn+1, esto est en concordancia con la
funcin que tiene el reloj.

. Tabla 1.7. Tabla caracterstica del latch tipo D.

Cuando el reloj es verdadero el valor que se encuentra en la entrada D


pasa a la salida Q, permitiendo que el estado siguiente de Q, Qn+1, sea el
valor de D.

32
El funcionamiento de este dispositivo es parecido al de un interruptor, que
en l un extremo esta la entrada D y en el otro la salida Q, el CLK controla
al interruptor, si el reloj es verdadero el interruptor se cierra y la salida Q
se conecta fsicamente a la entra D, si el reloj es falso, el interruptor est
abierto y no hay una conexin fsica entre la salida Q y la entrada D, por lo
tanto, la salida Q mantiene el valor, no cambia, la figura 1.37 a) y b)
muestra la analoga del latch asincrnico D con un interruptor

Figura 1. 37. Analoga del latch asincrnico D con un interruptor.

Se debe observar que mientras el reloj es falso no hay cambio de estado


para Q, por lo que Qn = Qn+1, cuando el reloj es verdadero el latch
asincrnico D realiza la accin para la cual fue diseado y Qn+1=D.
Un latch asincrnico tipo D que sea sensible al nivel alto del reloj se
puede construir con un multiplexor de 2 a 1, este multiplexor funcionando
como un latch asincrnico tipo D se muestra en la figura 1.38. En la una
entrada del multiplexor esta la entrada D (lnea 1), en la otra (lnea 0) la
salida Q y en la lnea de seleccin del multiplexor est conectado el reloj,
cuando el multiplexor selecciona la lnea 0, el reloj est en cero, la salida
Q es igual a Q mismo, porque esta realimentada, cuando el reloj alcanza
el nivel, la lnea de seleccin del multiplexor selecciona la lnea uno, es
decir el valor de la entrada D.
33
Figura 1.38. Un multiplexor trabajando como un latch asincrnico.

Un latch asincrnico tipo D, sensible al nivel bajo del reloj construido con
un multiplexor de 2 a 1, se muestra la figura 1.39.

Figura 1.44. Un multiplexor trabajando como un latch asincrnico.


La salida Q va conectada a la entrada identifica como 1y la entra D est
conectada a la entrada cero, cuando el reloj (lnea de seleccin) es igual a
cero, Q es igual a D y el reloj es igual a uno, Q es igual a Q mismo.

34
Ejemplo 1.6
Disee un latch asincrnico tipo D, el dispositivo debe tener un latch
bsico que trabaje con lgica positiva como elemento de memoria.
El latch bsico con puertas NOR trabaja con lgica positiva y es el que
debe utilizarse. El diagrama de bloques general del latch asincrnico D y
el diagrama de bloques general de un latch asincrnico mostrando al latch
bsico se muestra en la figura 1.40.

Figura 1.40. a) Diagrama de bloques general del latch asincrnico D b)


diagrama de bloques general de un latch asincrnico mostrando al latch
bsico.
El procedimiento de diseo se explica a continuacin:

1. Se comparan los diagramas de bloques.


2. Se dibuja, como una caja negra, el diagrama de bloques del latch
asincrnico que se quiere disear.
3. Se conectan, mediante una interfaz, las entradas de la caja negra
del paso anterior a las entradas set y reset del latch bsico.
4. Se disea el decodificador de set y reset.

35
5. Paso 1, se comparan los diagramas de bloques. La figura 1.40
muestra los dos diagramas de bloques.
6. Se implementa.

Al comparar las figura 1.40 a) y b), la diferencia es evidente, est en las


entradas, el grfico a) tiene una sola entrada externa denominada D
aparte del reloj y el bloques b) tiene varias entradas externas a parte del
reloj.
Paso 2, se dibuja el diagrama de bloques del latch asincrnico como una
caja negra, que en su interior debe estar el latch bsico, puesto que todo
latch asincrnico tiene en su interior un latch bsico, ver la figura 1.41 b.

Figura 1.41. Bloques como cajas negras.

Los grficos a) y b) de la figura 1.41 vistos como una caja negra son
idnticos.
Paso 3, Hay que conectar la entra D y el CLK a las dos nica entradas
disponibles, es decir a set y reset, lgicamente como no puede ser una
conexin directa entra lneas, es necesario buscar algn mecanismo para

36
realizar esta conexiones, una forma de hacer es mediante una interfaz, un
bloque intermedio, que una las entradas D y CLK con set y reset.

Figura 1.42. Conexin de D y CLK a set y rest del latch bsico.

Esta conexin muestra la figura 1.42, se han conectado a esta interfaz


tambin las salidas Q y /Q porque esta interfaz necesita saber cul es el
estado en el que estn las salidas Q y /Q, ya que segn la tabla de
funcionamiento del latch bsico, la salida Q depende del valor de las
entrada set, reset, Q y /Q.
Paso 4, en la figura 1.42, el nico bloque desconocido es la interfaz, el
latch bsico se sabe ya cmo est construido, por lo que no hay que
disear este bloque, como no hay caminos de retroalimentacin de las
salidas del bloque a a las entradas del mismo se concluye que este
bloque es un circuito combinacional, por lo tanto se utiliza una tabla de
verdad para disear, la tabla es la tabla 1.8. En la tabla de verdad 1.8 las
entradas van del lado izquierdo y las salidas del lado derecho. , no hay
que olvidar que esta no es una tabla comn sino una tabla caracterstica
por lo tanto contiene el estado presente Qn y el estado siguiente Qn+1,
las salidas son set y reset.

37
Tabla 1.8. Tabla para disear el decodificador set -reset.

De la tabla 1.8 se crean los mapas de Karnaught para simplicar las


funciones. La tabla 1.9 muestra el mapa para simplificar la seal set.

Tabla 1.9. Mapa para la simplicacin del set.

SET= CLK.D.
La tabla 1.10 muestra el mapa para simplificar la seal reset.

38
Tabla 1.10. Mapa para la simplicacin del reset.

RESET= CLK./D .

Paso 5, El ltimo paso es la implementacin de las ecuaciones booleanas


encontradas para set y rest, la figura 1.43 muestra la implementacin.

Figura 1.43. Implementacin del latch asincrnico tipo D.

La tabla de verdad queda como se indica en la tabla 1.7, se observa que


es la misma tabla del Latch tipo D, aadida las seales de salidas SET y
RESET.

1.9.2 EL LATCH ASINCRNICO TIPO T


El diagrama de bloque de un latch asincrnico tipo T se muestra en la
figura 1.44 a), este dispositivo tiene una entrada denominada T a parte del
reloj y dos salidas Q y /Q, su funcionamiento es como indica la tabla
caracterstica 1.11, las columnas de esta tabla que describen su
funcionamiento son: CLK, T, Qn y Qn+1, las columnas set y reset no
deben ser tomadas en cuenta, son ms bien tiles para el ejemplo 1.7.
Como se puede concluir del anlisis de las cuatro columnas (CLK, T, Qn,
Qn+1) de la tabla 1.11 este dispositivo mantiene su estado, la salida Q no

39
cambia, mientras la entrada T sea igual a cero, cuando esta entrada es
igual a uno, el estado siguiente, Qn+1, es el opuesto al estado presente
Qn.
Como en todo latch asincrnico el reloj es la seal que controla el instante
en que el dispositivo actualiza su salida Q. si el reloj es falso la salida Q
no cambia independientemente del valor que tenga la entrada T, si el reloj
es verdadero el dispositivo trabaja como indican las cuatro columnas de la
tabla 1.11.

Ejemplo 1.7
Disee un latch asincrnico tipo T, suponga que va a trabajar con lgica
positiva el latch bsico. Encuentre las ecuaciones booleanas pero no
implemente.
Paso 1, se comparan los diagramas de bloques. La figura 1.44 muestra
los dos diagramas de bloques. Al comparar las dos figura a) y b), la
diferencia es evidente y est en las entradas, el grfico a tiene una sola
entrada externa denominada T aparte del reloj y el bloques b tiene varias
entradas externas a parte del reloj.
Paso 2, se dibuja el diagrama de bloques del latch asincrnico como una
caja negra, que en su interior debe estar el latch bsico, puesto que todo
latch asincrnico tiene en su interior un latch bsico, ver la figura 1.45 b.
Los grficos a) y b) de la figura 1.45 vistos como una caja negra son
idnticos.

40
Figura 1.44. a) Diagrama de bloques general del latch asincrnico T b)
diagrama de bloques general de un latch asincrnico mostrando al latch
bsico.

Figura 1.45. Bloques como cajas negras.

Paso 3, Hay que conectar la entra T y el CLK a las dos nica entradas
disponibles, es decir a set y reset, lgicamente como no puede ser una
conexin directa entra lneas, es necesario buscar algn mecanismo para
realizar esta conexiones, una forma de hacer es mediante una interfaz, un
bloque intermedio, que una las entradas T y CLK con set y reset.

41
Figura 1.46. Conexin de T y CLK a set y reset del latch bsico.

Esta conexin muestra la figura 1.46, se han conectado a esta interfaz


tambin las salidas Q y /Q porque esta interfaz necesita saber cul es el
estado en el que estn las salidas Q y /Q, ya que segn la tabla de
funcionamiento del latch bsico, la salida Q depende del valor de las
entrada set, reset, Q y /Q.
Paso 4, en la figura 1.46, el nico bloque desconocido es la interfaz, el
latch bsico se sabe ya cmo est construido, por lo que no hay que
disear este bloque, como no hay caminos de retroalimentacin de las
salidas del bloque a las entradas del mismo se concluye que este bloque
es un circuito combinacional, por lo tanto se utiliza una tabla de verdad
para disear, la tabla es la tabla 1.11.
En la tabla de verdad 1.9 las entradas van del lado izquierdo y las salidas
del lado derecho. , no hay que olvidar que esta no es una tabla comn
sino una tabla caracterstica por lo tanto contiene el estado presente Qn y
el estado siguiente Qn+1, las salidas son set y reset.
De la tabla 1.11 se crean los mapas de Karnaught para simplicar las
funciones. La tabla 1.12 muestra el mapa para simplificar la seal set.

42
Tabla 1.11. Tabla para disear el decodificador set -reset.

Tabla 1.12. Mapa para la simplicacin del set.

SET= CLK.T/Q.
La tabla 1.13 muestra el mapa para simplificar la seal reset.

Tabla 1.13. Mapa para la simplicacin del reset.

43
RESET=CLK.T.Q

Paso 5, El ltimo paso es la implementacin de las ecuaciones booleanas


encontradas para set y rest, pero en este ejemplo no se pide implementar.

1.9.3 EL LATCH ASINCRNICO TIPO JK


El diagrama de bloque de un latch asincrnico tipo JK se muestra en la
figura 1.47 a), este dispositivo tiene dos entradas denominadas J y K a
parte del reloj y dos salidas Q y /Q, su funcionamiento es como indica la
tabla caracterstica 1.14, las columnas de esta tabla que describen su
funcionamiento son: CLK, J, K, Qn y Qn+1, las columnas set y reset no
deben ser tomadas en cuenta en este momento, son ms bien tiles para
el ejemplo 1.8.
Como se puede concluir del anlisis de las cuatro columnas (J, K, Qn,
Qn+1) de la tabla 1.14 este dispositivo mantiene su estado, la salida Q no
cambia, siempre que JK=00 y el reloj verdadero, cuando JK=10 y el reloj
verdadero la salida Q es igual a uno, cuando JK=01 y el reloj verdadero la
salida Q es igual a cero, y cuando JK=11 la salida Q cambia de estado, es
decir Qn+1=/Qn,
La tabla 1.14 no incluye el reloj, solo para evitar que esta tabla no sea
muy extensa, ya que si se considera el reloj, esta tabla tendra 16
combinaciones posibles y por ende 16 filas.
Como en todo latch asincrnico el reloj es la seal que controla el instante
en que el dispositivo actualiza su salida Q. si el reloj es falso la salida Q
no cambia independientemente del valor que tengan las entradas JK, si el
reloj es verdadero el dispositivo trabaja como indican las cuatro columnas
de la tabla 1.14.

Ejemplo 1.8

44
Disee un Latch Asincrnico tipo J-K, base su diseo en una celda binaria
con puertas NOR. No implemente.
Paso 1, se comparan los diagramas de bloques. La figura 1.52 muestra
los dos diagramas de bloques.

Figura 1.47. a) Diagrama de bloques general del latch asincrnico JK b)


diagrama de bloques general de un latch asincrnico mostrando al latch
bsico.

Al comparar las dos figura a y b, la diferencia es evidente y est en las


entradas, el grafico a tiene dos entradas externa denominada J y K aparte
del reloj y el bloques b tiene varias entradas externas a parte del reloj.
Paso 2, se dibuja el diagrama de bloques del latch asincrnico como una
caja negra, que en su interior debe estar el latch bsico, puesto que todo
latch asincrnico tiene en su interior un latch bsico, ver la figura 1.48 b).
Los grficos a) y b) de la figura 1.53 vistos como una caja negra son
idnticos.

45
Figura 1.48. Bloques como cajas negras.

Paso 3, Hay que conectar la entras J, K y el CLK a las dos nica entradas
disponibles, es decir a set y reset, lgicamente como no puede ser una
conexin directa entra lneas, es necesario buscar algn mecanismo para
realizar esta conexiones, una forma de hacer es mediante una interfaz, un
bloque intermedio, que una las entradas J, K y CLK con set y reset.

Figura 1.49. Conexin de JK y CLK a set y rest del latch bsico.

46
Esta conexin muestra la figura 1.49, se han conectado a esta interfaz
tambin las salidas Q y /Q porque esta interfaz necesita saber cul es el
estado en el que estn las salidas Q y /Q, ya que segn la tabla de
funcionamiento del latch bsico, la salida Q depende del valor de las
entrada set, reset, Q y /Q.
Paso 4, en la figura 1.49, el nico bloque desconocido es la interfaz, el
latch bsico se sabe ya cmo est construido, por lo que no hay que
disear este bloque, como no hay caminos de retroalimentacin de las
salidas del bloque a a las entradas del mismo se concluye que este
bloque es un circuito combinacional, por lo tanto se utiliza una tabla de
verdad para disear, la tabla es la tabla 1.14.

Tabla 1.14. Tabla para disear el decodificador set -reset.

En la tabla de verdad 1.14 las entradas van del lado izquierdo, con la
finalidad de que esta tabla no sea muy grande se deja al reloj para
incluirle al final. Las salidas van del lado derecho de la tabla, no hay que
olvidar que esta no es una tabla comn sino una tabla caracterstica por lo

47
tanto contiene el estado presente Qn y el estado siguiente Qn+1, las
salidas son set y reset.
De la tabla 1.14 se crean los mapas de Karnaught para simplicar las
funciones. La tabla 1.15 muestra el mapa para simplificar la seal set.

Tabla 1.15. Mapa para la simplicacin del set.

SET= J.K./Qn.CLK.

La tabla 1.16 muestra el mapa para simplificar la seal reset.

Tabla 1.16. Mapa para la simplicacin del reset.

RESET= CLK./D.

Paso 5, El ltimo paso es la implementacin de las ecuaciones booleanas


encontradas para set y rest.
48
Ejemplo 1.9
Disee un latch asincronico denominado SN, que trabaja segn como se
indica en la tabla 1.17, base su diseo en una celda binaria con puertas
NOR.

Tabla 1.17. Funcionamiento del latch asincrnico SN.

Paso 1, se comparan los diagramas de bloques. La figura 1.50 muestra


los dos diagramas de bloques.
Al comparar las dos figura a y b, la diferencia es evidente y est en las
entradas, el grafico a tiene dos entradas externa denominada S y N
aparte del reloj y el bloques b tiene varias entradas externas a parte del
reloj.
Paso 2, se dibuja el diagrama de bloques del latch asincrnico como una
caja negra, que en su interior debe estar el latch bsico, puesto que todo
latch asincrnico tiene en su interior un latch bsico, ver la figura 1.51 b.

49
Figura 1.50. a) Diagrama de bloques general del latch asincrnico SN b)
diagrama de bloques general de un latch asincrnico mostrando al latch
bsico.

Figura 1.51. Bloques como cajas negras.

Los grficos a y b de la figura 1.56 vistos como una caja negra son
idnticos.
Paso 3, Hay que conectar la entras S, N y el CLK a las dos nica entradas
disponibles, es decir a set y reset, lgicamente como no puede ser una
conexin directa entra lneas, es necesario buscar algn mecanismo para
realizar esta conexiones, una forma de hacer es mediante una interfaz, un
bloque intermedio, que una las entradas S, N y CLK con set y reset.
50
Figura 1.52. Conexin de SN y CLK a set y rest del latch bsico.

Esta conexin muestra la figura 1.52, se han conectado a esta interfaz


tambin las salidas Q y /Q porque esta interfaz necesita saber cul es el
estado en el que estn las salidas Q y /Q, ya que segn la tabla de
funcionamiento del latch bsico, la salida Q depende del valor de las
entrada set, reset, Q y /Q.
Paso 4, en la figura 1.52, el nico bloque desconocido es la interfaz, el
latch bsico se sabe ya cmo est construido, por lo que no hay que
disear este bloque, como no hay caminos de retroalimentacin de las
salidas del bloque a a las entradas del mismo se concluye que este
bloque es un circuito combinacional, por lo tanto se utiliza una tabla de
verdad para disear, la tabla es la tabla 1.16.
En la tabla de verdad 1.16 las entradas van del lado izquierdo, con la
finalidad de que esta tabla no sea muy grande se deja al reloj para
incluirle al final. Las salidas van del lado derecho de la tabla, no hay que
olvidar que esta no es una tabla comn sino una tabla caracterstica por lo
tanto contiene el estado presente Qn y el estado siguiente Qn+1, las
salidas son set y reset.
De la tabla 1.16 se crean los mapas de Karnaught para simplicar las
funciones. La tabla 1.17 muestra el mapa para simplificar la seal set.

51
Tabla 1.16. Tabla para disear el decodificador set -reset.

Tabla 1.17. Mapa para la simplicacin del set.

SET= ((N./Qn)+ (S./Qn)) Se incluye el reloj. SET= ((N./Qn)+ (S./Qn)).CLK


La tabla 1.18 muestra el mapa para simplificar la seal reset.

Tabla 1.18. Mapa para la simplicacin del reset.

52
RESET= (N./ Qn).

Se incluye el reloj.

RESET= (N./Qn).CLK .

Paso 5, El ltimo paso es la implementacin de las ecuaciones booleanas


encontradas para set y reset, no se implementa.

1.9.4 EL LATCH ASINCRNICO TIPO SR


El diagrama de bloque de un latch asincrnico tipo SR se muestra en la
figura 1.53, este dispositivo tiene dos entradas denominadas S y R a parte
del reloj y dos salidas Q y /Q, su funcionamiento es como indica la tabla
caracterstica 1.19.
Como se puede concluir del anlisis de las columnas de la tabla 1.19 este
dispositivo mantiene su estado, la salida Q no cambia, siempre que
SR=00 y el reloj verdadero, cuando SR=10 y el reloj verdadero la salida Q
es igual a uno, cuando SR=01 y el reloj verdadero la salida Q es igual a
cero, y cuando SR=11 la salida Q es indeterminada.

Figura 1.53. Diagrama de bloque del latch asincrnico SR.

53
La tabla 1.19 no incluye el reloj, solo para evitar que esta tabla no sea
muy extensa, ya que si se considera el reloj, esta tabla tendra 16
combinaciones posibles y por ende 16 filas.

Tabla 1.19. Tabla caracterstica del latch asincrnico tipo SR.

Como en todo latch asincrnico el reloj es la seal que controla el instante


en que el dispositivo actualiza su salida Q. si el reloj es falso la salida Q
no cambia independientemente del valor que tengan las entradas SR, si el
reloj es verdadero el dispositivo trabaja como la tabla 1.19.
Este dispositivo trabaja en forma muy parecida al latch asincrnico JK, la
diferencia est en el valor que toma la salida Q cuando las dos entradas
son verdaderas simultneamente.

Ejemplo 1.10
Disee un Latch Asincrnico tipo SR, base su diseo en una celda binaria
con puertas NOR. No implemente.
54
Paso 1, se comparan los diagramas de bloques. La figura 1.54 muestra
los dos diagramas de bloques.

Figura 1.54. a) Diagrama de bloques general del latch asincrnico SR b)


diagrama de bloques general de un latch asincrnico mostrando al latch
bsico.
Al comparar las dos figura a y b, la diferencia es evidente y est en las
entradas, el grafico a tiene dos entradas externas denominada S y R
aparte del reloj y el bloque b tiene varias entradas externas a parte del
reloj.
Paso 2, se dibuja el diagrama de bloques del latch asincrnico como una
caja negra, que en su interior debe estar el latch bsico, puesto que todo
latch asincrnico tiene en su interior un latch bsico, ver la figura 1.55 b.

Figura 1.55. Bloques como cajas negras.

55
Los grficos a y b de la figura 1.55 vistos como una caja negra son
idnticos.
Paso 3, Hay que conectar la entras S, R y el CLK a las dos nica entradas
disponibles, es decir a set y reset, lgicamente como no puede ser una
conexin directa entra lneas, es necesario buscar algn mecanismo para
realizar esta conexiones, una forma de hacer es mediante una interfaz, un
bloque intermedio, que una las entradas S, R y CLK con set y reset.

Figura 1.56. Conexin de JK y CLK a set y rest del latch bsico.

Esta conexin muestra la figura 1.56, se han conectado a esta interfaz


tambin las salidas Q y /Q porque esta interfaz necesita saber cul es el
estado en el que estn las salidas Q y /Q, ya que segn la tabla de
funcionamiento del latch bsico, la salida Q depende del valor de las
entrada set, reset, Q y /Q.
Paso 4, en la figura 1.56, el nico bloque desconocido es la interfaz, el
latch bsico se sabe ya cmo est construido, por lo que no hay que
disear este bloque, como no hay caminos de retroalimentacin de las
salidas del bloque a las entradas del mismo se concluye que este bloque
es un circuito combinacional, por lo tanto se utiliza una tabla de verdad
para disear, la tabla es la tabla 1.14.
56
Tabla 1.20. Tabla para disear el decodificador set -reset.

En la tabla de verdad 1.20 las entradas van del lado izquierdo, con la
finalidad de que esta tabla no sea muy grande se deja al reloj para
incluirle al final. Las salidas van del lado derecho de la tabla, no hay que
olvidar que esta no es una tabla comn sino una tabla caracterstica por lo
tanto contiene el estado presente Qn y el estado siguiente Qn+1, las
salidas son set y reset.
De la tabla 1.20 se crean los mapas de Karnaught para simplicar las
funciones.
La tabla 1.21. Muestra el mapa para simplificar la seal set.

Tabla 1.21. Mapa para la simplicacin del set.

57
SET= S./Qn.
Como se debe incluir el reloj en la ecuacin anterior se tiene:

SET= S/Qn.CLK.

La tabla 1.22 muestra el mapa para simplificar la seal reset.

Tabla 1.22. Mapa para la simplicacin del reset.

RESET= N.
Como se debe incluir el reloj en la ecuacin anterior se tiene:

RESET= N.CLK

Paso 5, El ltimo paso es la implementacin de las ecuaciones booleanas


encontradas para set y rest.

1.9.5 LATCH ASINCRNICOS MAESTRO - ESCLAVO

58
Los latch asincrnicos maestro-esclavo son dispositivos que se
construyen conectando en cascada dos latch asincrnicos del mismo tipo,
el uno trabaja con el nivel alto del reloj y el otro con el mismo reloj, pero
con el nivel bajo, mediante un inversor.

Figura 1.57. Diagramas de bloques de latchs asincrnicos maestro-


esclavo D.

La figura 1.57 muestra dos formas de construir latch asincrnicos


maestro- esclavo tipo D, ntese que el inversor est conectado al reloj de
la etapa esclavo y en el otro al reloj de la etapa maestra.

Ejemplo 1.11
Analice el latch asincrnico que se muestra en la figura 1.57 a), suponga
que la seal de reloj y la seal D son las que se indican en la figura 1.58.
Una muy buena estrategia para analizar dispositivos conectados en serie
es separar cada etapa y analizar cada una en forma independiente (como
si las otras etapas no existieran), para este ejemplo se analiza primero la
etapa maestra y luego la etapa esclava.
En la etapa maestra cuando el reloj se encuentra en nivel alto la seal D
va a su salida Q, y cuando el reloj est en nivel bajo la salida Q, se
mantiene, no cambia de estado, en el grafico 1.58 esa seal es la Q1.

59
La segunda etapa, la esclava, recibe en su entrada D la salida Q1 de la
etapa maestra, como esta etapa se activa cuando el reloj est en nivel
bajo, entonces la entrada Q1 va a la salida Q2 cundo el reloj est en nivel
bajo.
En la figura 1.58 se muestra el diagrama de tiempo que resulta del
anlisis del latch asincrnico que se muestra en la figura 1.57 a.

Figura1.58. Diagrama de tiempo para el ejemplo 1.11.

Un anlisis ms detallado de la figura 1.58 muestra que la salida Q2 es


igual al valor de la entra D cuando el reloj est en su transicin de nivel
alto a nivel bajo, el flanco de bajada, por lo tanto este dispositivo trabaja
como si fuera activado por el flanco de bajada del reloj.
Tambin se puede pensar que como la primera etapa trabaja con el reloj
en nivel alto y la segunda etapa con el mismo reloj pero en nivel bajo, la
coincidencia del reloj para las dos etapas es precisamente cuando el reloj
est haciendo su transicin de nivel alto a nivel bajo. Las dos etapas
como un todo deben responder a un solo reloj, y el nico lugar en donde
los dos relojes coinciden es en la transicin de nivel alto a bajo del reloj

60
que se aplica a la etapa maestra, de ah que efectivamente este
dispositivo maestro-esclavo trabaja con el flanco de bajada del reloj que
ingresa a la etapa maestra.
Si se realiza el mismo anlisis del dispositivo 1.57 b), se concluira que el
dispositivo trabaja con el flanco de subida del reloj, en este caso las dos
etapas la maestra y esclava coinciden cuando el reloj est haciendo su
transicin de nivel bajo a nivel alto.

1.9.6 LATCH ASINCRNICOS MAESTRO - ESCLAVO JK


Un latch asincrnico maestro-esclavo tipo JK se construye uniendo en
cascada dos latch asincrnicos tipo JK como muestra la figura 1.59 a) y
b), en esa figura se ve que el primer latch asincrnico JK, la etapa
maestra, tiene conectado el reloj directamente y el otro latch asincrnico
JK, la etapa esclava, tiene conectado el mismo reloj mediante un inversor,
esta conexin hace que la primera etapa responda al nivel alto del reloj y
la segunda al nivel bajo del mismo reloj.
las salidas Q y /Q de la primera etapa se conecta a la entrada J y K
respectivamente de la segunda etapa, de tal manera que los datos
ingresan por las entradas JK del primer latch asincrnico JK , la etapa
maestra, y la salida es la salida Q del segundo latch asincrnico JK, la
etapa esclava.

Figura 1.59. Latchs asincrnicos maestro-esclavo JK.

61
Aplicando el mismo razonamiento que se aplic al latch asincrnico
maestro-esclavo tipo D, se puede concluir que si la etapa maestra del JK
trabaja con el nivel alto del reloj y la etapa esclava con el nivel bajo del
reloj, las dos etapas en conjunto deben trabajar con un nico reloj y la
nica forma es cuando el nivel alto del reloj de la etapa maestra coincide
con el nivel bajo del reloj de la etapa esclava y el lugar de coincidencia es
en la transicin de nivel alto a nivel bajo, en conclusin este dispositivo
maestro-esclavo trabaja con el flanco de baja del reloj.
Respecto del dispositivo de la figura 1.59 b), aplicando el mismo
razonamiento anterior, se puede concluir que trabaja con el flanco de
subida del reloj que esta aplicada a la etapa maestra.

1.10 CONVERSIN ENTRE LATCH ASINCRNICOS


Para convertir un Latch asincrnico en otro tipo de latch asincrnico, es
conveniente primero hacer un diagrama de bloques que permita entender
el proceso que se puede seguir para realizar esta conversin, el
procedimiento es muy parecido al aplicado en el diseo de latch
asincrnicos.
Los pasos que se pueden seguir para la conversin se indican a
continuacin:

1. Se comparan los diagramas de bloques.


2. Se dibuja, como una caja negra, el diagrama de bloques del latch
asincrnico que se quiere obtener.
3. Se conectan, mediante una interfaz, las entradas de la caja negra
del paso anterior a las entradas del latch asincrnico que se
convertir, el latch dado.
4. Se disea el decodificador.
5. Se implementa.

62
Este procedimiento se aplica a los ejemplos siguientes.

Ejemplo 1.12
Convierta o transforme un latch asincrnico tipo D, en un latch asincrnico
tipo T.
Paso 1, se comparan los diagramas de bloques. La figura 1.60 muestra
los dos diagramas de bloques, del latch que se quiere convertir (D) y del
latch al que se desea llegar (T).

Figura 1.60. Latch asincrnico D y T.

Al comparar las dos figura a y b, solo desde el punto de vista de


diagramas de bloques y nada ms, la diferencia es evidente y est en las
entradas, el grafico a tiene una sola entrada externa denominada D aparte
del reloj y el bloques b tiene una entrada denominada T a parte del reloj.
Paso 2, se dibuja el diagrama de bloques del latch asincrnico, que se
quiere obtener (T), como una caja negra, en su interior debe estar el latch
asincrnico que se quiere convertir (D), la figura 1.61 muestra este
bloque. Paso 3, Hay que conectar la entra T a la nica entrada disponible,
es decir a D, lgicamente como no puede ser una conexin directa entra
lneas, porque la lnea D tiene un funcionamiento diferente de la lnea T,
es necesario buscar algn mecanismo para realizar esta conexin, una

63
forma de hacer es mediante una interfaz, un bloque intermedio, que una
la entrada T y D como muestra la figura 1.62.

Figura 1.61. Bloque como caja negra.

Figura 1.62. Conexin de T a D.

En la figura 1.62, se han conectado a esta interfaz tambin las salidas Q y


/Q porque esta interfaz necesita saber cul es el estado en el que estn
las salidas Q y /Q, ya que segn la tabla de funcionamiento del latch
asincrnico T, su salida Q depende del valor de T.

64
Paso 4, en la figura 1.62, el nico bloque desconocido es la interfaz, el
latch asincrnico dado (D) se sabe ya cmo est construido, por lo que no
hay que disear este bloque, como no hay caminos de retroalimentacin
de las salidas del bloque de interfaz a las entradas del mismo se concluye
que este bloque es un circuito combinacional, por lo tanto se utiliza una
tabla de verdad para disear, la tabla es la tabla 1.23.

Tabla 1.23. Tabla para disear el decodificador T a D.


En la tabla de verdad 1.23 las entradas van del lado izquierdo y las
salidas del lado derecho, no hay que olvidar que esta no es una tabla
comn, sino una tabla caracterstica por lo tanto contiene el estado
presente Qn y el estado siguiente Qn+1, la salida es D. De la tabla 1.23
se ve con claridad que la seal D es:
D= T exor Q.
Paso 5, implementacin de las ecuaciones booleanas.

Figura 1.63. Latch asincrnico D convertido a T.

65
Ejemplo 1.13
Convierta o transforme un latch asincrnico tipo T, en un latch asincrnico
tipo D.
Paso 1, se comparan los diagramas de bloques. La figura 1.64 muestra
los dos diagramas de bloques, el uno es el latch que se quiere convertir
(D) y el otro es del latch al que se desea llegar (T).

Figura 1.64. Latch asincrnico D y T.


Al comparar las dos figura a y b, solo desde el punto de vista de
diagramas de bloques y nada ms, la diferencia es evidente y est en las
entradas, el grafico a tiene una sola entrada externa denominada D aparte
del reloj y el bloque b tiene una entrada denominada T a parte del reloj.
Paso 2, se dibuja el diagrama de bloques del latch asincrnico, que se
quiere obtener (D), como una caja negra, en su interior debe estar el latch
asincrnico que se quiere convertir (T), el latch dado, la figura 1.65
muestra este bloque.
Paso 3, Hay que conectar la entra T a la nica entrada disponible, es
decir a D, lgicamente como no puede ser una conexin directa entra
lneas, porque la lnea D (el latch D) tiene un funcionamiento diferente al
de la lnea T (el latch T), es necesario buscar algn mecanismo para
realizar esta conexin, una forma de conectar es mediante una interfaz,
un bloque intermedio que una las entradas T y D como muestra la figura
1.66.

66
Figura 1.65. Bloque como caja negra.

Figura 1.66. Conexin de D a T.

Paso 4, en la figura 1.66, el bloque desconocido es la interfaz, el latch


asincrnico dado (D) es conocido, u no se disea el bloque de interfaz es
un circuito combinacional y se utiliza la tabla 1.24 para disear.
En la tabla 1.24 las entradas van del lado izquierdo y las salidas del lado
derecho, de la tabla caracterstica por lo tanto contiene el estado presente
Qn y el estado siguiente Qn+1, la salida es D. De la tabla 1.24 la seal T
es:

67
Tabla 1.24. Tabla para disear el decodificador T a D.

T= D exor Q.

Paso 5, La implementacin de las ecuaciones booleanas encontradas.

Figura 1.67. Implementacin del circuito convertido.

Ejemplo 1.14
Convierta o transforme un latch asincrnico tipo T, en un latch asincrnico
tipo JK.

68
Paso 1, se comparan los diagramas de bloques. La figura 1.68 muestra
los dos diagramas de bloques, el uno es el latch que se quiere convertir
(T) y el otro es del latch al que se desea llegar (JK).

Figura 1.68. Latch asincrnico D y T.

Al comparar las dos figura a y b, solo desde el punto de vista de


diagramas de bloques y nada ms, la diferencia es evidente y est en las
entradas, el grafico a tiene una sola entrada externa denominada T aparte
del reloj y el bloque b tiene dos entradas denominadas JK a parte del
reloj.
Paso 2, se dibuja el diagrama de bloques del latch asincrnico, que se
quiere obtener (JK), como una caja negra, en su interior debe estar el
latch asincrnico que se quiere convertir (T), el latch dado, la figura 1.69
muestra este bloque.

Figura 1.69. Bloque como caja negra.

69
Paso 3, Hay que conectar las entras JK a las entradas disponible, es decir
a T, lgicamente como no puede ser una conexin directa entra lneas, es
necesario buscar algn mecanismo para realizar esta conexin, una forma
de conectar es mediante una interfaz, un bloque intermedio que una las
entradas JK con la T como muestra la figura 1.70.

Figura 1.70. Conexin de JK a T.

En la figura 1.70, se han conectado a esta interfaz tambin las salidas Q y


/Q porque esta interfaz necesita saber cul es el estado en el que estn
las salidas Q y /Q.
Paso 4, en la figura 1.70, el nico bloque desconocido es la interfaz, el
latch asincrnico dado (T) se sabe ya cmo est construido, por lo que no
hay que disear este bloque, como no hay caminos de retroalimentacin
directa de las salidas del bloque de interfaz a las entradas del mismo, este
bloque es un circuito combinacional, por lo tanto se utiliza una tabla de
verdad para disear, la tabla es la tabla 1.25. En la tabla de verdad 1.25
las entradas van del lado izquierdo y las salidas del lado derecho, no hay
que olvidar que esta no es una tabla comn, sino una tabla caracterstica
por lo tanto contiene el estado presente Qn y el estado siguiente Qn+1, la
salida es T.
De la tabla 1.25 se ve con claridad que la seal T es:

T= J /Qn + K Qn.
70
Tabla 1.25. Tabla para disear el decodificador T a D.

Paso 5, El ltimo paso es la implementacin de las ecuaciones


booleanas, en este ejercicio no se pide la implementacin.

1.11 LOS FLIP-FLOPs


Los latch asincrnicos son sensibles a alguno de los niveles del reloj, si el
latch es sensible al nivel alto, su salida Q, se actualiza cada vez que el
reloj este en nivel alto, por el contrario si el latch es sensible al nivel bajo,
su salida Q, se actualiza cada vez que el reloj este en nivel bajo.
En circuitos reales no es muy conveniente que el circuito actualice su
salida Q cada vez y durante todo el tiemplo que el reloj este en alguno de
sus niveles, por ejemplo, el latch asincrnico tipo T, cuando la entrada T
es igual a uno, de acuerdo a la tabla caracterstica de funcionamiento de
este dispositivo, la salida Q debe cambiar su valor a su opuesto, esto
implica que Q debe actualizarse, cambiar a su valor opuesto, Qn+1= /Qn,
continuamente mientras el reloj este en nivel alto, la consecuencia de esto

71
es que Q oscilara entre alto y bajo mientras T sea igual a uno y el reloj
este en nivel alto.
Los circuitos secuenciales sincrnicos, requieren que su elemento de
memoria actualice su estado (Q) solo una vez en cada periodo del reloj,
la razn para esto es que en las salidas Q del elemento de memoria est
el cdigo del estado, y este cdigo del estado debe mantenerse
exactamente un periodo del reloj, si se utilizara un latch asincrnico tipo T
como el elemento que almacena el cdigo del estado cuando T sea igual
a uno y el reloj este en nivel alto, la salida Q cambiara una gran cantidad
de veces (el nmero depende del retardo de propagacin del dispositivo)
y por ende el cdigo del estado cambiaria tambin una gran cantidad de
veces en un mismo periodo del reloj, por lo que este dispositivo no es
adecuado para ser utilizado como elemento de memoria en un circuito
secuencial sincrnico.
Los Flip-Flops precisamente son dispositivos de memoria sensibles a uno
de los flancos del reloj, qu ventaja tiene el hecho de que sean sensibles
al flanco y no al nivel del reloj?, la ventaja es que se pueden actualizar
solo durante el flanco del reloj y por ende entonces obligatoriamente se
actualizan una sola vez en cada periodo del reloj, por esta razn los Flip-
Flops son utilizados como elementos de memoria en toda mquina
secuencial sincrnica.
Cada latch asincrnico tiene su respectivo Flip-Flop, es decir, si hay un
lach asincrnico tipo D hay tambin un Flip-Flop tipo D, si hay un latch
asincrnico tipo T hay tambin un Flip-Flop tipo T y as por el estilo.
Los Flip-Flops tpicos son los siguientes:

1. El Flip-Flop tipo D.
2. El Flip-Flop tipo T.
3. El Flip-Flop tipo JK.

72
Por supuesto al igual que los latch asincrnicos se pueden disear Flip-
Flops, que se ajusten a necesidades particulares.
Los Flip-Flops tienen su tabla caracterstica idntica a la tabla
caracterstica de su correspondiente latch asincrnico, es decir el latch
asincrnico tipo D tiene la misma tabla caracterstica que el Flop-Flop tipo
D.
A pesar de que las tablas caractersticas de los latch son idnticas a las
de sus correspondientes Flip-Flops su estructura interna es diferente.
Si un Flip-Flop es sensible al flanco de subida de su reloj, se dice que es
verdadero con el flanco de subida, o simplemente verdadero.
Si un Flip-Flop es sensible al flanco de bajada del reloj, se dice que es
verdadero con el flanco de bajada del reloj o simplemente verdadero.

1.11.1 EL FLIP-FLOP TIPO D


El Flip-Flop tipo D, al igual que el latch asincrnico tipo D, funciona como
un interruptor controlado por su reloj.

Figura 1.71. Diagrama de bloques del Flip-Flop D, a) sensible al flanco de


subida b) sensible al flanco de bajada.
La diferencia con el latch est en que en el latch, el interruptor, est
controlado por uno de los niveles del reloj, en el Flop-Flop el interruptor
est controlado, por uno de sus flancos del reloj, es decir, cuando y solo
73
cuando el reloj presenta su flanco de subida (o bajada) en caso de que
sea sensible al flanco de subida (verdadero con el flanco de subida) la
entrada D pasa a la salida Q, (se actualiza) de lo contrario su salida Q no
se actualiza.
La figura 1.71 muestra el diagrama de bloque general de este Flip-Flop, la
parte a) muestra el Flop-Flop con el smbolo del reloj verdadero con el
flanco de subida y en la parte b) se indica el Flop-Flop con la simbologa
del reloj disparado por el flanco de bajada.
Ntese que un reloj sensible al flanco de subida (verdadero con el flanco
de subida) tiene una simbologa especial y es una flecha con la punta
dentro del dispositivo, en el Flip-Flop sensible al flanco de bajada su
simbologa es una recta que termina en un crculo seguido de una flecha
dentro del dispositivo.

Figura 1.72. Flip-Flop tipo D sensible al flanco de subida.

La figura 1.72 muestra la estructura interna del Flip-Flop tipo D, como se


puede ver est construido con tres latch bsicos, con puertas nand,

74
dispuestos de una manera especial, esa disposicin especial le hace
sensible al flanco del reloj.
La tabla caracterstica del Flip-Flop D muestra la tabla 1.26 a) y b), como
se ve en esta tabla la salida Q del Flip-Flop es igual a la entrada D, si y
solo, su reloj es verdadero, de lo contrario Q no se actualiza.
La tabla 1.26 a) es para un Flip-Flop verdadero con el flanco de subida del
reloj, en tanto que la figura 1.26 b) es para un Flip-Flop verdadero con el
flanco de bajada del reloj.
Cualquier otro Flip-Flp sensible al flanco del reloj se puede disear y
construir tomando como base el Flip-Flop D, en otras palabras el Flip-Flop
D puede ser transformado a cualquier otro tipo de Flip-Flop, las tcnicas
de conversin entre Flip-Flops son exactamente las mismas que se
aplicaron a la conversin o transformacin de latch asincrnicos.

Tabla 1.26. Tabla caracterstica del Flip-Flop D.

1.11.2 EL FLIP-FLOP T
El Flip-Flop tipo T, al igual que el latch asincrnico T, cambia su estado al
opuesto (Qn+1= /Qn) cuando la entrada T es igual a uno y el reloj es
verdadero.

75
Cuando T es igual a cero y el reloj verdadero la salida Q no cambia (Qn+1
= Qn). Si el reloj es falso tampoco se actualiza, Qn+1=Qn. La figura 1.73
muestra el diagrama de bloques de este Flip-Flop. La tabla 1.27muestra la
tabla caracterstica de este Flip-Flop.

Figura 1.73. Flip-Flop T sensible al flanco a) de subida b) de bajada.

Tabla 1.27. Tablas caractersticas del Flip-Flop T.

Como todo Flip-Flop este dispositivo es sensible a uno de sus flancos del
reloj, al flanco de subida o al de bajada.

1.11.3 EL FLIP-FLOP JK
El Flip-Flop tipo JK, al igual que el latch asincrnico JK, mantiene su
estado, la salida Q no cambia, siempre que JK=00 y el reloj verdadero,

76
cuando JK=10 y el reloj verdadero la salida Q es igual a uno, cuando
JK=01 y el reloj verdadero la salida Q es igual a cero, si JK=11 el estado
siguiente es el negado del estado presente, es decir la salida Q conmuta,
y como en todo Flip-Flop si el reloj es falso no actualiza su salida Q.
La figura 1.74 muestra el diagrama de bloques de este Flop-Flop.

Figura 1.74. Diagrama de bloques del Flip-Flop JK, a) sensible al flanco


de subida b) sensible al flanco de bajada.

Tabla 1.28. Tabla caracterstica del Flip-Flop JK sensible al flanco a) de


subida b) al de bajada.

77
Ejemplo 1.15
Para el circuito que muestra la figura 1.75, dibuje las formas de onda de
la salida Q1 y Q2. La figura 1.80 muestra la seal X y el reloj.

Figura 1.75. Diagrama de tiempo para el ejercicio.

Figura 1.76. Salidas Q1 y Q2 del circuito de la figura 1.79.

Como puede notarse en la figura 1.76, la salida Q2 del latch es idntica a

78
la entrada X cuando el reloj est en nivel alto, cuando el reloj est en nivel
bajo la salida Q2 mantiene en ultimo valor.
En el caso del Flip.Flop la salida Q1 solo se actualiza cuando el reloj est
en su flanco de subida y mantiene el valor de Q1 para el resto de los
valores del reloj.

1.12 RETARDOS DE PROPAGACION EN FLIP-FLOPS


Es necesario indicar que los anlisis resalizados anteriormente no han
considerado los retardos de propagacin de los Flip_flops, esto es
importante porque si las seales que ingresan a las entradas de los Flip-
Flops cambian al mismo tiempo que el reloj los resultados en sus salidas
pueden impredecibles.
En la figura 1.77 se muestra la salida Q de un Flip_Flop tipo D
despreciando los retardos de propagacin.

Figura 1.77. Diagrama de tiempo de un Flip-Flop ideal.

Como se puede ver en la figura 1.77 tanto la entrada D como el reloj han
cambiado al mismo tiempo y la respuesta del Flip-Flop es la indica en la
seal Q. Esta repuesta es posible solo si se trata de un Flip-Flop ideal con

79
un retardo de propagacin igual acero. Por supuesto en la realidad la
salida Q puede ser inesperada para esos cambios simultaneso en la entra
y el reloj.
En los Flip-Flops reales es necesario que las entradas permanezcan
estables durante un cierto tiempo, denominado tiempo de preparacin
(th), antes de que la seal del reloj cambie y deben adems permanecer
estables por un tiempo, denominado tiempo de espera (th), despus de
que el reloj ha cambiado. En la figura 1.78 se muestra como debe ser la
entrada D para que el dispositivo trabaje adecuadamente.

Figura 1.78. Diagrama de tiempo de un Flip-Flop real.

80
Ejercicios Propuestos

1. Indique las caractersticas de un circuito combinacional.


2. Indique las caractersticas de un circuito secuencial.
3. Porque son necesarios los circuitos secuenciales.
4. Que se entiende por camino de retroalimentacin.
5. Dibuje un circuito que tenga cuatro caminos de realimentacin.
6. Que es una memoria elemental y dibuje su circuito.
7. Demuestre mediante ecuaciones booleanas la operacin de un
latch bsico que trabaja con lgica positiva.
8. Demuestre mediante ecuaciones booleanas la operacin de un
latch bsico que trabaja con lgica negativa.
9. Escriba la tabla caracterstica de un latch bsico en funcin de
valores verdaderos y falsos.
10. Transforme la tabla de verdad del ejercicio anterior a lgica
positiva.
11. Transforme la tabla de verdad del ejercicio anterior a lgica
negativa.
12. De que depende el valor de Q de la salida de un latch bsico
cuando sus dos entradas set y reset son verdaderas simultneamente.
13. Explique qu se entiende por rebote de un interruptor.
14. Dibuje un latch bsico que elimine rebotes de un interruptor
mecnico y explique cmo el latch elimina los rebotes.
15. Explique y haga el diagrama de bloques de una maquina
secuencial tipo Mealy.

81
16. Explique y haga el diagrama de bloques de una maquina tipo
Moore.
17. Cuando utilizara una maquina Mealy y cuando una maquina
Moore.
18. Que es una memoria Look_Up.
19. Que es un latch asincrnico y cul es la diferencia con el latch
bsico.
20. Disee un lartch asincrnico que tenga dos entradas x e y, si la
entrada x es igual a uno y la entrada x es cero el estado siguiente debe
ser el opuesto del estado presente, para el resto de los casos el estado
siguiente dbe ser igual al estado presente.
21. Escriba la tabla caracterstica del latch asincrnico tipo D. ye
explique su funcionamiento.
22. Escriba la tabla caracterstica del latch asincrnico tipo T y explique
su funcionamiento.
23. Escriba la tabla caracterstica del latch asincrnico tipo JK y
explique su funcionamiento.
24. Convierta el latch asincrnico tipo JK en el latch asincrnico SR.
25. Cul es la diferencia entre un dispositivo sensible al nivel alto de
una seal de reloj y un dispositivo que sensible al flanco de subida del
mismo reloj.
26. A un latch asincrnico tipo D se aplica una seal (dibuje la seal) a
su entrada D y esta misma seal se aplica a la entrada T de un latch
asincrnico T, dibuje las salidas Q de cada latch asincrnico.
27. Dibuje la simbologa de los cuatro tipos de relojes que pueden ser
aplicados a un dispositivo.
28. Dibuje un latch maestro-esclavo tipo JK y explique su
funcionamiento.

82
29. Que es un Flip-Flop y cul es la diferencia con un Latch.
30. Dibuje la estructura interna de un Flip_Flop tipo D y explique
porque este dispositivo es sensible al flanco de subida.
31. Se podra decir que a partir de un Flip-Flop D se pueden obtener
cualquier otro tipo de Flip-Flop.
32. Escriba la tabla caracterstica de un Flip-Flop tipo JK.
33. Escriba la tabla caracterstica de un Flip-Flop tipo T.
34. Escriba la tabla caracterstica de un Flip-Flop tipo D.
35. Convierta un Flop-Flop tipo T en JK.

83
Bibliografia

Dorf , R. Bishp, R. (2005). Sistemas de Control Moderno. Madrid. Espaa:


Pearson.
Brown, S. Vranesic, Z. (2006). Fundamentos de Lgica Digital con Diseo
VHDL. Mexico: Mc Graw Hill.
Morris, M. (2003). Diseo Digital. Mexico: Mc Graw Hill.
Wakerly, J. (2001). Diseo Digital Principios y Prcticas. Mexico. Prentice
Hall.

84
CAPTULO 2

DISEO DE CIRCUITOS SECUENCIALES SINCRNICOS

2.1 INTRODUCCIN
Una vez que en el captulo anterior se estudiaron los latch bsicos o
celdas binarias, los latch asincrnicos y los Flip-Flops que son los
elementos fundamentales a partir de los cuales se construyen las
mquinas secuenciales sincrnicas, el siguiente paso es el estudio de las
tcnicas de anlisis y diseo de las mquinas o circuitos secuenciales
sincrnicos.
Los circuitos secuenciales sincrnicos se suelen clasificar de la siguiente
manera:

1. Generadores y detectores de cdigo.


2. Contadores y registros.
3. Sistemas controladores Multi-Entrada.

Las mquinas secuenciales sincrnicas tienen un estructura muy bien


definida, que normalmente se conoce como la arquitectura de una
mquina secuencial sincrnica o el diagrama general de bloques, a
continuacin se estudia la arquitectura general de una maquina
secuencial sincrnica.

2.2 CLASES O MODELOS DE MQUINAS SECUENCIALES


Los diferentes tipos de mquinas secuencias tienen su origen en la
arquitectura general de una mquina secuencial, cuyo diagrama de
bloques se puede ver en la figura 2.1.
85
De la figura 2.1 se puede observar que las mquinas secuenciales
sincrnicas estn compuestas por tres bloques:

1. El bloque de lgica de transformacin y mezcla de entradas y


salidas.
2. El bloque del elemento de memoria, formado por Flop-Flops.
3. El bloque de la lgica de las salidas condicionales.

El bloque de transformacin y mezcla de entradas y salidas, llamado


tambin decodificador del estado siguiente, tiene por funcin recibir las
entradas del mundo exterior, as como tambin, las salidas del elemento
de memoria, que tiene el contigo del estado presente de la mquina,
procesar esta informacin y en funcin de este procesamiento generar el
cdigo del estado siguiente de la mquina. El bloque de memoria recibe
en sus entradas el cdigo del estado siguiente y almacena temporalmente
en sus salidas cada cdigo de los estados por los cuales la mquina
debe pasar en forma indefinida.
El bloque de la lgica de las salidas condicionales se encarga de generar
las salidas (salidas al mundo exterior) que la mquina debe encender en
cada estado.
Las mquinas secuenciales sincrnicas suelen clasificarse de la siguiente
manera:

1. Clase A o mquina Mealy.


2. Clase B o mquina Moore.
3. Clase C o mquina Moore sin decodificador de salidas.
4. Clase D o memoria de Look Up.
5. Clase E.

86
Figura 2.1 Diagrama de bloques general de una mquina secuencial
sincrnica.

2.2.1 MQUINA MEALY O CLASE A


El diagrama general de bloques de una mquina Mealy se ve en la figura
2.2, como se puede ver es el mismo bloque de la arquitectura general de
una mquina secuencial sincrnica indicada en la figura 2.1.

87
El bloque de lgica de transformacin y mezcla de entradas y salidas o
decodificador de estado siguiente, recibe las seales de entradas del
mundo exterior y las seales del estado presente de la mquina, procesa
esta seales y genera el cdigo del estado siguiente, estado al que ira la
mquina luego de que el reloj reciba su flanco de subida (o bajada si es
sensible al flanco de bajada).

Figura 2.2. Diagrama de bloques de una mquina clase A o Mealy

88
El decodificador de salidas tiene como entradas, las seales de entrada
del mundo exterior as como tambin las salidas del elemento de
memoria, este bloque en esencia genera el cdigo del estado siguiente.
El bloque de memoria esta normalmente construido con Flip-Flops, en las
salidas de los Flip-Flops (las salidas Q) se encuentra guardado
temporalmente el cdigo del estado presente de la mquina y en sus
entradas el cdigo del estado siguiente.
Cuando el reloj de los Flop-Flops est en su estado verdadero el cdigo
del estado presente se actualiza.
La diferencia sustancial de esta mquina Mealy con los otros tipos de
mquinas est en que el bloque de la lgica de las salidas condicionales
recibe las entradas del mundo exterior, as como tambin las salidas de
los Flip-Flops, es decir, las salidas hacia el mundo exterior estn
condicionadas o dependen de las entradas del mundo exterior, as como
tambin, del estado presente de la mquina Mealy.
Como se ver ms adelante en los otros tipos de mquinas las salidas al
mundo exterior no dependen para nada de las entradas del mundo
exterior si no solo del estado presente de la mquina.

2.2.2 MQUINA MOORE O CLASE B


El diagrama general de bloques de una mquina Mealy se ve en la figura
2.3, como se puede apreciar la diferencia con el bloque de la arquitectura
general de una mquina secuencial sincrnica indicada en la figura 2.1
est en que las entradas del mundo exterior no se conectan al bloque de
la lgica de las salidas condicionales.
El bloque de lgica de transformacin y mezcla de entradas y salidas o
decodificador de estado siguiente, es el mismo bloque que el de la
mquina Mealy, recibe las seales de entradas del mundo exterior y las
seales del estado presente de la mquina, procesa esta seales y
genera el cdigo del estado siguiente, estado al que ira la mquina luego

89
de que el reloj reciba su flanco de subida o de bajada si es sensible al
flanco de bajada.
En las mquinas clase B o mquinas Moore, el decodificador de salidas
tiene como entradas exclusivamente a las salidas del elemento de
memoria, que tiene el cdigo del estado presente de la mquina, por lo
tanto, las salidas al mundo exterior de un mquina tipo Moore dependen
solo del estado de la mquina.
Hay retroalimentacin desde las salidas del elemento de memoria hacia el
decodificador del estado siguiente.

Figura 2.3. Diagrama de bloques de una maquina clase B o Moore

90
2.2.3 MQUINA MOORE SIN DECODIFICADOR DE SALIDAS O
MQUINA CLASE C
El diagrama de bloques de una mquina Clase C se muestra en la figura
2.4, como se puede ver, en este tipo de mquinas las seales de salidas
al mundo exterior son las mismas salidas de los Flip-Flops, este tipo de
mquinas son adecuadas cuando se requiere disear generadores de
secuencia, siempre y cuando el cdigo de esa secuencia no se repita.
Por ejemplo si se requiere disear una mquina que genere la secuencia:
00-01-10-11, esta arquitectura de mquina se puede utilizar.
Sin embargo si algn cdigo de la secuencia se repite como por ejemplo:
00-01-00-11-10, en este caso se repite el cdigo 00 en la secuencia, no
se puede utilizar este tipo de mquinas.

Figura 2.4 Diagrama de bloques de una maquina clase C

91
El bloque de decodificador de siguiente estado o de lgica de
transformacin y mezcla de las entradas y salidas, es el mismo que el de
la maquina Mealy o Moore.

2.2.4 MQUINA CLASE E


El diagrama de bloques de una mquina Clase E se ve en la figura 2.5.
No hay decodificador de salidas ni decodificador de estado siguiente, por
lo tanto las salidas del elemento de memoria, que tienen el cdigo del
estado presente de la mquina, son las salidas al mundo exterior.
Las entradas a los elementos de memoria son las entradas del mundo
exterior, como se puede ver en la figura 2.5 estas mquinas son
precisamente los Flip-Flops.

Figura 2.5. Diagrama de bloques de una mquina clase E.

2.3 DISEO DE CIRCUITOS SECUENCIALES SINCRNICOS


2.3.1 INTRODUCCION
Cuando se requiere disear un circuito digital es necesario aplicar alguna
tcnica de diseo, as, en el caso del diseo de circuitos combinacionales
92
la tcnica es mediante una tabla de verdad, que en esencia es la
herramienta de diseo, en el caso de los circuitos secuenciales una de
las tcnicas de diseo es el diagrama de estados.

2.3.2 EL DIAGRAMA DE ESTADOS


Un diagrama de estados se puede definir como: un grfico, formado por
smbolos especiales (valos o crculos) y segmentos de recta dirigidos,
que describen grficamente el comportamiento o funcionamiento de un
circuito o mquina secuencial.
El proceso de diseo de un circuito secuencial, mediante la tcnica de
diagramas de estado, se pude resumir en los siguientes trminos:

1. Se analizan las especificaciones que debe cumplir el circuito a


disearse.
2. Se dibuja un diagrama de bloques que represente al circuito, este
diagrama de bloques debe tener identificadas con claridad las
entradas y salidas.
3. Se establece la relacin que existe entre las salidas y entradas (la
funcin de transferencia), relacin que est dada por las
especificaciones de funcionamiento que debe cumplir el circuito a
disearse.
4. Se elabora un algoritmo mediante smbolos especiales (el
diagrama de estados) que describe grficamente el funcionamiento
del circuito.
5. Se implementa el circuito.

La figura 2.6 muestra un estado con las partes que lo conforman, su


smbolo es un ovalo, o puede ser un circulo (en este libro se utiliza el
ovalo).
A nivel de circuito un estado se identifica de la siguiente manera:

93
1. Un estado, medido en tiempo, queda determinado por el tiempo
que dura un ciclo o periodo del reloj.
2. Un estado, se identifica tambin por su cdigo, el cdigo de un
estado son los bits que se encuentran almacenados temporalmente
en las salidas Q de los elementos de memoria, los Flip-Flops.

Desde el punto de vista de un diagrama de estados, a un estado se


identifica por:

1. Su forma.
2. Su nombre.
3. Su cdigo.

La forma, es un ovalo o un circulo.


Su nombre, puede ser cualquier nombre, normalmente son letras y/o
nmeros simples (a, b, e1, etc.).
Su cdigo son las combinaciones de bits que se asigna a cada estado.
En la figura 2.6 a) se muestra lo que un estado contiene, su nombre y
cdigo, en b) est un ejemplo de un estado con su nombre y cdigo. En
la figura 2.6 el nombre del estado es a y el cdigo es 1010,

Figura 2.6 Representacin de un estado.

El nmero de bits del cdigo de un estado depende del nmero de


94
estados diferentes que contenga un diagrama de estados, as, si hay 2
estados se requiere un bit para identificar a cada estado, un estado
tendra el cdigo 0 y el otro el cdigo 1, si existen 4 estados se necesitan
dos bits, y los cdigos de los estados podran ser 00,01,10,11, para
representar 6 estados se requieren 3 bits y los cdigos podran ser:
000,001,010,011, 100,101 y sobraran dos cdigos.
En general, el nmero de estados diferentes que se pueden generar con n
bits es: 2n, donde n es el nmero de bits. Si hay 12 estados, se requieren
al menos 4 bits, 24 = 16, de las 16 combinaciones se utilizaran 12,
quedando 4 libres.
En la figura 2.7 se ve la representacin temporal de un estado, cada
estado es un ciclo de reloj y en cada estado el circuito debe realizar
alguna accin.

Figura 2.7. Representacin temporal de un estado.


La figura 2.8 muestra un ejemplo de un diagrama de estados. Los
segmentos de rectas dirigidas indican un cambio o paso de un estado a
otro, o incluso el retorno al mismo estado, las entradas externas al circuito
normalmente definen cual ser el estado siguiente al que va a cambiar
desde el estado presente o estado de inters, en cada estado tambin se
puede generar una salida o un grupo de salidas.
En la figura 2.8 si un observador se ubica en el estado a, este es el
estado de inters, y por lo tanto el estado presente. Del estado presente
a, y dependiendo de los valores de las entradas externas, el estado
siguiente podra se el estado b o el estado c. En cada estado se pueden
generar o encender salidas.

95
Figura 2.8. Un diagrama de estados con sus partes.

Ejemplo 2.1
Disee un circuito secuencial sincrnico que genere los siguientes
cdigos en forma indefinida: cdigo 1: 00, 01, 10,11, y cdigo 2: 11, 10,
01, 00, la eleccin del cdigo es mediante la seal x, si x est en nivel alto
el cdigo a generar es el primero, si x est en nivel bajo el cdigo que
debe generar es el segundo.
Para disear este circuito se aplican los pasos de diseo indicados en las
lneas anteriores
Paso 1, Se analizan las especificaciones que debe cumplir el circuito a
disearse.
Segn las especificaciones, se requiere disear un circuito que genere
dos cdigos diferentes de dos bits cada uno, la eleccin del cdigo se
realiza mediante la seal de entrada X, de esta descripcin se concluye
que el circuito debe tener una entrada a la que se va a llamar X, el reloj
del circuito es otra entrada y normalmente se le denomina CLK y dos
salidas, A y B por ejemplo, en donde van a estar los cdigos solicitados.
96
Paso 2, el diagrama de bloques que representa al circuito se muestra en
la figura 2.9, tiene una entrada X y dos salidas A y B.

Figura 2.9. Diagrama de bloques.

Paso 3, la relacin que existe entre las salidas y entradas es la siguiente:


cuando la entrada X es verdadera la salidas A y B deben generar el
cdigo: 00, 01, 10,11y si la entrada X es falsa el cdigo en Ay B es: 11,
10, 01, 00
Paso 4, se construye el algoritmo de funcionamiento del circuito mediante
un diagrama de estados.
El diagrama de estados se construye partiendo de un estado
cualesquiera, por ejemplo el estado a que se muestra en la figura 2.10.
De acuerdo a las condiciones del ejercicio solo en este estado se
pregunta por el valor de la entrada X, si X=1 se genera el cdigo 00, 01,
10,11 en A y B, de lo contrario se genera el cdigo 11, 10, 01, 00, en A y
B, como se ve en la figura 2.10.
Note en la figura 2.10 que se utiliza el smbolo para indicar la
condicin no importa, es decir, puede ser un1 lgico o un 0 lgico, de
acuerdo a las condiciones del diseo solo se debe preguntar por la entra x
al inicio del diagrama de estados, de ah que en el resto de los estados la
entrada x es una condicin no importa, x= simblicamente.

97
Figura 2.10. Diagrama de estados del ejemplo 2.1

Ejemplo 2.1
Disee un contador binario de tres bits, solo realice el diagrama de
estados.
Paso 1, Se analizan las especificaciones que debe cumplir el circuito a
disearse.
Se pide disear un contador binario de tres bits, con tres bits, el nmero
de combinaciones posibles es siete, el contador debe contar del cero al
siete, no hay ninguna seal de entrada a parte del reloj, por tato, la cuenta
debe ser solo ascendente y con cada flanco de subida del reloj.
Paso 2, el diagrama de bloques. El contador es de 3 bits y se necesitan 3
salidas una por cada bit (X, Y, Z) no hay ninguna entrada (excepto el
CLK). Se debe definir con claridad qu tipo de mquina se va a disear,
una tipo Mealy o una tipo Moore.

98
Figura 2.11. Diagrama de bloques a) del contador b) de una mquina
Moore, c) el contador como una mquina Moore.

En este caso como no hay seales de entrada, la mquina tiene que ser
una mquina tipo Moore, en la figura 2.11 a) se muestra el diagrama de
bloques general del contador, en b) el diagrama de la mquina Moore y
en c) el diagrama de bloques del contador como una mquina Moore.
Paso 3, el diagrama de estados, de la figura 2.11 c) se puede concluir que
las salidas x,y, z del contador solo dependen del estado de la mquina, el
cdigo de las salidas Q de los Flip-Flops, adems, si las salidas son
iguales al cdigo de la mquina entonces se puede eliminar el bloque de
lgica de las salidas condicionales de la figura 2.11 c).
El diagrama de bloques del contador, considerando que las salidas del
contador son las mismas salidas Q de los Flip-Flops, es el que muestra la
figura 2.12.
El diagrama de estados inicia en el estado a como muestra la figura
2.13, como no hay entradas, las salidas X, Y, Z son el cdigo de cada
estado Qx, Qy, Qz.
99
Figura 2.12. Diagrama de bloques del contador.

Son necesarios tres Flip-Flop para tener 8 estados diferentes (23=8),


como se ve en la figura 2.13. En el estado a las salidas del contador son:
XYZ=000= QxQyQz, con el flanco de subida del reloj del estado a se pasa
al estado e donde XYZ=001= QxQyQz, con el siguiente flanco de subida
del reloj del estado e se pasa al estado f donde XYZ=010= QxQyQz, con
el siguiente flanco de subida del reloj del estado f se pasa al estado g
donde XYZ=011= QxQyQz, con el siguiente flanco de subida del reloj del
estado g se pasa al estado h donde XYZ=100= QxQyQz, con el siguiente
flanco de subida del reloj del estado h se pasa al estado d donde
XYZ=010= QxQyQz, con el siguiente flanco de subida del reloj del estado
d se pasa al estado c donde XYZ=010= QxQyQz, con el siguiente flanco
de subida del reloj del estado c se pasa al estado b donde XYZ=010=
QxQyQz, con el siguiente flanco de subida del reloj del estado b se pasa
al estado a donde XYZ=010= QxQyQz y de aqu el ciclo se vuelve a
repetir en forma indefinida

100
Paso 4, implementacin, para implementar el circuito se debe definir el
tipo de Flop-Flops que se van a utilizar como elemento de memoria, para
este ejemplo, se va a utilizar los Flip-Flops D, por lo tanto se requieren
tres flip-Flops de este tipo.
.El diagrama de la figura 2.12 debe incluir los tres Flip-Flops tipo D, por lo
tanto, debe ser modificado. El diagrama de la figura 2.13 muestra este
diagrama de bloques modificado.

Figura 2.13. Diagrama de estados del contador de tres bits.

Del diagrama 2.13 se puede ver que el nico bloque que hay que disear
es el de la lgica de transformacin y mezcla de las entradas y salidas,
como es un bloque combinacional se utiliza una tabla de verdad para su
diseo, del estado presente e se pasa al estado siguiente f donde
QxQyQz=010, con el siguiente flanco de subida del reloj del estado
presente f se pasa al estado siguiente g donde QxQyQz=011
101
La tabla de verdad se construye considerando que las entradas al bloque
de la lgica de transformacin y mezcla de las entradas y salidas son: Qx,
Qy, Qz, y por lo tanto van del lado izquierdo de la tabla, las salidas del
bloque son X, Y, Z, es decir, Qx, Qy, Qz, como muestra la figura 2.13.

Figura 2.10. Diagrama de bloques del contador con Flip-Flops D.

Con estas consideraciones se construye la tabla de verdad 2.1. La tabla


se llena primero con todas las combinaciones posibles para el estado
presente, luego el estado siguiente se llena a partir del diagrama de
estados, de la siguiente manera:
Cuando el circuito est en el estado presente a, QxQyQz=000 el estado
siguiente debe ser el e, QxQyQz=001, con el siguiente flanco de subida
del reloj del estado presente g se pasa al estado siguiente h donde
QxQyQz=100, con el siguiente flanco de subida del reloj del estado
presente h se pasa al estado siguiente d donde QxQyQz=010, con el
siguiente flanco de subida del reloj del estado presente d se pasa al
estado siguiente c donde QxQyQz=010.

102
Tabla 2.1. Cdigo del estado presente y estado siguiente.

con el siguiente flanco de subida del reloj del estado presente c se pasa al
estado siguiente b donde QxQyQz=010, con el siguiente flanco de subida
del reloj del estado presente b se pasa al estado siguiente a donde
QxQyQz=010 y de aqu el ciclo se vuelve a repetir en forma indefinida.
Como la entrada D de un Flip-Flop es igual al estado siguiente, entones,
Dx= Qx+1, Dy=Qy+1 y y Dz=Qz+1. las salidas D son: Dx= Qx /Qz +
Qx/Qy+ /QxQy/Qz. Dy=Qx /Qz+ /Qy/Qz. y, Dz=/Qz.
Ejemplo 2.2
Elabore el diagrama de estados de un dispositivo que obtenga el
complemento a dos de un nmero de 3 bits. Los bits deben ingresar al
dispositivo uno a uno con cada flanco de subida del reloj, el dispositivo
debe enviar por una salida bit a bit el complemento a dos del nmero. Se
dibuja el diagrama de bloques que se indica en la figura 2.14, los bits a
complementarse ingresan uno a uno y con cada ciclo del reloj, y en la
salida est el valor complementado, x es la entrada y z es la salida, el
103
algoritmo mediante el cual se va a obtener el complemento a dos de un
nmero, es el que examina el nmero desde el bit menos significativo,
busca el primer uno, este uno se deja como uno y el resto de los bits se
complementan, as, para 011, su complemento es 101.

Figura 2.14 Diagrama de bloques para el ejemplo 2.3.

La figura 2.15 muestra el diagrama de estados, como se puede ver se


parte de un estado llamado a, en este estado se consulta el valor de la
entrada de datos si el bit es 0 se sigue un camino y si es 1 se elige otro.

Figura 2.15. Diagrama de estados del complemento a dos.


Para elaborar este diagrama se sigue la siguiente estrategia, se supone
primero que los tres bits que se reciben son cero, por lo tanto el diagrama
de estados pasa del estado a al estado b, del estado b al estado c y

104
finalmente del estado c retorna al estado a, este camino est indicado en
color rojo en el diagrama de estados. Todas salidas son cero porque no
se ha recibido ningn uno.
Luego el anlisis se continua desde el estado c (el camino en color
amarrillo), si la entrada es cero ya est considerada, pero, falta el camino
que se debe seguir si la entrada es uno, si la entrada es uno, este sera
el primer uno que se recibe por lo tanto la salida en ese estado es uno.
El anlisis se sigue con el estado b, falta considerar que pasa si la
entrada vale uno, si la entrada vale uno este sera el primer uno que
recibe el circuito en el estado b, por lo tanto, la salida vale uno, y se va a
otro estado que se le llama d.
Al llegar al estado d ya se recibi el primer uno, por lo tanto, cualquier bit
que se reciba debe enviarse complementado, y eso es lo que se realiza
en el estado d.
A continuacin se ve que falta considerar que pasa si en el estado a se
recibe un uno, este uno sera el primer uno que se recibira y por lo tanto
se enva a la salida como uno, y el siguiente estado es el e, en este
estado cualquier bit que se reciba debe ser enviado a la salida
complementado, de ah el siguiente estado es el d ya que en este estado
cualquier bit que se reciba es enviado complementado.
Por otro lado del estado e podra irse a otro estado por ejemplo el h, y de
este estado h se debera retornar al estado a, y cualquier bit que se reciba
en este estado se enviara a la salida complementado, como se puede
concluir este estado h seria idntico al estado d, de ah que es mejor no
crear otro estado sino dirigirse al estado d.

Ejemplo 2.3
Elabore el diagrama de estados de un circuito secuencial sincrnico que
detecte tres unos seguidos sin traslape en una secuencia de bits infinita.

105
El diagrama de bloques se indica en la figura 2.16, tiene una entrada
denominada X a parte del reloj y una salida llamada y.
Para claridad en la figura 2.16 la relacin entre la entrada X y salida Y se
expresa como F y es igual a X/Y (F=X/Y).

Figura 2.16. Diagrama de bloques del detector de secuencia 111.

Figura 2.17. Diagrama de estados para detectar la secuencia 111.

Se supone que los bits van a ingresar por la entrada X al circuito, en serie
y con cada flanco del reloj, el circuito tiene una salida Y que debe
encenderse cuando las secuencia 111 ha sido detectada.

106
Como siempre se inicia en un estado, para este caso el estado a, una
buena estrategia para detectar un cdigo es asumir que se recibe el
cdigo que se est buscando y dibujar el camino o trayectoria directa.
En la figura 2.17 el camino est en color verde, luego se va analizando
cada uno de los estados desde abajado hacia arriba
Si en el estado c se recibe un cero se pierde la secuencia, la salida debe
ser cero y regresa al estado a.
Si en el estado b se recibe un cero la secuencia se pierde y se retornar al
estado a, esta trayectoria est en la figura 2.17 en color amarrillo.
Si en el estado a se recibe un cero, la secuencia se pierde y se debe
quedar en el mismo estado hasta recibir un uno, la trayectoria en la figura
2.17 est en color rojo.

Ejemplo 2.3
Disee un circuito secuencial sincrnico que compare dos nmeros de
tres bits, los nmeros ingresan bit a bit y con cada flanco del reloj. El
circuito debe tener tres salidas que indiquen cuando el nmero es igual,
mayor o menor.

Figura 2.18. Diagrama de bloques del comparador.

El circuito a disearse debe tener dos entradas, a parte del reloj, que
sevan a denominar X e Y y, tres salidas una denominada M que se
encender cuando el numero X sea mayor que el nmero Y, otra
107
denominada m que se encender cuando el nmero X sea menor que el
Y, y una ltima denominada I que se encender cuando los nmeros X e
Y sean iguales.
La relacin entre las entradas y las salidas se denomina F=XY/MmI, el
diagrama de bloques del circuito se muestra en la figura 2.18. Esto
significa que el primer bit en diagrama de estados representa a X, el
segundo a Y y M a X>Y,m a X<Y e I a X=Y.
En la figura 2.19 se muestra el diagrama de estados del comparador.

Figura 2.19 diagrama de estados del comparador.

El diagrama de estados de la figura 2.19 inicia en el estado a, se asume al


inicio que los numero X e Y que se reciben son todos ceros, trayectoria de
color azul, en el estado a XY=00 y MnI=000, del estado al se pasa al
estado b, en este estado XY=00 y MnI=000, del estado b el siguiente
estado es el c y all XY=00 y MnI=001.
El anlisis contina desde el estado c, all se deben analizar todas las
combinaciones posibles de las entradas, se ha analizado solo para XY=00
y faltan XY=01, XY=10 y XY=11.
108
Si XY=01 entonces X<Y y la salida que se enciende es m que representa
a X<Y, esto se escribe como: XY=01/MmI=010.
Si XY=10 entonces X>Y y la salida que se enciende es M que representa
a X>Y, esto se escribe como: XY=01/MmI=100.
Si XY=11 entonces X=Y y la salida que se enciende es I que representa a
X=Y, esto se escribe como: XY=11/MmI=100.
De esta manera el estado c queda completamente cubierto, es decir, se
han considerado todas las trayectorias posibles desde el estado c, debido
a todas las combinaciones de las entradas X e Y.
En el estado b solo se ha considerado la trayectoria para XY=00, falta
considerar el resto de las combinaciones: XY=01, XY=10 y XY=11.
Si XY=01 en el estado b, entonces X<Y ya que para llegar del estado a al
estado b, se cumpli que XY=00, es decir hasta ah los nmeros son
iguales, por lo tanto si XY=01 obligatoriamente X<Y, y se dirige del estado
b al estado siguiente que es el d, en donde independiente de los valores
de X e Y se cumple que X<Y, en el estado d se enciende la salida m que
representa a X<Y, y se escribe como: XY=/MmI=010. Debido a que
XY= en el estado d sean considerado todas las trayectorias posibles
para todas las combinaciones de las entradas X e Y y el estado queda
completamente cubierto.
En el estado b para XY=10, entonces X>Y ya que para llegar del estado
a al estado b, se cumpli que XY=00, es decir hasta ah los nmeros son
iguales, por lo tanto si XY=10 obligatoriamente X>Y, y se dirige del estado
b al estado siguiente que es el e, en donde independiente de los valores
de X e Y se cumple que X>Y, en el estado e se enciende la salida M que
representa a X>Y, y se escribe como: XY=/MmI=100. Debido a que
XY= en el estado e sean considerado todas las trayectorias posibles
para todas las combinaciones de las entradas X e Y y el estado queda
completamente cubierto.
En el estado b para la combinacin de las entradas XY=11, hasta aqu
X=Y ya que para llegar del estado a al estado b, se cumpli que XY=00,

109
es decir hasta aqu los nmeros son iguales, por lo tanto el siguiente bit ,
de la combinacin XY definirn si X<Y o X>Y o si X=Y, pero,
precisamente esas combinaciones son realizadas en el estado c, por lo
que del estado b el siguiente estado es el c.
De esta manera el estado b queda complemente cubierto y falta analizar
el estado a.
En el estado a solo se ha considerado la trayectoria para XY=00, faltan
las otras tres posibilidades XY=01, XY=10 y XY=11.
En el estado a cuando XY=11, si X<Y o X>Y o X=Y depender de los dos
siguientes bits, pero, los estados b y c realizan precisamente ese anlisis
por lo tanto del estado a el estado siguiente es el b para XY=11.
En el estado a cuando XY=10, definitivamente x>y (en el estado a esta el
bit ms significativo) y por lo tanto el resto de los valores de XY no
importan. De ah que del estado a el siguiente estado es el f y del estado f
el siguiente estado es el e porque en ese estado se enciende la salida M
que significa X>Y.
En el estado a cuando XY=01, definitivamente x<y (en el estado a esta el
bit ms significativo) y por lo tanto el resto de los valores de XY no
importan. De ah que del estado a el siguiente estado es el g y del estado
g el siguiente estado es el d porque en ese estado se enciende la salida
m que significa X<Y.

2.3.3 IMPLEMENTACION DE DIAGRAMAS DE ESTADOS


Para implementar un diagrama de estados se debe definir a qu tipo de
mquina representa el diagrama de estados y esto est ntimamente
ligado con la relacin que haya o no entre las entradas y salidas.
Hay que recordar que si las salidas dependen tanto del estado de la
maquina as como tambin de las entradas la maquina es una maquina
Mealy, si por el contrario las salidas no dependen de las entradas sino
solo del estado de la mquina, la mquina es una mquina Moore.

110
En todo caso como se indic en el captulo 1 existen varios tipos de
mquinas y son:

Clase A o mquina Mealy.


Clase B o mquina Moore.
Clase C o mquina Moore sin decodificador de salidas.
Clase D o memoria Look Up.
Clase C.

La mayora de los circuitos secuenciales sincrnicos pertenecen a una


mquina Mealy, a una Moore o a una Moore sin decodificador de salidas.
En un diagrama de estados definir a que mquina representa el diagrama
es simple, solo hay que fijarse si en el diagrama de estados, si hay
presencia de entradas y salidas y las salidas dependen del estado de la
mquina (las salidas Q de los Flip-Flops) as como tambin de las
entradas externas, la mquina es de tipo Mealy, si las salidas dependen
solo del estado (cdigo) de la mquina, la mquina es una mquina
Moore.
Las mquinas clase A (Mealy) o clase B (Moore) tienen tres bloques que
son: el decodificador de estado siguiente, el decodificador de salidas, y el
bloque de memoria.
El bloque de memoria est conformado por algn tipo de FlipFlop, as,
en realidad se debe entonces disear solo dos de los tres bloques puesto
que los Flip-Flops son circuitos cuya estructura es conocida, es ms
todava existen en forma de circuitos integrados, y lo nico que hay que
hacer es elegir un tipo de ellos, los dos bloques que deben ser diseados
son de tipo combinacional y la herramienta de diseo es la tabla de
verdad.

111
En realidad la tarea ms difcil en el diseo de circuitos secuencias es el
desarrollo del algoritmo que describa la funcin o funcionamiento del
circuito, algoritmo que es representado mediante smbolos especiales, en
este caso los smbolos de un diagrama de estados.
Como se va constatar ms a delante, la implementacin de un diagrama
de estados es en realidad una terea mecnica, pues solo hay que
elaborara la tabla caracterstica para cada bloque, encontrar las
expresiones booleanas e implementar.
A continuacin se presentan varios ejemplos de diseo e implementacin
de circuitos secuenciales sincrnicos.

Ejemplo 2.4
Disee un circuito secuencial sincrnico que detecte el cdigo: 110 en 3
muestras consecutivas, use Flip-Flops tipo D para implementar el bloque
de memoria clase B o mquina de Moore,
El diagrama de bloques del, detector de secuencia se indica en la figura
2.14, el diagrama de estados est indicado en la figura 2.15. y el tipo de
mquina en la figura 2.20.

Figura 2.20. Diagrama de bloques del detector de cdigo.

En la figura 2.20 se supone que los bits ingresan uno a uno y con cada
flanco de subida del reloj por la entrada X, el circuito analiza la cadena de

112
bits y debe encender la salida Y cada vez que la secuencia pedida es
detectada.
Como una buena estrategia para disear detectores de cdigo, es asumir
que la que el circuito recibe directamente el cdigo buscado, as en el
estado a recibe el primer uno, luego en el estado b se recibe el segundo
uno y en el tercer estado c se recibe un cero.
Luego se van analizando cada estado, se inicia en el ltimo estado, el c,
falta analizar si la entrada recibe un uno, si este es el caso la secuencia
se perdi, pero, este uno puede ser parte de la secuencia s que hay que
conservarlo, y la forma de conservar este uno es regresando del estado c
al estado b, de esta forma queda cubierto completamente el estado c.

.Figura 2.21. Diagrama de estados del detector de cdigo 110.

En el estado b falta analizar qu pasa si la entrada es cero, con este bit se


pierde la secuencia y el circuito debe retorna r al estado a, esto cubre
completamente el estado b.

113
En el estado a falta analizar si la entrada recibe un cero, la secuencia se
pierde y el circuito debe quedarse en eta estado hasta que reciba un uno
que es el primer bit de la secuencia.
Del diagrama de estados de la figura 2.21 se ve claramente que la salida
Y depende del valor de la entrada X, por lo tanto, este diagrama
representa a una mquina tipo Mealy.
En la figura 2.22 se muestra el diagrama de bloques de la mquina tipo
Mealy y el diagrama de bloques general del detector de secuencia.
Como se puede concluir dos bloques deben ser diseados el
decodificador de estado siguiente y el decodificador de salidas.

Figura 2.22. Diagrama de bloques del detector a) general b) mquina


Moore.

El diagrama de estados tiene tres estados diferentes por lo que se


necesitan dos Flip-Flops, al uno se le denomina a y al otro b, sus entradas
son Da y Db y sus salidas Qa y Qb.
114
En la figura 2.23 se ve el diagrama de bloque del detector de secuencia
como una mquina tipo Moore, el decodificador de estado siguiente o
bloque de lgica de transformacin de las entradas y salidas tiene tres
entradas Qa, Qb y X, y dos salidas Da y Db.
El bloque de la lgica de las salidas condicionales tiene tres entradas Qa,
Qb, X y la salida Y.
La tabla de verdad para el diseo simultneo de los dos bloques es la 2.2.

Figura 2. 23. Diagrama de bloques del detector como mquina Moore.

De la tabla caracteristica 2.2 se encuentran las ecuaciones booleanas


para DA, Db e Y.

Da= /Qa X.
115
Db= /Qb.X
Y0 Qa./X.

Tabla 2.2. Tabla para el diseo del detector de secuencia.

Ejemplo 2.5
Obtenga la tabla de verdad para disear un circuito secuencial sincrnico
que divida un nmero de tres bits para dos, la divisin debe ser solo entre
nmeros que den una divisin exacta. Haga los diagramas de bloques
que se requieran, la tabla de verdad para la implementacin de los
decodificadores de siguiente estado y de salidas.
Para los nmeros que son divisibles para dos el circuito debe enviar a su
salida el resultado de la divisin para dos.
Para los nmeros que no son divisibles para dos el circuito debe enviar a
su salida el mismo nmero.

116
Con tres bits se pueden tener nmeros en el rango de cero a siete, los
nicos nmeros que divididos para dos tienen un residuo de cero son: el
seis, el cuatro y el dos.
El diagrama de bloques del circuito a disearse se muestra en la figura
2.24, como muestra la figura el circuito tiene tres entradas X, Y, Z y tres
salidas S1, S2, S3.

Figura 2. 24. Diagramo de bloque del circuito que divide para dos.

El diagrama d estados se muestra en la figura 2.25.

Figura 2.25. Diagrama de estados del circuito que divide para 2.

117
De la figura 2.25, la tabla de verdad para el diseo del decodificador de
estado siguiente y de salidas es como se indica en la tabla 2.3.

Tabla 2.3 Combinaciones posibles para los decodificadores.

De la tabla 2.3 se encuentran las ecuaciones booleanas y se implementa


el circuito, se pueden utilizar dispositivos como multiplexores y/o
decodificadores para implementar esta tabla.
118
Ejemplo 2.6
Disee un circuito secuencial, que divida la frecuencia del CLK para 2.
Tomando como referencia el diagrama de bloques de un Flop-Flop tipo D,
se puede ver que si se realimenta la seal /Q hacia la entrada D del Flop-
Flop, la salida Q va en forma alternante de 0 a 1 y de 1 a 0 con cada
flanco del CLK, el diagrama en el dominio del tiempo se puede apreciar
en la figura 2.27.

Figura 2.26 diagrama del F/F D como divisor de la frecuencia del reloj.

Figura 2.27. La salida Q del Flip-Flop D.

Ejemplo 2.7
119
Disee un circuito secuencial, que divida la frecuencia del CLK para 4.
Tomando como referencia el diagrama de bloques de la figura 2.16, se
puede ver que si se realimenta la seal /Q hacia la entrada D la frecuencia
de la salida Q se divide para 2 por tanto si la salida Q se conecta a la
fo
entrada del CLK del otro bloque la frecuencia de la salida Q2 ser 2 /2 es
fo
decir 4 , aade otro bloque en cascada la frecuencia se seguir dividiendo
para 2 figura 2.28.

Figura 2.28. Dividiendo la frecuencia del reloj para 2 y para 4.

Ejemplo 2.8
Para el ejercicio anterior encuentre la relacin matemtica entre la
frecuencia y el nmero de Flip- Flop.

Tabla 2.4. Nmero de Flip_Flops en cascada y frecuencia.

120
Cada salida Q de cada Flip- Flop en cascada divide la frecuencia de su
reloj por dos, la tabla 2.4 muestra la relacin entre la cantidad de Flip-
Flops y la frecuencia de la salida Q. La tabla 2.4 se puede escribir como la
tabla 2.5.
Tabla 2.5. Relacin entre Flop-Flops en cascada y la frecuencia del reloj.
De la tabla anterior se deduce que la frecuencia de la salida Q del Nsimo
Flip-Flop est dado por:

fo
fQN =
(2)N

Ejemplo 2.9
Se puede decir que el circuito del ejercicio anterior es secuencial
sincrnico?.
Es un circuito secuencial pero debido a que el CLK no es comn a todos
los Flip-Flops se podra decir que desde el punto de vista del CLK es
asincrnico.

Ejemplo 2.10

121
Se puede aplicar la tcnica de diagramas de estado para analizar o
disear circuitos como el del ejercicio anterior?
No porque la tcnica que se est estudiando solo es aplicable cuando los
relojes de los Flip-Flops estn todos conectados a un solo reloj que es el
reloj del sistema, es decir, hay un solo reloj para todo el sistema.

2.4 CONTADORES
Un contador es un circuito secuencial sincrnico que pasa por un nmero
de estados predeterminados.

Los contadores son utilizados para:


1. Generar un cdigo en sus salidas con cada ciclo del reloj.
2. Contar y almacenar el nmero de veces que una seal de entrada
se ha hecho verdadera.
3. Generar retardos de tiempo.

Una forma de clasificar a los contadores es tomando en cuenta los


siguientes parmetros:

1. El nmero de bits de salida, ejemplo contador de 2 bits, este tiene


dos lneas de salida una para cada bit.
2. El nmero de estados por los que atraviesa, por ejemplo si el
diagrama de estados del contador tiene 6 estados es un contador
mdulo 6.
3. La secuencia que genera.
4. Sincrnico o asincrnico.
5. Por el modo de operacin, modo simple o multimodo.

122
Los contadores suelen especificarse por los siguientes parmetros:

1. Modo de operacin.
2. Nmero de bits de salida.
3. Nmero de mdulo.
4. Tipo de cdigo.

Por ejemplo se puede tener un contador de modo simple, 3 bits de salida,


mdulo 6, o 6 estados, cdigo binario.
El diagrama general de bloques de un contador de modo simple es el que
se indica en la figura 2.29 .

Figura 2.29. Diagrama de un contador de modo simple.

Como se puede observar el diagrama es parecido al de una maquina


clase C sin entradas externas en el decodificador de estado siguiente.
En un contador de modo simple el cdigo y el nmero de estados por los
que debe pasar estn plenamente definidos.
123
Los contadores son las mquinas secuenciales sincrnicas ms fciles de
disear, porque el nmero de estados estn bien definidos.

Ejemplo 2.11
Disee un contador binario que tenga las siguientes caractersticas: modo
simple, 3 bits de salida, cdigo de distancia unitaria y mdulo 6.
Con tres bits de salida el contador puede generar un cdigo de hasta
ocho valores diferentes, como el contador es mdulo seis, de las ocho
combinaciones posibles solo debe utilizar seis y para que las salidas
tengan distancia unitaria solo un bit de salida debe cambiar.
El cdigo a generar es el siguiente: 000 001 011 010 110 100.
El diagrama de bloques del contador se muestra en la figura 2.30.

Figura 2.30. Contador modulo seis de tres bits.

124
El diagrama de estados se muestra en la figura 2.31.

Figura 2.31. Diagrama de estados para el contador de tres bits.

Como es un contador de modo simple, las salidas del contador son las
salidas Q de los Flip-Flops del elemento de memoria. El contador tiene
una seal de clear (CLR) que est directamente conectada a los Flip-
Flops y la funcin es poner a cero las salidas del contador cuando esta
seal es verdadera. El contador podra utilizar cualquier tipo de Flip-Flops,
el tipo D, el tipo T, el JK, lo ms comn es que los contadores se diseen
con Flip-Flops tipo D por la simplicidad de estos dispositivos.
La tabla para el diseo del decodificador de estado siguiente es la 2.6.

125
Tabla 2.6. Diseo del decodificador de siguiente estado.

Las ecuaciones para las entradas de los flip-Flops son: Da= Qb/Qc; Db=
/Qa /Qb; Dc= Qb /Qc. La figura 2.32 muestra la implementacin.

Figura 2.32. Implementacin del contador.

126
Ejemplo 2.12
Disee un contador Johnson de cuatro bits, con un clear sincrnico. Utilice
Flip-Flops tipo D en la implementacin.
El cdigo que generan estos contadores es el siguiente:
0000
0001
0011
0111
1111
1110
1100
1000
La seal de clear debe ser sincrnica, es decir, debe estar sincronizada
con el reloj del contador, as, si la seal de clear es verdadera y el reloj es
verdadero el contador debe poner en cero todas sus salidas, de lo
contrario el contador no se resetea. Asncrono significa que trabaja en
concordancia con el reloj. Las seales asncronas, como su nombre
indica, no trabajan en sincrona con el reloj, cuando una seal asncrona
es verdadera, esta, se ejecuta independientemente del estado en el que
se encuentre el reloj. El diagrama del contador muestra la figura 2.33.

Figura 2. 33. Contador Johnson de cuatro bits.

127
El diagrama de estados para este contador muestra la figura 2.34,

Figura 2.34. Diagrama de estados del contador Johnson.

El diagrama de estados inicia en el estado a, en este estado, debe


generar las salidas Qa, Qb, Qc, Qd = 0000 respectivamente, con el flanco
de subida del reloj las salidas deben cambiar a Qa, Qb, Qc, Qd = 0001
respectivamente, y as sucesivamente hasta completar el cdigo, no hay
seales de entrada y tampoco un decodificador de salidas, las salidas del
contador son las salidas de los cuatro Flip-Flops.
La tabla 2.7 muestra la relacin entre las entradas y salidas.

128
Tabla 2.7. Para el diseo del contador Johnson.

2.5 CONTADORES MULTIMODO


Los contadores multi modo, a diferencia de los contadores mono modo,
tienen una seal de control que precisamente controla el modo de
operacin del dispositivo, por ejemplo la seal de control puede hacer que
el contador detenga su cuenta o invierta el sentido de la cuenta.

Ejemplo 2.13

129
Disee un contador ascendente/descendente, mdulo tres, distancia
unitaria, con un clear sincronizado con el reloj negado.
El diagrama de bloques del contador muestra la figura 2.35, tiene una
seal de control A/D que permite que el contador incremente o
decremento su cuenta, si A/D=1 la cuenta debe incrementarse y si A/D=0
la cuenta debe decrementar.

Figura 2.35.diagrama de bloques del contador ascendente /descendente.

El diagrama de estados se muestra en la figura 2.36, parte de un estado a


en donde genera el cdigo 000, si A/D=1 el contador va al siguiente
estado que es el b y genera el cdigo 001, si en el estado a la entrada
A/D es cero el contador va al estado f y genera el cdigo 111 y as
sucesivamente.
Hay que disear el decodificador de estado siguiente, las salidas del
contador son las mismas salidas de los Flip-Flops, la tabla 2.8 muestra el
paso de estado a estado de este contador.

130
Figura 2.36. Diagrama de estados del contador ascendente/descendente,

Tabla 2.8. Tabla del contador de subida/bajada.

131
Las ecuaciones booleanas son:

Da= /Qa /(A/D) + Qa/Qc/(A/D)+ /Qa QbQc.


Db= /AD/Qa/Qb + /Qb(A/D)Qc + Qb/Qc(A/D).
Dc= /Qc.

En la figura 2.37 se muestra la implementacin del circuito, no se han


dibujado las puertas lgicas, en su lugar, se han puesto las ecuaciones
booleanas para cada entrada D de los Flip-Flops.

Figura 2.37. Implementacin del contador ascendente/descendente.

La seal clear (CLR) se sincroniza con el reloj realizando la operacin


lgica AND con el reloj de los Flip-Flops. Ntese que el CLR se activa con
el reloj negado.

132
2.6 CONTADORES ASINCRNICOS
Las tcnicas de diseo de circuitos secuenciales sincrnicos estudiados
en este captulo no son aplicables a circuitos que no tienen un reloj comn
(asincrnicos) por lo tanto se debe aplicar otro mtodo para disear este
tipo de circuitos.

El diseo de contadores asincrnicos es fcil realizar con Flip-Flops tipo


T, y se debe a su forma particular de funcionamiento, ya que mientras la
entrada T sea igual a 1 y el reloj sea verdadero la salida Q cambia,
conmuta continuamente y con cada flanco del reloj, o visto de otra manera
la salida Q tiene la mitad de la frecuencia del reloj, y si este reloj se aplica
a una segunda etapa entonces la salida Q de esta segunda etapa tendr
una frecuencia que es la cuarta parte de la frecuencia del reloj, y si a su
vez la salida Q de esta segunda etapa se aplica al reloj de la tercera
etapa entonces la salida Q d esta tercera etapa tendr la octava parte de
la frecuencia del reloj.
Tambin es factible conectar las salida /Q de cada Flip-Flop al reloj de la
siguiente etapa, a continuacin se analizan las dos estructuras.
Un contador descendente asincrnico se muestra en al figura 2.38 como
se puede ver la salida Q0 del primer Flip-Flop es el reloj del siguiente Flip-
Flop, a su vez la salida Q1 de este ltimo Flip`-Flop es el reloj del
siguiente Flip-Flop.

Figura 2.38. Contador descendente de tres bits.

133
El funcionamiento de este contador se analiza etapa por etapa, primero se
analiza la etapa a la que esta conecta la seal de reloj, en este caso el
Flip-Flop que tiene la salida Q0, el diagrama de tiempo de esta etapa se
indica en la figura 2.46 la seal que est en color rojo.
Esta seal Q0 que est en color rojo se aplica al reloj de la siguiente
etapa y se obtiene la seal Q1 de color azul en la figura 2.39, esta seal
de color azul se aplica al reloj de la ltima etapa y se obtiene la seal de
color verde.
Debe notarse que cada flip-Flop cambia de estado siempre que el reloj
este en su transicin o flanco de subida.
De la figura 2.39 se puede ver que este contador formado con Flip-Flops
tipo T genera una cuenta que va desde el nmero siete al nmero cero y
repite esta secuencia en forma indefinida, como la cuenta es en forma
descendente a esta contador se lo llama contador descendente.
El contador que muestra la figura 2.40 es similar al contador de la figura
2.38 con la diferencia que la salida /Q de cada etapa se conecta al reloj
de la siguiente etapa.
Se analiza en la misma forma que se hizo para el contador descendente y
el diagrama de tiempo resultante se muestra en la figura 2.41.

Figura 2.39. Diagrama de tiempo del contador descendente.

134
Figura 2.40. Contador ascendente asncrono de tres bits.

Figura 2.41. Diagrama de tiempo del contador ascendente.

Como se puede ver la cuenta de este contador va desde cero hasta siete,
es importante notar que cada Flip-Flop de este contador se activa con la
seal Q negada, esto significa que cuando Q este en el flanco de bajada
el Flip-Flop se activa (cuenta) esto muestra la figura 2.48.

Ejemplo 2.13
Elabore el diagrama de estados y la tabla caracterstica tanto para Flip-
Flops tipo D y T de un contador ascendente de tres bits, el contador debe
contar desde cero (000) hasta siete (111).
El cdigo que debe generar el contador es el siguiente: 000-001-010-011-
100-101-110-111.
135
El diagrama de estados para este contador muestra la figura 2.42.

Figura 2.42. Diagrama d estados del contador ascendente de tres bits.

La tabla caracterstica 2.9 contiene las salidas para Flip-Flops tipo D y T.


De esta tabla se puede implementar el contador tanto con Flip-flops tipo D
as como tambin con tipo T.
Una vez que un diagrama de estados se ha implementado con algn tipo
de Flip-Flops, por ejemplo con el tipo T, se puede implementar ese mismo
diagrama de estados con otro tipo de Flip-Flops, por ejemplo con los tipo
JK, para esto lo nico que hay que hacer es convertir los Flip_Flops tipo
T en Flip-Flips JK.
136
El proceso de conversin es idntico a como se realiz la conversin de
latch asincrnicos, lo nico que hay que hacer es cambiar los latch
asincrnicos por Flip-Flops, pero vale insistir, la tcnica el proceso de
conversin es exactamente la misma.

Tabla 2.9. Entradas de los Flip-Flops D y T.

Ejemplo 2.14
Explique cmo analizara un circuito secuencial sincrnico a partir de su
diagrama de circuito.
Con el diagrama de circuitos el proceso es exactamente contario al
proceso de diseo, en el proceso de diseo se parte de las
especificaciones que debe cumplir el circuito, se realiza un diagrama de
bloques, se realiza el diagrama de estados, del diagrama de estados se
elabora la tabla caracterstica, de la tabla caracterstica se encuentran las
ecuaciones booleanas y se implementan esta ecuaciones con compuertas
lgicas, la tabla caracterstica tambin se puede implementar
directamente con multiplexores o decodificadores.

137
En el proceso de anlisis se parte del circuito, por lo tanto, lo primero que
hay que hacer es identificar las entradas de los Flip-Flops que son las
salidas del decodificador de estado siguiente, y las salidas del circuito que
son las salidas del decodificador de salidas, luego se escriben las
ecuaciones booleanas de cada entrada de cada Flip-Flop, as como, las
ecuaciones booleanas de cada salida, de estas ecuaciones booleanas se
elabora la tabla caracterstica, de la tabla caracterstica se elabora el
diagrama de estados y es este diagrama de estados precisamente el que
describe el funcionamiento del circuito.
Ejemplo 2.15
Analice el circuito que se muestra en la figura 2.43.
Lo primero que se debe hacer es comparar el bloque de la arquitectura de
una mquina secuencial sincrnica (Maquina Mealy) con el circuito a
analizar, de este anlisis se identifican los bloques que contiene el
circuito, y cules son las entradas y salidas de cada bloque, es decir, del
bloque del decodificador de estado siguiente y del bloque de
decodificacin de las salidas.
Una vez identificado cada bloque se procede a encontrar las ecuaciones
booleanas para las entradas de cada bloque.

Figura 2.43. Circuito dado para analizar.

138
De la figura 2.43 las entradas al decodificador de siguiente estado son Da,
Db y Dc, Al decodificador de siguiente estado llegan las seales del
mundo exterior as como las salidas de los Flip-Flops.
Las entradas a los Flip-Flops son Da, Db y Dc, las salidas del circuito son
las mismas salidas de los Flip-Flops, por lo tanto el decodificador de
salidas no existe y no hay que escribir las ecuaciones booleanas para
este.
Las ecuaciones booleanas para cada entrada son:

Da= /Qa /(A/D) + Qa/Qc/(A/D)+ /Qa QbQc.


Db= /AD/Qa/Qb + /Qb(A/D)Qc + Qb/Qc(A/D).
Dc= /Qc.

Examinandos las ecuaciones anteriores se puede concluir que la seal


A/D debe ser la entrada desde el mundo exterior, puesto que, a las
entradas del decodificador de siguiente estado llegan las entradas desde
el mundo exterior as como las salidas de los Flip-Flops, para este caso
las salidas de los Flip-Flops son Qa, Qb, Qc y A/D debe ser la entrada
desde el mundo exterior.
A partir de estas ecuaciones se elabora la tabla caracterstica y es la que
se muestra en la tabla 2.10. De la tabla 2.10 se elabora el diagrama de
estados para levar a cabo esta tarea se va leyendo fila por fila la tabla y
dibujando cada estado, por ejemplo, si A/D= 0 y Qa, Qb y Qc son 000
respectivamente entonces el estado siguiente es Qa+1 Qb+1 Qc+1= 111
respectivamente.

139
Tabla 2.10. Entradas a los Flip-Flops.

Si A/D= 0 y Qa, Qb y Qc son 001 respectivamente entonces el estado


siguiente es Qa+1 Qb+1 Qc+1= 000 respectivamente.
Si A/D= 0 y Qa, Qb y Qc son 010 respectivamente entonces el estado
siguiente es Qa+1 Qb+1 Qc+1= 001 respectivamente.
Si A/D= 1 y Qa, Qb y Qc son 001 respectivamente entonces el estado
siguiente es Qa+1 Qb+1 Qc+1= 010 respectivamente.
Si A/D= 1 y Qa, Qb y Qc son 111 respectivamente entonces el estado
siguiente es Qa+1 Qb+1 Qc+1= 000 respectivamente.

140
Este proceso se realiza con todas las filas de la tabla. El grfico del
diagrama de estados es el que muestra la figura 2.44.
Es necesario recalcar que este proceso de anlisis solo se puede aplicar
a circuitos secuenciales sincrnicos.
La forma ms simple de reconocer a un circuito secuencial sincrnico es
observando si en el diagrama de circuito hay un banco de Flip-Flops y si
todos estos Flip-Flops tienen un reloj comn.

Figura 2. 44. Diagrama de estados del circuito analizado.

Analizando el diagrama de estados de la figura 2.44 se puede concluir


que cuando A/D = 1 las salidas generan el cdigo: 000-001-010-011-100-
101-110-111.
Cuando A/D=0 el cdigo que se genera es el 111-110-101-100-011-010-
001-000.
141
En cada estado se verifica la seal A/D, si esta es igual a uno el circuito
pasa a un estado siguiente cuyo cdigo es uno ms el valor del cdigo del
estado presente, si A/D es cero el circuito va a un estado siguiente cuyo
cdigo es uno menos el cdigo del estado presente, por lo tanto, este
dispositivo incrementa o decrementa el valor de sus salidas dependiendo
de la seal A/D. es definitiva el circuito es un contador de incremento y
decremento controlado por la seal A/D.

142
Ejercicios Propuestos

1. Que es un diagrama de estados.


2. Explique cada parte que conforma un estado.
3. Como temporalmente se identifica un estado.
4. Como se identifica un estado en un elemento de memoria.
5. Disee un circuito que habr una cerradura elctrica cuando el
cdigo 1, 3, 4, 5, ha sido detectado, si un cdigo errneo se
introduce el circuito debe ir a un estado de falla y permanecer en
ese estado hasta que una seal de reset sea presionada por el
usuario.
6. Un diagrama de estados utiliza tres bits en su cdigo, con tres bits
se pueden tener hasta ocho estados diferentes, si solo se utilizan
seis de los ocho cdigos, explique que podra pasar si el circuito
cae en alguno de los dos cdigos que no se utilizan.
7. Proponga una solucin para que el circuito del ejercicio anterior se
recupere automticamente cuando caiga en un estado que no est
definido.
8. Disee un circuito secuencial sincrnico que obtenga el
complemento a dos de un nmero de cuatro bits. Los bits llegan
uno a uno con cada ciclo del reloj, utilice Flip-Flops JK para
implementar el circuito.
9. Disee un circuito secuencial sincrnico que genere cuatro ondas
cuadradas desfasadas 90 grados una de la otra.
10. Disee un circuito secuencial sincrnico que detecte la secuencia
01110 sin traslapamiento, utilice Flip-Flop tipo T para implementar
el circuito.
11. Disee un circuito que genere en forma indefinida la secuencia:
0000-0001-1110-1111- 1100. Utilice Flip-Flops tipo D para
implementar el circuito.
12. Las seales que enciende en sus salidas un circuito secuencial
sincrnico tienen una duracin de un ciclo del reloj, explique cmo
conseguira que las salidas solo duren la mitad del periodo del reloj.

143
13. Si se conectan dos Flip-Flops tipo D en una estructura maestro-
esclavo que se obtiene.
14. Un Flop-Flop tipo T y un latch tambin tipo T se conectan al mismo
reloj. Una misma seal Z constante e igual a uno se conecta a cada
entrada T de cada dispositivo, dibuje la salida Q de cada
dispositivo.
15. Disee un contador binario de tres bits de subida y bajada.
16. Analice los contadores asincrnicos e indique que problema tiene
esta tcnica de diseo de contadores.
17.

144
Bibliografia

Brown, S. Vranesic, Z. (2006). Fundamentos de Lgica Digital con Diseo


VHDL. Mexico: Mc Graw Hill.
Morris, M. (2003). Diseo Digital. Mexico: Mc Graw Hill.
Wakerly, J. (2001). Diseo Digital Principios y Prcticas. Mexico. Prentice
Hall.

145
CAPTULO 3

INTRODUCCIN A QUARTUS II

3.1 INTRODUCCIN
Quartus II es una aplicacin informtica, desarrollada por Altera
Corporation, mediante la cual se programan dispositivos lgicos
programables como los FPGA, CPLD entre otros, pertenece al grupo de
herramientas denominadas CAD (Computer Aided Design), Altera
desarroll Quartus II para programar los dispositivos lgicos programables
que fabrica. Quartus II, es un software que adems permite analizar y
sintetizar programas escritos en un lenguaje de descripcin de hardware
(HDL).
Quartus II, se encuentra en la actualidad (ao 2016) en la versin 15
(V15.0), las diferentes versiones se encuentran en la pgina de Altera y
estn disponibles desde la v2.2 hasta la v15.0.

3.2 COMO CREAR UN NUEVO PROYECTO EN QUARTUS II

Antes de crear un nuevo proyecto, se requiere tener alguna de las


versiones de Quartus II, para lo cual, hay que accesar a la pgina web de
Altera (www.altera.com), crear una cuenta y descargar alguna versin de
Quartus II.

Hay dos ediciones de Quartus II, la una es la versin web que es gratuita
y la otra es la de suscripcin.

Para cualquiera de las ediciones, la ventana de descarga es como se


indica en la figura 3.1, all se elige una y la descarga inicia presionando el
botn download.

146
Una vez instalado este software, la primera pantalla de Quartus II que
aparece es la que se indica en la figura 3.2, desde aqu se puede crear
un nuevo proyecto. En la parte central aparece la leyenda: empezar a
disear, y tiene 2 opciones, el asistente para crear un nuevo proyecto
(new Project wizar) y abrir un proyecto (open Project).

Para crear un nuevo proyecto se clickea sobre: new Project wizard o se


puede tambin clickear sobre: file que est en la barra del men y elegir:
new Project wizard, hecho esto aparece la ventana que se indica en la
figura 3.3.

Esta ventana, indica que el asistente de nuevo proyecto le permite


configurar algunas opciones para el proyecto entre estas se tiene:

Figura 3.1. Ventana de descarga de Quartus II.

Figura 3.1. Ventana de descarga de Quartus II.

147
Crear un directorio y asignar un nombre al proyecto, nombrar a la entidad
de ms alto nivel, incluir archivos de algn otro proyecto y libreras, la
familia del dispositivo y el dispositivo programable elegido.

Figura 3.2. Ventana inicial de Quartus II.

En la ventana 3.3 se clickea sobre: next, aparece la ventana 3.4, aqu se


debe crear un directorio de trabajo que contendr al proyecto, para el
caso de la figura 3.4 el directorio es: ejemplos qII, el nombre del proyecto
es: mi_primer_proyecto, este nombre automticamente se escribe en
pestaa que est inmediatamente abajo, esto es, automticamente se
escribi el nombre de la entidad de ms alto nivel.

148
Figura 3.3. Ventana con las opciones de configuracin.

Sin embargo el nombre de esta entidad puede ser modificado, y puede


ser distinto del nombre del proyecto, pero hay que tener especial cuidado
en elegir el nombre de la entidad ya que este debe ser el mismo nombre
que tenga la entidad de ms alto nivel.

Figura 3.4. Ventana para crear un directorio de trabajo.

149
La entidad de ms alto nivel es la primera entidad que se declare en el
programa. Cuando se instala Quartus II se crea un directorio por
obligacin y se llama: qdesigns.
Al clickear sobre next en la ventana 3.4 aparece la ventana 3.5, aqu hay
2 alternativas: se puede elegir un proyecto modelo o uno vaco, para el
primer caso Quartus II elige automticamente un proyecto modelo y lo
nico que se debe hacer es clickear sobre el botn next hasta que
aparezca una venta: summary en donde este activo solo el botn finish.

Figura 3.5. Ventana de eleccin del proyecto.

Para la segunda alternativa el proceso es idntico, se debe clickear sobre


el botn Next hasta que aparezca la ventana de resumen (summary) que
tiene activo solo el botn Finish, ventana 3.5. En este caso se ha dejado
tambin que Quartus II elija la configuracin por Defaul.

Si se va a trabajar con alguna familia en particular y algn dispositivo


especifico o se desea incluir alguna otra herramienta EDA o algn archivo,
se debe elegir la alternativa primera y configurara cada ventana que va
apareciendo.

150
En cualquier caso una vez que se lleg a la ventana 3.5 se debe clickear
sobre el botn Finish y aparece la ventana 3.6 en la que se puede
empezar a desarrollar el proyecto.

Figura 3.6. Ventana de resumen.

Figura 3.7. Ventana de trabajo de Quartus II.


151
3.3 DISEO CON QUARTUS II
Hay dos formas de ingresar un diseo en Quartus II, la una forma se llama
captura esquemtica y la otra forma es mediante la escritura de cdigo
(un programa).

3.3.1 CAPTURA ESQUEMATICA


La captura esquemtica, es un proceso muy parecido al que se desarrolla
con un simulador, el diseo inicia con el ingreso del grafico del circuito en
la ventana de trabajo, a este circuito se aplican seales en sus entradas,
se simula y esta simulacin hace que el circuito responda generando las
respectivas seales de salida.
Con Quartus II (QII) para ingresar un circuito diseado se parte de la
ventana de la figura 3.7, all se elige file/new como se indica en la figura
3.8 y aparece la ventana que se indica en la figura 3.9.

Figura 3.8. Ventana para crear un nuevo archivo.

152
En esta ventana se tienen varias opciones y son:
1. Design files (archivos de diseo).
2. Memory files (archivos de memoria).
3. Verification/debugging (archivos de verificacin y depuracin).
4. Others file (otros archivos).

Para utilizar la captura esquemtica se selecciona la alternativa Design


files, dentro de esta opcin se encuentra: Block Diagram/Schematic File,
al seleccionar esta opcin y clickear sobre el botn ok aparece la ventana
que se muestra en la figura 3.10, esta ventana tiene tres reas, el rea
superior izquierda tiene informacin sobre las caractersticas del circuito
que se va a disear como el nombre del proyecto, el FPGA elegido, entre
otra informacin, el rea superior derecha es el rea de trabajo all es el
lugar en donde se construye el circuito (se dibuja) elemento por elemento.
El rea inferior es el lugar en donde aparecen los mensajes de error y
avisos.

Figura 3.9. Ventana para seleccionar la captura esquemtica.

153
Figura 3.10. Ventana en donde se ingresa el diseo.

3.3.2 INGRESANDO UN CIRCUITO CON CAPTURA ESQUEMATICA


La captura esquemtica es un proceso que se expone aqu mediante un
ejemplo, el ejemplo consiste en el diseo de un circuito que contiene una
nica puerta AND, la captura esquemtica inicia con la apertura de la
ventana de la figura 3.10, el ejercicio es simple pero pretende ser muy
ilustrativo, vale indicar que para la captura esquemtica de circuitos
mucho ms complicados solo hay que repetir estos pasos.
Para ingresar el diseo (circuito) en el rea de trabajo se puede elegir una
de las siguientes tres opciones:
1. Clickear sobre el icono de la puerta AND en la barra que se
encuentra justo sobre el rea de trabajo (rea con cuadricula).
2. Clickear dos veces sobre el rea de trabajo con el botn izquierdo.
3. Clickear sobre el rea de trabajo con el botn derecho y
seleccionar insert/symbol.
154
Independientemente del mtodo elegido se abre la ventana symbol que
se indica en la figura 3.11, all se debe clickear en la flecha del icono de la
carpeta.

Figura 3.11. Ventana symbol.

En la figura 3.12, se muestra la carpeta desplegada, all se abre la carpeta


primitives y se selecciona la carpeta logic, dentro de esta carpeta se
encuentran todos los circuitos lgicos que estn a disposicin para crear
un circuito.
Para este caso se elige la puerta AND de dos entradas y aparece la
ventana symbol de la figura 3.12, se clickea sobre ok y se tiene la
ventana 3.13.

155
La puerta AND se puede colocar en cualquier parte del rea de trabajo
con solo clickear en el lugar elegido.
Si el circuito contiene muchas puertas, el proceso se repite para cada
circuito lgico y una vez que se tengan todos los circuitos en el rea de
trabajo se procede a unir las entradas y salidas de cada uno de ellos
hasta que se haya dibujado el circuito completo deseado.

Figura 3.12. Seleccin del circuito lgico.

Figura 3.13. Puerta AND ubicada en un lugar del rea de trabajo.

156
El paso siguiente es aadir los pines de entrada y salida del circuito, para
este caso, como el circuito est compuesto solo por una compuerta de 2
entradas y una salida, se deben poner 2 pines de entrada y un pin de
salida.
Se activan las ventanas de las figuras 3.12 y 3.13 como se indic antes,
ahora se elige pin/input de la carpeta primitives como se indica en la figura
3.14, se clickea en ok y se tiene la ventana 3.15.
Este procedimiento se repite para cada pin, lgicamente para la salida se
debe elegir pin/output.

Figura 3.14. Ventana symbol para seleccionar un pin de entrada.

Se debe seleccionar la ubicacin en donde se pondr el pin de entrada


para esto se clickea sobre el lugar seleccionado.

157
Figura 3.15. Ventana de trabajo con un pin de entrada.

El circuito con sus pines de entrada y salida se ve en la figura 3.16. Se


unen los pines de entrada con cada entrada al circuito y lo mismo se hace
con las salidas, el resultado se tiene en la ventana de la figura 3.17.
En la figura 3.17 el circuito est listo para ser compilado y simulado.

Figura 3.16. Circuito con sus entradas y salidas.

Figura 3.17. Circuito conectado sus entradas y salidas.

158
3.3.3 COMPILACION DEL CIRCUITO DISEADO
El circuito de la figura 3.17 debe ser compilado para detectar errores de
sintaxis en el cdigo. Se indica continuacin tres formas de compilar.

Figura 3.18. Ventana para la compilacin.

Figura 3.18. Ventana para compilar.

Primera: Se selecciona processing/star/star Analysis & Synthesis,


segunda: en esta misma ventana se puede seleccionar Start Compilation,
tercera: se puede clickear sobre el botn de color azul en forma de
tringulo, las flechas de color rojo en la ventana 3.18 apuntan a esta
triangulo.
Ejecutada la simulacin, pregunta si desea guardar los cambios hechos,
se debe contestar si, luego debe guardar su proyecto, y finalmente se
abrir la ventana 3.19 si no hay errores, si es as, debe aceptar, si hay
errores debe corregir y volver a compilar.

Figura 3.19. Ventana indicando que la compilacin fue exitosa.

159
3.3.4 INGRESO DE LAS SEALES DE ENTRADA
Como en toda simulacin, las seales de entrada al circuito son los
estmulos que permiten verificar la respuesta del circuito, para esto, se
clickea en file/new y aparece la ventana de la figura 3.9 all se selecciona:
University Program VWF que se encuentra en: Verification/debugging
files, se clickea sobre ok y aparece la figura 3.20.

Figura 3.20. Ventana del VWF.

En esta ventana se elige: Edit/Insert/Inser node or bus, aparece la


ventana 3.21. Otra forma de llegar al men de la figura 3.20 es clickeando
dos veces con el botn izquierdo del mouse en la regin en blanco debajo
de name.
Se lista los nodos clickeando sobre: node finder, y aparece la ventana
3.22, en esta ventana la pestaa filter debe estar seleccionando: pins: all.
Finalmente se clickea sobre el botn que tiene el smbolo >>.

160
Ventana 3.21. Ventana para insertar las seales de entrada.

Figura 3.22. Ventana con los pines de entrada seleccionados.

y a continuacin se clickea sobre ok, en la ventana que aparece se vuelve


a clickear ok y se obtiene la ventana 3.23.

Figura 3.23. Ventana con las entradas y salidas del circuito.

161
En eje del tiempo, las lneas llenas representan a las entradas
(pin_name1, B0, pin_name2, B0) y las salidas tienen la forma de malla, en
este caso pin_name3 (B X).
Los nombres de los pines de entrada y salida (pin_name1, pin_name2,
pin_name3) que se muestran en la figura 3.23 son los nombres que
Quartus II pone por default y se pueden cambiar.
Para cambiar los nombres de las seales, en la ventana 3.17, se clickea
con el botn derecho sobre la seal de inters, por ejemplo pin_name1 y
en la ventana que aparece se cambia el nombre, por ejemplo por a, se
repite este procedimiento para cada entra y salida.

3.3.5 CONFIGURACION DEL EJE DEL TIEMPO


Para establecer el tiempo de duracin de la simulacin, en la ventana
3.23 se debe seleccionar: Edit/Set end time, y aparece la ventana que
muestra la figura 3.24. Como ejemplo, se selecciona: End Time igual a
160 nanosegundos (ns).

Figura 3.24. Configuracin del tiempo de simulacin.

Finalmente se obtiene la ventana de la figura 3.25, all se puede notar que


el eje del tiempo va de 0 a 160 ns.

162
Figura 3.25. Configuracin del tiempo a 160 ns.

3.3.6 PONIENDO NIVELES LGICOS EN LAS SEALES DE ENTRADA


Hay diferentes formas de poner valores lgicos (1 o 0) en los pines de
entrada, por ejemplo una forma, manual, es seleccionando el rea donde
se va a poner el valor lgico.
Se presiona el botn izquierdo y se arrastra el raton, el rea seleccionada
cambia de color como muestra la ventana en la figura 3.26, a
continuacin, se clickea sobre el icono que tiene la forma de un nivel alto
(1), quedando este rango del tiempo con ese valor como muestra la figura
3.27.

Figura 3.26. Poniendo valores lgicos en las entradas.

163
Figura 3.27. Poniendo un uno lgico en una seal de entrada.

En esta misma figura se puede ver que hay otras opciones de niveles
lgicos como: x que simboliza un valor desconocido, z es alta impedancia,
etc.
Para verificar el correcto funcionamiento de un circuito se debe verificar la
respuesta del circuito para todas las combinaciones posibles de los
niveles lgicos en sus entradas.
Para 2 entradas hay 4 combinaciones posibles y son: 00, 01, 10 y 11.
Para n entradas hay 2 combinaciones posibles, en general, si es
posible, hay que simular el circuito para todas las combinaciones posibles
de sus entradas, si alguna o algunas combinaciones no son probadas no
habr la completa certeza de que para esas combinaciones funcione bien
el circuito.
Para el caso de la puerta AND, esta debe cumplir con las cuatro
combinaciones de la tabla de verdad 3.1. Las seales de entrada deben
tener esas combinaciones.
Hay formas de poner niveles lgicos, automticamente, una de ellas es
mediante un contador. Un contador en sus salidas genera todas las
combinaciones posibles, por ejemplo un contador de 2 bits (dos salidas)
pone en sus dos salidas las combinaciones: 00, 01, 10, 11.

164
Para utilizar un contador como generador de seales, es conveniente
primero agrupar las seales de inters, para llevar a cabo esto, se
seleccionan las seales con el botn izquierdo y se clickea sobre ellas con
el botn derecho y se selecciona: grouping/group, y aparece la ventana
de agrupaminento que muestra la figura 3.28, all se escribe un nombre
en: group name y se presiona el botn OK.

Figura 3.28. Ventana de agrupamiento.

A continuacin, se selecciona las seales agrupadas y se escoge desde


la barra de men: edit/value/count value, y aparece la ventana que se
muestra en la figura 3.29.

Figura 3.30. Ventana para colocar los valores de la cuenta.


Se colocan los valores adecuados en la ventana de la figura 3.30, por
ejemplo: la cuenta es binaria, el valor inicial de la cuenta es cero (00), el
165
incremento en la cuenta es de una unidad, y la cuenta es cada 250 ns
(count every), porque, el eje del tiempo tiene 1000 ns y en ese tiempo
deben aparecer las cuatro combinaciones de la cuenta, una cada 250 ns.
Se presiona el botn OK en la ventana mostrada en la figura 3.29 y la
figura 3.30 muestra las seales de entrada agrupadas y ponderadas.

Figura 3.30. Seales de entrada agrupadas y ponderadas.

Pin:name1 Pin:name2 Pin_name3


0 0 0
0 1 0
1 0 0
1 1 1
Tabla 3.1. Tabla de verdad de la puerta AND.

3.3.7 SIMULACION DEL CIRCUITO DISEADO


Finalmente el ltimo paso es la simulacin. Hay dos tipos de simulacin la
funcional y la temporal, la funcional, es una simulacin ideal en donde los
retardos de propagacin son cero, en cambio en la simulacin temporal se
incluyen los retardos.

166
Para simular el circuito, se clickea sobre el botn: run functional simulation
(botn encerrado en un crculo de color rojo en la figura 3.27), y se
obtiene la ventana que se muestra en la figura 3.31 esta ventana contiene
la forma de onda de la salida del circuito.
De la forma de onda de la salida se concluye que el circuito funciona en
forma adecuada ya que responde adecuadamente a las cuatro
combinaciones posibles de las entradas.
Mientras se va ejecutando la simulacin la aplicacin pide que se realice
Algunas actividades como: guardar el proyecto, etc, solo se debe aceptar
en cada ventana que va apareciendo.

Figura 3.31. Ventana de simulacin.

En las versiones de QII inferiores a la versin 13, el proceso de


compilacin y simulacin es un poco diferente y ms largo, por lo tanto, si
se est trabajando con alguna de estas versiones se debe consultar la
forma de compilar y simular.

3.4 INGRESO DE CDIGO VHDL EN QUARTUS II


El procedimiento es similar al de captura esquemtica, se debe primero
crear un proyecto, una vez creado el proyecto, en la barra de men
seleccionar: File/New y aparece la ventana: New, all se debe seleccionar:
VHDL FILE de la opcin: Design Files.
167
Hecho esto, aparece la ventana, 3.32, en donde se puede ver parte del
cdigo de un programa en VHDL que se ha escrito.
La compilacin, ingreso de formas de onda y simulacin es exactamente
igual a como se realiz para el caso de captura esquemtica.

Figura 3.32. Ventana para ingresar el cdigo HDL.


La diferencia con la captura esquemtica esta en que no se dibuja un
circuito sino ms bien se escribe un programa en cdigo HDL (lenguaje de
descripcin de hardware), que describe el funcionamiento de un circuito o
sistema, luego esta codificacin se compila y se simula de forma idntica
a como se hizo en la captura esquemtica, es decir para compilar y
simular no hay diferencia.

3.5 LA PLANTILLA DE QUARTUS II


Quartus II permite insertar plantillas de lenguajes como: VERILOG HDL,
SystemVerilog, VHDL, AHDL, Quartus II Tcl, Tcl, TimeQuest design
168
constraints, o Megafunction template,estas plantillas se pueden insertar
en cualquier parte de un texto, estas plantillas facilitan la escritura de
cdigo de cualquiera de los lenguajes indicados.
La figura 3.33 muestra el icono Insert Template (se parece a un
pergamino) sobre el que se debe hacer click para desplegar el contenido
de la plantilla.

Figura 3.33. Icono de Insert Template.

Figura 3.34. Ventana Insert Tempalte.

169
La figura 3.34 muestra el contenido de la plantilla, como se puede
apreciar permite elegir ocho plantillas de ocho lenguajes.
Al desplegar VHDL de la ventana: Inser template, se tiene la venta que se
indica en la figura 3.35
Dentro de VHDL se puede elegir: Constructs, Design Units y all estn las
plantillas para declarar cada uno de los mdulos de VHDL, a continuacin
se muestra el contenido de: Library Clause.

Figura 3.35. Despliegue de VHDL.

Contenido de: Library Clause:

-- A library clause declares a name as a library. It


-- does not create the library; it simply forward declares
-- it.
library <library_name>;

170
Este contenido se puede insertar en el rea de trabajo de la ventana en
donde se escribe el cdigo de VHDL al hacer clic en el botn insertan que
se ve en la figura 3.36,
La opcin Use Clauser permite insertar una serie de libreras y paquetes,
a continuacin se escriba el contenido de Use Clauser.

Figura 3.36. Ventana con la plantilla de Library.

Contenido de: Use Clause:

-- Use clauses import declarations into the current scope.


-- If more than one use clause imports the same name into the
-- the same scope, none of the names are imported.
-- Import all the declarations in a package
use <library_name>.<package_name>.all;
171
-- Import a specific declaration from a package
use <library_name>.<package_name>.<object_name>;
-- Import a specific entity from a library
use <library_name>.<entity_name>;
-- Import from the work library. The work library is an alias
-- for the library containing the current design unit.
use work.<package_name>.all;
-- Commonly imported packages:
-- STD_LOGIC and STD_LOGIC_VECTOR types, and relevant functions
use ieee.std_logic_1164.all;
-- SIGNED and UNSIGNED types, and relevant functions
use ieee.numeric_std.all;
-- Basic sequential functions and concurrent procedures
use ieee.VITAL_Primitives.all;
-- Library of Parameterized Modules:
-- customizable, device-independent logic functions
use lpm.lpm_components.all;
-- Altera Megafunctions
use altera_mf.altera_mf_components.all;

172
Figura 3. 37 Contenido de Use Clause.

A continuacin se muestra el contenido de Entity de la opcin: Design


Units, como se puede ver esta opcin permite insertar la plantilla con la
sintaxis de declaracin de entidad y adaptarla a los requerimientos de
cada diseo en particular.

entity <entity_name> is
generic
(
<name> : <type> := <default_value>;
...
<name> : <type> := <default_value>
);

173
port
(
-- Input ports
<name> : in <type>;
<name> : in <type> := <default_value>;

-- Inout ports
<name> : inout <type>;

-- Output ports
<name> : out <type>;
<name> : out <type> := <default_value>
);
end <entity_name>;

La figura 3.38 muestra la ventana cuyo contenido es la declaracin de


entidad.
La plantilla para la declaracin de la arquitectura se muestra en la figura
3.39, igual que para el resto de las opciones esta plantilla se puede
adaptar a cualquier requerimiento de diseo.
El contenido de la plantilla de declaracin de arquitectura se muestra a
continuacin:

174
Figura 3.38. Ventana con el contenido de declaracin de entidad.

architecture <arch_name> of <entity_name> is


-- Declarations (optional)

begin
-- Process Statement (optional)

-- Concurrent Procedure Call (optional)

-- Concurrent Signal Assignment (optional)

-- Conditional Signal Assignment (optional)

175
-- Selected Signal Assignment (optional)

-- Component Instantiation Statement (optional)

-- Generate Statement (optional)

end <arch_name>;

La ventana con la plantilla de declaracin de paquee se muestra en la


figura 3.40, esta plantilla puede ser insertada dentro del cdigo VHDL y
adaptada a cualquier diseo de paquete.

Figra3.39. ventana con la plantilla de declaracin de arquitectura.

176
La plantilla para la declaracin de paquete tiene las caractersticas que se
muestran a continuacin:

-- Library Clause(s) (optional)


-- Use Clause(s) (optional)

package <package_name> is

-- Type Declaration (optional)

-- Subtype Declaration (optional)

-- Constant Declaration (optional)

-- Signal Declaration (optional)

-- Component Declaration (optional)

end <package_name>;

177
Figura 3.40. Ventana con la plantilla de declaracin de paquete.

El contenido de la plantilla de declaracin de seal es:

-- Signal with no default value. Your design should assign an explicit


-- value to such a signal using an assignment statement. You assign
-- to a signal with the "<=" operator.

signal <name> : <type>;

-- Signal with a default value. If you do not assign a value to the


-- signal with an assignment, Quartus II Integrated Synthesis will
-- initialize it with the default value. Integrated Synthesis also

178
-- derives power-up conditions for memories and registers from the
-- default value.

signal <name> : <type> := <default_value>;

-- Commonly declared signals

signal <name> : std_logic;


signal <name> : std_logic_vector(<msb_index> downto <lsb_index>);
signal <name> : integer;
signal <name> : integer range <low> to <high>;

La figura 3.41 muestra la ventana con el contenido de declaracin de una


arquitectura.

Figura 3.41. Ventana con la plantilla de declarcion de seal.

179
A continuacin se escribe la sintaxis de declaracin de una variable y que
igual que para las plantillas anteriores puede ser adaptada a cualquier
declaracin de variable .

-- Variables should be declared in a process statement or subprogram.


-- They are useful for storing intermediate calculations. You assign
-- to a variable with the ":=" operator.

-- Variable with no default value. Your design should assign an


-- explicit value to this variable before referring to it in a
-- statement or an expression

variable <name> : <type>;

-- Variable with a default value.

variable <name> : <type> := <default_value>;


-- Commonly declared variables
variable <name> : std_logic;
variable <name> : std_logic_vector(<msb_index> downto <lsb_index>);
variable <name> : integer;
variable <name> : integer range <low> to <high>;

180
La figura 3.42 muestra la ventana que contine la plantilla de declaracin
de variable.

Figura 3.42. Ventana con la plantilla de declaracin de variable.

La plantilla para la declaracin de una constante se muestra a


continuacin.

constant <constant_name> : <type> := <constant_value>;

La figura 3.43 muestra la ventana que contiene la plantilla indicada., este


contenido igual que para el resto de las plantillas puede ser modificada
segn las necesidades del diseo.

181
Figura 3.43. Ventana con la plantilla de declaracin de constante.

3.6 EL ENTRENADOR DE2 DE ALTERA


El tablero de entrenamiento DE2 de Altera est desarrollado con el FPGA
que Altera le llama el Cyclone II, todos los componentes que contiene el
DE2 estn conectados a los pines del Cyclon II.
Este entrenador tiene conectados al Cyclon II los siguientes dispositivos:
switch, pulsadores, Leds, Display de siete segmentos, SDRAM, SRAM,
Flash Memory, un Display de 16x2, el procesador NIOS II, interfaces
estndares (RS-232, PS/2), puertos USB, un puerto Ethernet, un puerto
para conectar una tarjeta de memoria SD y conectores para conectar el
DE2 a otros dispositivos externos.

3.6.1 CONEXINES DEL ENTRENADOR DE2 DE ALTERA


El DE2 se conecta a un computador mediante un cable de datos USB, la
energa recibe a travs de una fuente de corriente continua de nueve
voltios.

182
La figura 3.43 muestra una fotografa del DE2, all se pueden observar
todos los dispositivos que estn en este entrenador, como se puede ver,
el cable USB se debe conectar a uno de los dos puertos USB (estos dos
puertos estn juntos) al puerto que est junto al conector de color negro
de energa elctrica de 9 voltios.

USB 9 Vol

Figura 3.44. El tablero de entrenamiento DE2 de Altera.

3.6.2 INSTALACION DEL DRIVER USB-BLASTER


Para conectar fsicamente el DE2 con un computador se requiere un cable
de datos USB, el DE2 debe ser energizado mediante una fuente de
corriente directa de nueve voltios, para instalar el USB-BLASTER debe
seguir los siguientes pasos:
1. Conecte el DE2 al computador a travs del cable USB.
2. Conecte el cable USB al conector del DE2 que est ms cerca de
la fuente de alimentacin del tablero.
3. Conecte el DE2 a la fuente de nueve voltios.
4. Presione el botn rojo de energizacin del DE2.

183
Al conectar el DE2 al computador, este, reconocer al DE2 rpidamente,
pero, si en el computador no est instalado el driver USB-BLASTER no
ser reconocido, si este es el caso, se debe recurrir al asistente de
instalacin de nuevo hardware.
En el computador, con el botn derecho se clickea sobre el icono del
equipo y aparece la ventana que muestra la figura 3.44, se selecciona
propiedades y se presenta la ventana de la figura 3.45 En esta ventana
se selecciona: administrador de dispositivos y aparece la ventana que se
indica en la figura 3.46, en esta ventana se busca el USB_Blaster que
est en el icono denominado controlador de bus serie universal o en el
icono con la leyenda: otros dispositivos, como se muestra en la figura 3.
46.

Figura3.44 Ventana de propiedades del equipo.

184
Figura 3.45. Ventana de sistema.

Figura 3.46. Ventana del sistema que contiene el USB-Blaster.

185
En esta ventana se encuentra el USB-Blaster, para instalar, se clickea
sobre este icono con el botn derecho como muestra la figura 3.47 y
aparece la ventana que se indica en la figura 3.48.

Figura 3.47. Ventana con el USB-Blaster.

En la ventana de la figura 3.48 se selecciona: controlador y all se clickea


sobre: Actualizar controlador y aparece la venta que muestra la figura
3.49.

Figura 3.48. Ventana de seleccin de propiedades de USB-Blaster.

186
Esta ventana presenta dos opciones se selecciona: buscar software de
controlador en el equipo y aparece la ventana que muestra la figura 3.50.

Figura 3.49. Ventana de bsqueda de software.

En la ventana de la figura 3.50 se clickea sobre el botn examinar para


buscar la carpeta: Altera, que contiene los Drivers USB-Blaster, la figura
3.51 muestra la ubicacin de esta carpeta.

Figura 3.50. Ventana de actualizacin de controlador USB-Blaster

187
Figura 3.51. Ventana de bsqueda de la carpeta Altera.

Se cliclea sobre la carpeta Altera cuyo contenido se muestra en la figura


3.52, dentro de ella se busca la carpeta: quartus se abre esta carpeta y se
selecciona la carpeta drivers como muestra la ventana de la figura 3.53.

Figura 3.52. Ventana de seleccin de la carpeta quartus.

188
Figura 3.53. Ventana de seleccin de la carpeta drivers.

Dentro de la carpeta drivers se encuentra la carpeta usb-blaster como


muestra la figura 3.54, se selecciona esta carpeta y se preciona el boton
aceptar de esta ventana y aparece la ventana que muestra la figura 3.55.

Figura 3.54. ventana doncde se selecciona la carpeta usb-blaster.

189
En la ventana de la figura 3.55 se presiona el boton: instalar mismo que la
inicia la instalacion del USB-Blaster.

figura 3.55. ventana de seguridad de windows.

Finalmente en la figura 3.56 se muetra la ventana en la que se indica que


se finalizo la instalacion del software y el USB_Blaster esta listo para ser
utilizado.

Figura 3.56. Ventana que muestra la instalacin correcta del USB-Blaster.

190
3.6.3 ASIGNACION DE LOS PINES DEL CICLON II EN EL DE2

A continuacin se muestra la tabla 3.2 de la asignacin de los pines del


Cyclon II a los diferentes elementos del entrenador DE2 de Altera.

Como puede observarse en la tabla a cada pin del Cyclon II le


corresponde un elemento, por ejemplo, el PIN_25 est signado o
conectado al elemento denominado SW[0], switch cero, del entrenador
DE2.

# Quartus II Version 5.1 Internal Build 160 09/19/2005 TO Full Version


# File: D:\de2_pins\de2_pins.csv
# Generated on: Wed Sep 28 09:40:34 2005
# Note: The column header names should not be changed if you wish to
import this .csv file into the Quartus II software.

To Location
SW[0] PIN_N25
SW[1] PIN_N26
SW[2] PIN_P25
SW[3] PIN_AE14
SW[4] PIN_AF14
SW[5] PIN_AD13
SW[6] PIN_AC13
SW[7] PIN_C13
SW[8] PIN_B13
SW[9] PIN_A13
SW[10] PIN_N1
SW[11] PIN_P1
SW[12] PIN_P2
SW[13] PIN_T7
SW[14] PIN_U3
SW[15] PIN_U4
SW[16] PIN_V1
SW[17] PIN_V2
191
DRAM_ADDR[0] PIN_T6
DRAM_ADDR[1] PIN_V4
DRAM_ADDR[2] PIN_V3
DRAM_ADDR[3] PIN_W2
DRAM_ADDR[4] PIN_W1
DRAM_ADDR[5] PIN_U6
DRAM_ADDR[6] PIN_U7
DRAM_ADDR[7] PIN_U5
DRAM_ADDR[8] PIN_W4
DRAM_ADDR[9] PIN_W3
DRAM_ADDR[10] PIN_Y1
DRAM_ADDR[11] PIN_V5
DRAM_BA_0 PIN_AE2
DRAM_BA_1 PIN_AE3
DRAM_CAS_N PIN_AB3
DRAM_CKE PIN_AA6
DRAM_CLK PIN_AA7
DRAM_CS_N PIN_AC3
DRAM_DQ[0] PIN_V6
DRAM_DQ[1] PIN_AA2
DRAM_DQ[2] PIN_AA1
DRAM_DQ[3] PIN_Y3
DRAM_DQ[4] PIN_Y4
DRAM_DQ[5] PIN_R8
DRAM_DQ[6] PIN_T8
DRAM_DQ[7] PIN_V7
DRAM_DQ[8] PIN_W6
DRAM_DQ[9] PIN_AB2
DRAM_DQ[10] PIN_AB1
DRAM_DQ[11] PIN_AA4
DRAM_DQ[12] PIN_AA3
DRAM_DQ[13] PIN_AC2
DRAM_DQ[14] PIN_AC1
DRAM_DQ[15] PIN_AA5
DRAM_LDQM PIN_AD2
192
DRAM_UDQM PIN_Y5
DRAM_RAS_N PIN_AB4
DRAM_WE_N PIN_AD3
FL_ADDR[0] PIN_AC18
FL_ADDR[1] PIN_AB18
FL_ADDR[2] PIN_AE19
FL_ADDR[3] PIN_AF19
FL_ADDR[4] PIN_AE18
FL_ADDR[5] PIN_AF18
FL_ADDR[6] PIN_Y16
FL_ADDR[7] PIN_AA16
FL_ADDR[8] PIN_AD17
FL_ADDR[9] PIN_AC17
FL_ADDR[10] PIN_AE17
FL_ADDR[11] PIN_AF17
FL_ADDR[12] PIN_W16
FL_ADDR[13] PIN_W15
FL_ADDR[14] PIN_AC16
FL_ADDR[15] PIN_AD16
FL_ADDR[16] PIN_AE16
FL_ADDR[17] PIN_AC15
FL_ADDR[18] PIN_AB15
FL_ADDR[19] PIN_AA15
FL_ADDR[20] PIN_Y15
FL_ADDR[21] PIN_Y14
FL_CE_N PIN_V17
FL_OE_N PIN_W17
FL_DQ[0] PIN_AD19
FL_DQ[1] PIN_AC19
FL_DQ[2] PIN_AF20
FL_DQ[3] PIN_AE20
FL_DQ[4] PIN_AB20
FL_DQ[5] PIN_AC20
FL_DQ[6] PIN_AF21
FL_DQ[7] PIN_AE21
193
FL_RST_N PIN_AA18
FL_WE_N PIN_AA17
HEX0[0] PIN_AF10
HEX0[1] PIN_AB12
HEX0[2] PIN_AC12
HEX0[3] PIN_AD11
HEX0[4] PIN_AE11
HEX0[5] PIN_V14
HEX0[6] PIN_V13
HEX1[0] PIN_V20
HEX1[1] PIN_V21
HEX1[2] PIN_W21
HEX1[3] PIN_Y22
HEX1[4] PIN_AA24
HEX1[5] PIN_AA23
HEX1[6] PIN_AB24
HEX2[0] PIN_AB23
HEX2[1] PIN_V22
HEX2[2] PIN_AC25
HEX2[3] PIN_AC26
HEX2[4] PIN_AB26
HEX2[5] PIN_AB25
HEX2[6] PIN_Y24
HEX3[0] PIN_Y23
HEX3[1] PIN_AA25
HEX3[2] PIN_AA26
HEX3[3] PIN_Y26
HEX3[4] PIN_Y25
HEX3[5] PIN_U22
HEX3[6] PIN_W24
HEX4[0] PIN_U9
HEX4[1] PIN_U1
HEX4[2] PIN_U2
HEX4[3] PIN_T4
HEX4[4] PIN_R7
194
HEX4[5] PIN_R6
HEX4[6] PIN_T3
HEX5[0] PIN_T2
HEX5[1] PIN_P6
HEX5[2] PIN_P7
HEX5[3] PIN_T9
HEX5[4] PIN_R5
HEX5[5] PIN_R4
HEX5[6] PIN_R3
HEX6[0] PIN_R2
HEX6[1] PIN_P4
HEX6[2] PIN_P3
HEX6[3] PIN_M2
HEX6[4] PIN_M3
HEX6[5] PIN_M5
HEX6[6] PIN_M4
HEX7[0] PIN_L3
HEX7[1] PIN_L2
HEX7[2] PIN_L9
HEX7[3] PIN_L6
HEX7[4] PIN_L7
HEX7[5] PIN_P9
HEX7[6] PIN_N9
KEY[0] PIN_G26
KEY[1] PIN_N23
KEY[2] PIN_P23
KEY[3] PIN_W26
LEDR[0] PIN_AE23
LEDR[1] PIN_AF23
LEDR[2] PIN_AB21
LEDR[3] PIN_AC22
LEDR[4] PIN_AD22
LEDR[5] PIN_AD23
LEDR[6] PIN_AD21
LEDR[7] PIN_AC21
195
LEDR[8] PIN_AA14
LEDR[9] PIN_Y13
LEDR[10] PIN_AA13
LEDR[11] PIN_AC14
LEDR[12] PIN_AD15
LEDR[13] PIN_AE15
LEDR[14] PIN_AF13
LEDR[15] PIN_AE13
LEDR[16] PIN_AE12
LEDR[17] PIN_AD12
LEDG[0] PIN_AE22
LEDG[1] PIN_AF22
LEDG[2] PIN_W19
LEDG[3] PIN_V18
LEDG[4] PIN_U18
LEDG[5] PIN_U17
LEDG[6] PIN_AA20
LEDG[7] PIN_Y18
LEDG[8] PIN_Y12
CLOCK_27 PIN_D13
CLOCK_50 PIN_N2
EXT_CLOCK PIN_P26
PS2_CLK PIN_D26
PS2_DAT PIN_C24
UART_RXD PIN_C25
UART_TXD PIN_B25
LCD_RW PIN_K4
LCD_EN PIN_K3
LCD_RS PIN_K1
LCD_DATA[0] PIN_J1
LCD_DATA[1] PIN_J2
LCD_DATA[2] PIN_H1
LCD_DATA[3] PIN_H2
LCD_DATA[4] PIN_J4
LCD_DATA[5] PIN_J3
196
LCD_DATA[6] PIN_H4
LCD_DATA[7] PIN_H3
LCD_ON PIN_L4
LCD_BLON PIN_K2
SRAM_ADDR[0] PIN_AE4
SRAM_ADDR[1] PIN_AF4
SRAM_ADDR[2] PIN_AC5
SRAM_ADDR[3] PIN_AC6
SRAM_ADDR[4] PIN_AD4
SRAM_ADDR[5] PIN_AD5
SRAM_ADDR[6] PIN_AE5
SRAM_ADDR[7] PIN_AF5
SRAM_ADDR[8] PIN_AD6
SRAM_ADDR[9] PIN_AD7
SRAM_ADDR[10] PIN_V10
SRAM_ADDR[11] PIN_V9
SRAM_ADDR[12] PIN_AC7
SRAM_ADDR[13] PIN_W8
SRAM_ADDR[14] PIN_W10
SRAM_ADDR[15] PIN_Y10
SRAM_ADDR[16] PIN_AB8
SRAM_ADDR[17] PIN_AC8
SRAM_DQ[0] PIN_AD8
SRAM_DQ[1] PIN_AE6
SRAM_DQ[2] PIN_AF6
SRAM_DQ[3] PIN_AA9
SRAM_DQ[4] PIN_AA10
SRAM_DQ[5] PIN_AB10
SRAM_DQ[6] PIN_AA11
SRAM_DQ[7] PIN_Y11
SRAM_DQ[8] PIN_AE7
SRAM_DQ[9] PIN_AF7
SRAM_DQ[10] PIN_AE8
SRAM_DQ[11] PIN_AF8
SRAM_DQ[12] PIN_W11
197
SRAM_DQ[13] PIN_W12
SRAM_DQ[14] PIN_AC9
SRAM_DQ[15] PIN_AC10
SRAM_WE_N PIN_AE10
SRAM_OE_N PIN_AD10
SRAM_UB_N PIN_AF9
SRAM_LB_N PIN_AE9
SRAM_CE_N PIN_AC11
OTG_ADDR[0] PIN_K7
OTG_ADDR[1] PIN_F2
OTG_CS_N PIN_F1
OTG_RD_N PIN_G2
OTG_WR_N PIN_G1
OTG_RST_N PIN_G5
OTG_DATA[0] PIN_F4
OTG_DATA[1] PIN_D2
OTG_DATA[2] PIN_D1
OTG_DATA[3] PIN_F7
OTG_DATA[4] PIN_J5
OTG_DATA[5] PIN_J8
OTG_DATA[6] PIN_J7
OTG_DATA[7] PIN_H6
OTG_DATA[8] PIN_E2
OTG_DATA[9] PIN_E1
OTG_DATA[10] PIN_K6
OTG_DATA[11] PIN_K5
OTG_DATA[12] PIN_G4
OTG_DATA[13] PIN_G3
OTG_DATA[14] PIN_J6
OTG_DATA[15] PIN_K8
OTG_INT0 PIN_B3
OTG_INT1 PIN_C3
OTG_DACK0_N PIN_C2
OTG_DACK1_N PIN_B2
OTG_DREQ0 PIN_F6
198
OTG_DREQ1 PIN_E5
OTG_FSPEED PIN_F3
OTG_LSPEED PIN_G6
TDI PIN_B14
TCS PIN_A14
TCK PIN_D14
TDO PIN_F14
TD_RESET PIN_C4
VGA_R[0] PIN_C8
VGA_R[1] PIN_F10
VGA_R[2] PIN_G10
VGA_R[3] PIN_D9
VGA_R[4] PIN_C9
VGA_R[5] PIN_A8
VGA_R[6] PIN_H11
VGA_R[7] PIN_H12
VGA_R[8] PIN_F11
VGA_R[9] PIN_E10
VGA_G[0] PIN_B9
VGA_G[1] PIN_A9
VGA_G[2] PIN_C10
VGA_G[3] PIN_D10
VGA_G[4] PIN_B10
VGA_G[5] PIN_A10
VGA_G[6] PIN_G11
VGA_G[7] PIN_D11
VGA_G[8] PIN_E12
VGA_G[9] PIN_D12
VGA_B[0] PIN_J13
VGA_B[1] PIN_J14
VGA_B[2] PIN_F12
VGA_B[3] PIN_G12
VGA_B[4] PIN_J10
VGA_B[5] PIN_J11
VGA_B[6] PIN_C11
199
VGA_B[7] PIN_B11
VGA_B[8] PIN_C12
VGA_B[9] PIN_B12
VGA_CLK PIN_B8
VGA_BLANK PIN_D6
VGA_HS PIN_A7
VGA_VS PIN_D8
VGA_SYNC PIN_B7
I2C_SCLK PIN_A6
I2C_SDAT PIN_B6
TD_DATA[0] PIN_J9
TD_DATA[1] PIN_E8
TD_DATA[2] PIN_H8
TD_DATA[3] PIN_H10
TD_DATA[4] PIN_G9
TD_DATA[5] PIN_F9
TD_DATA[6] PIN_D7
TD_DATA[7] PIN_C7
TD_HS PIN_D5
TD_VS PIN_K9
AUD_ADCLRCK PIN_C5
AUD_ADCDAT PIN_B5
AUD_DACLRCK PIN_C6
AUD_DACDAT PIN_A4
AUD_XCK PIN_A5
AUD_BCLK PIN_B4
ENET_DATA[0] PIN_D17
ENET_DATA[1] PIN_C17
ENET_DATA[2] PIN_B18
ENET_DATA[3] PIN_A18
ENET_DATA[4] PIN_B17
ENET_DATA[5] PIN_A17
ENET_DATA[6] PIN_B16
ENET_DATA[7] PIN_B15
ENET_DATA[8] PIN_B20
200
ENET_DATA[9] PIN_A20
ENET_DATA[10] PIN_C19
ENET_DATA[11] PIN_D19
ENET_DATA[12] PIN_B19
ENET_DATA[13] PIN_A19
ENET_DATA[14] PIN_E18
ENET_DATA[15] PIN_D18
ENET_CLK PIN_B24
ENET_CMD PIN_A21
ENET_CS_N PIN_A23
ENET_INT PIN_B21
ENET_RD_N PIN_A22
ENET_WR_N PIN_B22
ENET_RST_N PIN_B23
IRDA_TXD PIN_AE24
IRDA_RXD PIN_AE25
SD_DAT PIN_AD24
SD_DAT3 PIN_AC23
SD_CMD PIN_Y21
SD_CLK PIN_AD25
GPIO_0[0] PIN_D25
GPIO_0[1] PIN_J22
GPIO_0[2] PIN_E26
GPIO_0[3] PIN_E25
GPIO_0[4] PIN_F24
GPIO_0[5] PIN_F23
GPIO_0[6] PIN_J21
GPIO_0[7] PIN_J20
GPIO_0[8] PIN_F25
GPIO_0[9] PIN_F26
GPIO_0[10] PIN_N18
GPIO_0[11] PIN_P18
GPIO_0[12] PIN_G23
GPIO_0[13] PIN_G24
GPIO_0[14] PIN_K22
201
GPIO_0[15] PIN_G25
GPIO_0[16] PIN_H23
GPIO_0[17] PIN_H24
GPIO_0[18] PIN_J23
GPIO_0[19] PIN_J24
GPIO_0[20] PIN_H25
GPIO_0[21] PIN_H26
GPIO_0[22] PIN_H19
GPIO_0[23] PIN_K18
GPIO_0[24] PIN_K19
GPIO_0[25] PIN_K21
GPIO_0[26] PIN_K23
GPIO_0[27] PIN_K24
GPIO_0[28] PIN_L21
GPIO_0[29] PIN_L20
GPIO_0[30] PIN_J25
GPIO_0[31] PIN_J26
GPIO_0[32] PIN_L23
GPIO_0[33] PIN_L24
GPIO_0[34] PIN_L25
GPIO_0[35] PIN_L19
GPIO_1[0] PIN_K25
GPIO_1[1] PIN_K26
GPIO_1[2] PIN_M22
GPIO_1[3] PIN_M23
GPIO_1[4] PIN_M19
GPIO_1[5] PIN_M20
GPIO_1[6] PIN_N20
GPIO_1[7] PIN_M21
GPIO_1[8] PIN_M24
GPIO_1[9] PIN_M25
GPIO_1[10] PIN_N24
GPIO_1[11] PIN_P24
GPIO_1[12] PIN_R25
GPIO_1[13] PIN_R24
202
GPIO_1[14] PIN_R20
GPIO_1[15] PIN_T22
GPIO_1[16] PIN_T23
GPIO_1[17] PIN_T24
GPIO_1[18] PIN_T25
GPIO_1[19] PIN_T18
GPIO_1[20] PIN_T21
GPIO_1[21] PIN_T20
GPIO_1[22] PIN_U26
GPIO_1[23] PIN_U25
GPIO_1[24] PIN_U23
GPIO_1[25] PIN_U24
GPIO_1[26] PIN_R19
GPIO_1[27] PIN_T19
GPIO_1[28] PIN_U20
GPIO_1[29] PIN_U21
GPIO_1[30] PIN_V26
GPIO_1[31] PIN_V25
GPIO_1[32] PIN_V24
GPIO_1[33] PIN_V23
GPIO_1[34] PIN_W25
GPIO_1[35] PIN_W23
Tabla 3.2 Distribucin de pines.

3.6.4 EL PLANEADOR DE PINES DE QUARTUS II

Una vez que el circuito diseado haya superado con xito la compilacin,
la sntesis y la simulacin, el paso siguiente es la asignacin de los pines
del FPGA a las entradas y salidas del circuito diseado.

La compilacin permite detectar errores en la sintaxis del programa, la


sntesis permite crear el circuito diseado en el nivel ms bajo de
abstraccin y la simulacin permite verificar si el circuito trabaja o funciona
como debe funcionar, es decir por ejemplo, si es un sumador debe sumar.
203
La asignacin de los punes a las entradas y salidas del circuito se debe
realizar sifuiendo los siguientes pasos:

En la opcin assignment del men principal de Quartus II, seleccionar la


opcin Pin Planner y aparece la ventana que se indica en la figura 3.57.

Figura 3.57. Ventana para la planeacin de pines del FPGA.

En la parte inferior de esta ventana se clickea sobre la opcin: location y


aparece una ventana adicional que se muestra en la figura 3.58.

204
Figura 3.58. Ventana con el planeador de pines desplegada.

En la ventana de la figura 3.59 se muestra la porcin ampliada de la


ventana desplegada de la figura 3.58.

Figura 3.59. Ventana desplegada ampliada.

205
En la ventana 3.47 se seleccionan los pines que se van asignar a cada
entrada y salida del circuito diseado, una vez terminada esta asignacin
se compila de nuevo desde la ventana principal de Quartus II y se
procede a programar el FPGA.

3.6.5 GRFICO DEL CIRCUITO DISEADO

Antes de programar el FPGA, si se quiere obtener el grafico del circuito


diseado se procede de la siguiente manera: en la ventana principal de
Quartus II se clickea sobre la opcin Tool, se selecciona Netlist y RTL
Viewer, y aparece la ventana de la figura 3.60.

Figura 3.60. Grfico del circuito diseado.

3.6.6 PROGRAMACION DEL FPGA

Para programar el FPGA se procede de la manera siguiente:

206
En el men de la ventana principal de Quartus II se clickea sobre
Tool/progammer/, y aparece la ventana de la figura 3.61, si en la pestaa
que est al lado de la pestaa Hardware Setup aparece no Hardware
significa que el entrenador DE2 no est conectado o la computadora no
ha reconocido al USB-Blaster, si este es el caso se debe clickear sobre la
pestaa Hardware Setup y aparece la ventana que muestra la figura 3.61,
en esa ventana se clickea sobre la pestaa no hardware y aparece la
opcin USB-Blaster, se clickea sobre esta y est listo.

Para iniciar la programacin se cickea sobre la pestaa Start de la


ventana que se muestra en la figura 3.61.

Cuando la pestaa Progess de la misma figura ha llegado al 100% el


FPGA est programado.

Figura 3.61. Ventana de programacin del FPGA.

207
Ejercicios propuestos

1. Explique dos formas diferentes que se pueden utilizar para crear un


nuevo proyecto en Quartus II.USB-Blaster
2. Cuando se est creando un nuevo proyecto, es necesario
especificar con claridad en nombre de la entidad de ms alto nivel,
Explique cul debe ser por obligacin ese nombre.
3. Para abrir un proyecto guardado, se deben abrir dos archivos,
cules son esos archivos.
4. Cuando se est creando un nuevo proyecto con Quartus II, el
asistente para la creacin de nuevo proyecto le permite realizar
cinco acciones, cules son esas acciones.
5. El nombre del proyecto y el nombre de la entidad de ms alto nivel
deben ser los mismos, explique.
6. Explique cul es proceso para aadir algunos archivos que su
proyecto requiera.
7. Que significa seleccionar la familia y el dispositivo destino.
8. Explique si Quartus II puede incluir alguna otra herramienta EDA en
un proyecto que se est creando.
9. Explique que es una captura esquemtica dentro de Quartus II.
10. Explique cul es el proceso mediante el cual se crea un a captura
esquemtica en Quartus II.
11. Explique porque hay que compilar un proyecto en Quartus II.
12. Explique cul es la funcin de la opcin Analysis & Sinthesis.
13. En el proceso de compilacin Quartus II le indica los errores y los
Warnings, explique cada uno.
14. Si la compilacin de un proyecto fue exitosa, entonces el proyecto
est correctamente elaborado y el circuito diseado debe trabajar
adecuadamente, explique.
15. Para se utiliza VHDL File.
16. Cmo se compila un proyecto con Quartus II.
17. Como se simula un proyecto con Quartus II.
18. Explique, que es una simulacin temporal.
19. Explique que es una simulacin funcional.
208
20. Cul es la diferencia entre una simulacin temporal y una
simulacin funcional.
21. Cul es la utilidad del RTL Viewer.
22. Explique cada una de las cuatro ventanas que contiene la ventana
principal de Quartus II.
23. Que informacin contiene la opcin: Inser Template y cul es su
utilidad.
24. Como se configuran los pines del FPGA que estn disponibles en
el entrenador DE2 de Altera.
25. Explique el proceso mediante el cual se programa el FPGA del
entrenador DE2 de altera.
26. Explique cmo se instala el USB-Blaster.
27. Si en la ventana Programmer no est visible el USB-Blaster que
procedimiento debe realizarse para que sea visible.
28. En la ventana Programmer cul es la utilidad de Add File.
29. En la ventana Programmer cul es la utilidad de Add Device.

209
Bibliografia

Altera DE2 Developed and Education Board, 2015.


Recuperado de: https://www.altera.com/content/dam/altera-
www/global/en_US/pdfs/literature/hb/cyc2/cyc2_cii51001.pdf.
Recuperado de: https://www.altera.com/content/dam/altera-
www/global/en_US/pdfs/literature/hb/cyc2/cyc2_cii51002.pdf.
Brown, S. Vranesic, Z. (2006). Fundamentos de Lgica Digital con Diseo
VHDL. Mexico: Mc Graw Hill.

210
CAPTULO 4

INTRODUCCIN A VHDL

4.1 INTRODUCCIN
Antes de la aparicin de los lenguajes de descripcin de Hardware el
anlisis, diseo e implementacin de sistemas digitales era una tarea
bastante compleja que, en general, consista en disear el circuito en un
papel, luego el circuito dibujado en el papel se armaba con dispositivos
reales sobre un protoboard (las conexiones entre los diferentes
dispositivos se realizaba mediante cables) para probar el funcionamiento
del circuito, y una vez que el circuito funcionaba adecuadamente se
pasaba a un circuito impreso y all se soldaban los dispositivos.
Esa forma de diseo tena varios inconvenientes, por ejemplo, el hecho
de tener una gran cantidad de cables conectando los diferentes
dispositivos sobre el Protoboard incrementaba la capacitancia e
inductancia parasita, peor an si el circuito implementado sobre el
Protoboard no funcionaba adecuadamente haba que desarmar el circuito,
volver a disearlo y rearmarlo en el Protoboard, este proceso
dependiendo de la complejidad del circuito podra durar muchsimos das
provocando una gran prdida de tiempo y recursos.
En la actualidad los circuitos se analizan, disean e implementan
utilizando alguna herramienta para diseo electrnico automtico (EDA).
Para el caso de los circuitos digitales, los lenguajes de descripcin de
hardware (HDL) y los arreglos de compuertas programables en campo
(FPGA) o los dispositivos lgicos programables complejos (CPLD) en
conjunto son las herramientas utilizadas.

4.2 VHDL

211
VHDL es un lenguaje de descripcin de hardware y es un estndar
mundial. Las siglas VHDL provienen de la unin de las siglas V y HDL: la
V proviene a su vez de las siglas: Very High Speed Integrated Circuits y
HDL son las siglas para: Hardware Description Language, por lo que la
palabra (sigla) VHDL se traduce como: Lenguaje de descripcin de
Hardware para circuitos integrados de muy alta velocidad.
VHDL nace como una iniciativa del departamento de defensa de los
estados unidos en 1980, a la primera versin se denomin VHDL 87 y la
segunda VHDL 93, fue el primer y original lenguaje de descripcin de
hardware estandarizado por el Institute of Electrical and Electronics
Engineers (IEEE), el estndar fue el: IEEE 1076 standard, posteriormente
se aadi el estndar IEEE 1164 que incluye sistemas lgicos multi-
valores.
Por ser VHDL un lenguaje estndar es reusable y portable. Dos son los
campos de aplicacin tpicos de VHDL el uno es en el campo de los
dispositivos lgicos programables como los FPGA y los CPLD y el otro es
en el campo de los circuitos integrados para aplicaciones especficas
(Application Specific Integrated Circuits ASIC). A partir de un programa o
cdigo escrito con VHDL se debe construir el respectivo dispositivo fsico
(el hardware), este dispositivo fsico, no es ms que un dispositivo
programable o un ASIC. Entre los dispositivos programables estn los
FPGA y los CPLD. Los circuitos integrados ASIC se construyen por
pedido especial a un fabricante de circuitos integrados.
Los dispositivos programables a diferencia de los ASIC, se pueden
comprar en el mercado electrnico mundial, un ASIC lgicamente no est
disponible en una tienda electrnica, hay que mandarlo a fabricar. Hay
una amplia variedad de fabricantes de FPGA y CPLD entre estos estn
Altera y Xilinx.
Muchos ASIC como por ejemplo los microcontroladores,
microprocesadores son diseados y construidos mediante algn lenguaje
de descripcin de hardware.

212
VHDL a diferencia de un lenguaje de programacin comn que ejecuta las
sentencias en forma secuencial, VHDL ejecuta las sentencias todas al
mismo tiempo, en forma paralela, es decir, la primera lnea de cdigo se
ejecuta al mismo tiempo que la ltima lnea de cdigo, por esta razn
este lenguaje es concurrente y en lugar de programa se suele decir
cdigo, sin embargo este lenguaje puede ejecutar sentencias en forma
secuencial mediante un process, procedure o una function, esto ser
presentado ms adelante.

4.3 DESCRIPCION DE CIRCUITOS CON VHDL


Un lenguaje de descripcin de hardware, como su nombre lo indica, es un
lenguaje que describe el funcionamiento de un circuito (el hardware), para
entender su significado, se hace referencia primero a la metodologa para
disear un circuito digital y luego se asocia esta metodologa con VHDL.
Cuando se disea un circuito digital o algo ms complejo un sistema
digital, generalmente la metodologa de diseo sigue el siguiente
procedimiento:
Se estudian las especificaciones de la manera cmo debe funcionar el
circuito o sistema y a partir de estas especificaciones se identifican:
1. Las entradas y las salidas del circuito o sistema.
2. El funcionamiento del circuito o sistema.
Luego se dibuja un diagrama de bloques que represente al circuito o
sistema, en el bloque se dibujan las entradas y las salidas (incluyendo el
nmero de bits o tipo de datos que representan esas entradas y salidas),
a continuacin se estable la relacin que hay entre las salidas y las
entradas mediante una tabla de verdad en el caso de los circuitos
combinacionales o mediante un algoritmo dibujado con smbolos
especiales para el caso de los circuitos secuenciales y finalmente de la
tabla de verdad o del algoritmo se construye el circuito fsico o hardware.
El diagrama de bloques tiene un nombre que hace referencia a lo que el
circuito hace, por ejemplo sumador, multiplexor, etc, las seales de
213
entrada se dibujan entrando al bloque y cada seal tiene su respectivo
nombre, las seales de salida se dibujan saliendo del bloque y tambin
tienen sus respectivos nombres, un ejemplo de un diagrama de bloques
muestra la figura 4.1, las entradas van desde E1 hasta En (el tipo de
datos que representan son bits, un bit por seal, para este ejemplo) y las
salidas van desde S1 hasta Sm.

E1 S1
.. NOMBRE ..

En Sm

Figura 4.1 Ejemplo de un diagrama de bloques.


La relacin entre la metodologa de diseo indica y VHDL es la siguiente:
en VHDL al diagrama de bloques (el circuito) se le denomina entidad. A
las especificaciones de la manera como debe funcionar el circuito o
sistema (descritas por una tabla de verdad o un algoritmo segn el caso)
se le llama arquitectura.
Por lo tanto en VHDL, el diagrama de bloques es a la entidad como el
funcionamiento del circuito (la tabla de verdad, el algoritmo) es a la
arquitectura.
De ah que un programa en VHDL debe estar asociado a un diagrama de
boques y al funcionamiento del mismo.
El funcionamiento de un circuito puede ser descrito de diferentes
maneras, por lo tanto, se pueden tener varias arquitecturas asociadas a
una misma entidad, esto se har evidente ms adelante.

4.4 ENTIDAD
214
Como se indic, la entidad est asociada con el diagrama de bloques, por
lo tanto, debe haber en VHDL alguna manera de indicar las partes que
tiene ese diagrama de bloques, entendindose por partes a:
1. Su nombre.
2. Los nombres de las entradas.
3. Los nombres de las salidas.
4. El tipo de datos que tienen las entradas y salidas.
En VHDL al bloque se hace referencia con la palabra reservada: ENTITY,
el nombre del bloque, por lo tanto, es el nombre de la entidad.
Las seales de entrada y salida en VHDL se las conoce puertos y se
hace referencia a ellas mediante la palabra reservada: PORT, si son
entradas son puertos de entrada y si son salidas son puertos de salida, y
se utilizan las palabras reservadas In para las entradas y out para las
salidas.
VHDL a diferencia de algunos lenguajes de programacin no hace
distincin entre las letras maysculas y minsculas, por lo tanto, las
palabras: entrada, ENTRADA, EnTrADA son equivalentes.
A continuacin se escribe un ejemplo de la forma como se declara una
entidad. La figura 4.2 muestra el diagrama de bloques del circuit que se
quiere disear, como se ve tiene dos entradas E1 y E2 ambas de un solo
bit, y dos salidas S1 y S2 tambin de un solo bit, el bloque se llama
ejemplo.

E1 S1
ejemplo
E2 S2

Figura 4.2. Bloque para declarar una entidad.


215
-- Este es un ejemplo de declaracin de entidad
-- los dos guiones medios seguidos en VHDL sirven para escribir
comentarios.

ENTITY ejemplo IS
PORT( E1, E2: IN BIT;
S1, S2: OUT BIT);
END ejemplo;

Las dos primeras lneas de este programa empiezan con dos guiones
medios (--), estos guiones indican que lo que se escribe a continuacin
son comentario y el compilador no los toma en cuanta.
La tercera lnea empieza con la palabra reservada ENTITY, esta palabra
hace referencia al bloque e indica el comienzo de la declaracin de la
entidad, a continuacin se escribe el nombre que se le asign al bloque,
que por supuesto es el nombre de la entidad (ejemplo) y termina con la
palabra reservada IS.
En la cuarta lnea se hace referencia a las entradas y salidas del bloque
mediante la palabra reservada PORT, como si se dijera el bloque est
compuesto por las siguientes entradas y salidas, a continuacin se
especifican los nombres de las entradas al bloque, para el ejemplo E1 y
E2, las entradas se escriben una a continuacin de otra separadas por
comas y terminadas por dos puntos (:), estos dos puntos asignan todo lo
que se escribe a su lado derecho a los nombres que se escriban a su lado
izquierdo, en el ejemplo a continuacin de los dos puntos estn escritas
las palabras reservadas IN y BIT, indican que E1 y E2 son entradas y de
un solo bit, las sentencias en VHDL se terminan con un punto y coma (;).

216
En la quinta lnea, siguiendo con el ejemplo, se escriben separadas por
comas los nombres de las salidas terminadas con dos puntos y a
continuacin de los dos puntos se escriben las palabras reservadas OUT
y BIT indicando que se asignan OUT y BIT a lo que est escrito a la
izquierda de los dos puntos, es decir a S1 y S2, de esta manera, S1 y S2
quedan identificadas como salidas de un solo bit.
En resumen se deben escribir los nombres de las entradas, las salidas y
el tipo de datos a que representan.
La declaracin de la entidad se termina con la palabra reservada END, el
nombre de la entidad y seguido un punto y coma.

4.5 IDENTIFICADORES
Un identificador en VHDL, es un nombre que va a identificar a algo (una
variable, una seal, una entidad, una arquitectura, etc), un nombre para
ser escrito correctamente debe seguir las siguientes reglas:
1. Puede tener letras maysculas y/o minsculas, ejemplo: sUmaDor.
2. No puede iniciar con un nmero, ejemplo: 2sumador.
3. El segundo carcter no puede ser un guion bajo, ejemplo:
s_umador.
4. No puede tener dos guiones bajos seguidos, ejemplo: suma__dor.
5. No puede tener smbolos especiales, ejemplo: suma&%$dor.
6. No se pueden utilizar palabras reservadas, ejemplo: entity, end,
out, in.

4.6 PUERTOS DE ENTRADA Y SALIDA


Los puertos de entra y salida deben ser identificados de la siguiente
manera:
1. Con un nombre. Un identificador que lo caracteriza.
2. Un modo. Hace referencia a la direccin en que los datos son
transferidos por el puerto.

217
3. El tipo de datos. Es la clase (tipo) de informacin que contendr el
puerto.

El modo de un puerto puede ser:


1. Modo IN, indica que el puerto es una entrada.
2. Modo OUT, indica que el puerto es una salida.
3. Modo INOUT, indica que el puerto es bidireccional, es decir, puede
actuar como una entrada-salida y puede este puerto ser
realimentado al interior de la entidad o hacia el exterior.
4. Modo BUFFER, indica que el puerto puede ser realimentado
internamente hacia la entidad pero no puede realizar
realimentaciones al exterior de la entidad, en esencia se compota
como una salida, un ejemplo concreto es la salida Q de un flip-flop,
la salida Q negada se obtiene a partir de leer la salida Q y negarle:
Qnegada= not Q, Q se declara como buffer.
Los tipos de datos en VHDL
VHDL, soporta una gran variedad de tipos de datos, en esta seccin solo
se mencionan algunos de los ms utilizados.
1. Bit. Representa a un uno lgico o a un cero lgico.
2. Bit_vector. Representa a un conjunto de bits, a un vector de bits.
3. Boolean. Representa a un valor verdadero o falso.
4. Integer. Representa a un nmero entero.
Un programa en VHDL tiene cinco unidades bsicas de diseo y son:
declaracin de entidad, declaracin arquitectura, configuracin,
declaracin de paquete y cuerpo de paquete. De estas cinco unidades,
dos siempre deben estar presentes y son la declaracin de entidad y de
paquete, el resto pueden o no estar.
A continuacin se presentan algunos ejemplos.

Ejemplo 4.1
218
Declarar la entidad de un sumador medio de un bit.
Un sumador medio tiene dos seales de entrada que son los nmeros
que se van a sumar y dos salidas el uno contiene el resultado de las suma
y el otro el acarreo, el diagrama de bloque del sumador medio se muestra
en la figura 4.3.

D1 S
SUMADOR_MEDIO
D2 A

Figura 4.3. Diagrama de bloques del sumador medio.

La declaracin de la entidad es:

ENTITY suamdor_medio IS
PORT( D1, D2: IN BIT;
S, A: OUT BIT);
END suamdor_medio;

Ejemplo 4.2
Declare la entidad de un multiplexor de 2 a 1 para datos de un bit.
Un multiplexor de dos a uno tiene tres lneas de entrada: la lnea de
seleccin(S), dos lneas de datos de entrada (D1, D2) y una lnea de

219
salida (Y), la figura 4.4 muestra el diagrama de bloques de un multiplexor
de 2 a 1 para datos de un bit.

D1 Y
mux
D2

Figura 4.4. Diagrama de bloques de un mux de dos a uno.

La declaracin de la entidad es:

ENTITY mux IS
PORT( S, D1, D2: IN BIT;
Y: OUT BIT);
END MUX;

Ejemplo 4.3
Declare la entidad de un sumador completo de cuatro bits de informacin.
Un sumador completo de cuatro bits tiene una entrada de un bit que es el
acarreo de entrada, dos lneas de 4 bits cada una (vectores de 4 bits de
datos cada uno) una salida de 4 bits (vector de 4 bits) que representa a la
suma y una lnea de salida de un bit que representa al acarreo de salida.

220
S [3:0]
D1[3:0]
SC
D2[3:0]
A [1]
e [1]

Figura 4.5. Diagrama de bloque el sumador.

La declaracin de entidad es:

ENTITY SC IS
PORT( e: IN BIT;
D1, D2: IN BIT_VECTOR (3 downto 0);
A: OUT BIT;
S: OUT BIT_VECTOR (3 downto 0));
END SC;
Cuando un puerto se declara del tipo BIT_VECTOR es necesario
especificar el orden de las celdas del vector, por ejemplo si se utiliza esta
representacin: (3 downto 0) significa que el bit ms significativo se
encuentra en la posicin 3 y el menos significativo se encuentra en la
posicin 0, como se indica en la tabla 4.1.

3 2 1 0

221
Bit ms significativo Bit menos significativo
Tabla 4.1 Uso de downto.
Si se especifica el vector como: (0 to 3), significa que el bit ms
significativo se encuentra en la posicin 3. Como se indica en la tabla 4.2.

0 1 2 3
Bit menos significativo Bit ms significativo
Tabla 4.2 Uso de to.

4.7 LIBRERIAS Y PAQUETES


Una librera en VHDL contiene paquetes, los paquetes a su vez contienen
funciones, procedimientos, componentes, constantes y tipos de datos. Si
algn tipo de informacin (cdigo) se utilizada continuamente hay que
ponerlo dentro de una librera.
Las funciones, procedimientos, componentes, constantes y tipos de
datos., contienen un programa (un algoritmo codificado con VHDL) en
VHDL que realiza alguna funcin especfica, por ejemplo puede ser un
programa que realiza la multiplicacin de nmeros en forma muy eficiente.
Para que estas funciones, procedimientos, componentes, constantes y
tipos de datos puedan ser usados y reusados por un programa o por otros
programas son puestos dentro de paquetes y estos paquetes se compilan
dentro de una librera destino quedando as la informacin que contiene la
librera lista para ser utilizada las veces que se requiera y en los
programas que se necesiten.
Por ejemplo si se tiene una funcin que contiene el cdigo que multiplica
nmeros y esta funcin est dentro de un paquete y este paquete se ha
compilado en una librera entonces la informacin (el cdigo que multiplica

222
nmeros) que est en la librera puede ser utilizada por cualquier
programa las veces que sean necesarias.
Si en un programa se necesita multiplicar nmeros, ya no ser necesario
escribir el programa que multiplique los nmeros, sino ms bien habr que
llamar a la librera que contiene esa multiplicacin.
Para usar la informacin de una librera hay que llamar a la librera, indicar
el paquete de esa librera y la parte del paquete que contiene la
informacin requerida, este proceso es necesario porque una librera
contiene varios paquetes y cada paquete tiene funciones procedimientos,
etc.
La ventaja de tener libreras es que el cdigo que contienen puede ser
reutilizado en un mismo diseo o compartido en otros diseos.

4.8 DECLARACION DE LIBRERA


Cuando se quiere utilizar una librera hay que declararla (hacerla visible)
dentro del programa escribiendo dos lneas de cdigo y son:
1. LIBRARY nombre_libreria;
2. USE nombre_libreria.nombre_paquete.parte_del_paquete;
LIBRARY, es la palabra reservada para librera, nombre_libreria es el
nombre de la librera que se va a utilizar.
USE, es una palabra reservada y lo que est escrito a su derecha es el
nombre de la librera, el nombre del paquete y el nombre de la parte del
paquete que se va a utilizar, si se va a utilizar todo el paquete se escribe
la palabra ALL.
En un programa en VHDL normalmente se utilizan las libreras y paquetes
que se indican en la tabla 4.3.

Librera Paquete contenido Visible por default

223
IEEE STD_LOGIC_1164 Contiene todos No, hay que declararla
los tipos de
datos
STD STANDARD Contiene tipos S, no hay que
de datos declararla.
bsicos.
WORK - Programas del S, no hay que
usuario. declararla.
Tabla 4.3 Algunas libreras y paquetes de uso frecuente.

Las libreras std y work son visibles por default y no hay que declararlas,
otras libreras hay que declararlas o hacerlas visibles antes de utilizar su
informacin.

Ejemplo 4.4
Analice la siguiente declaracin:

LIBRARY ieee;
USE ieee.std_logic_1164.all;

Esta dos lneas hacen visible la librera ieee, adems, indica la segn da
lnea que el paquete de esta librera que se va a utilizar es el:
std_logic_1164 y se va a usar no una parte del paquete sino todo su
contenido (all).

Ejemplo 4.5

224
A pesar de que no es necesario declarar las libreras std y work,
declrelas e indique la librera, el paquete y la parte del paquete que se
utiliza.
La declaracin es:

LIBRARY std;
USE std.standard.all;
LIBRARY work;
USE work.all;

En el primer caso la librera se llama: std, el paquete que est dentro de


esa librera es el: standard y la parte del paquete que se va a utilizar es
todo el paquete (all).
Para el segundo caso el nombre de la librera es work, no tiene paquetes
y se va a utilizar toda la librera, work contiene toda la informacin que
vaya generando el usuario.

4.9 TIPOS DE DATOS PREDEFINIDOS


VHDL tiene varios tipos de datos predefinidos que el usuario puede
utilizarlos, en la tabla 4.4 se muestran dos libreras con sus respectivos
paquetes.

LIBRERIA PAQUETE EL CONTENIDO DEL PAQUETE


DEFINE LOS SIGUIENTES TIPOS DE
DATOS
STD standard BIT 1, 0. Dos niveles lgicos

225
BOOLEAN True, False
INTEGER Enteros de -
2,147,483,647 a
32-bit
+2,147,483,647.
NATURAL Enteros de 0 a
+2,147,483,647.
REAL de -1.0E38 to +1.0E38.
No sintetizable
std_logic_1164 STD_LOGIC 1, 0, H, L, Z, X, -, W
(ocho niveles lgicos)
STD_ULOGI U, 1, 0, H, L, Z, X, -, W
C (nueve niveles lgicos)
std_logic_arith SIGNED + 3 0 011 -3 1 101 Ca2
IEEE
para UNSIGNED: nmeros mayores a cero
operaciones ej: 3
aritmticas y de
comparacin.
std_logic_sign Transforma tipos de datos
ed std_logic_vector a Signed (nmero
con signo): ejemplo: transforma el
vector 011 (bits) al nmero 3 con
signo +3 (0011). Permite a los
vectores ser tratados como nmeros
con signo.
std_logic_unsi Transforma un grupo de bits (vector) a
gned un nmero sin signo tipo UNSIGNED.
Ejemplo: el vector 011 (Bits) se
convierte en el nmero 3 (011) sin
signo, UNSIGNED. Permite a los

226
vectores ser tratados como nmeros
sin signo.
Tabla 4.4 Tipos de datos predefinidos.

Smbolo Valor lgico al que representa.


X Valor desconocido (sintetizable desconocido)
0 Nivel bajo (0 lgico es sintetizable)
1 Nivel alto (1 lgico es sintetizable )
Z Alta impedancia (buffer tri-state sintetizable)
W Valor dbil desconocido
L Nivel dbil bajo
H Nivel dbil alto
No importa
U Valor lgico no resuelto.
Tabla 4.5 Significado de los smbolos lgicos.

La tabla 4.5 muestra los niveles lgicos predefinidos que estn en el


paquete std_logic_1164 de la librera IEEE.

4.9 TIPOS DE DATOS DEFINIDOS POR EL USUARIO


El usuario puede definir dos tipos de datos y son los enteros y los
enumerados,
Los tipos de datos enteros definidos por el usuario deben declararse
como se indica a continuacin:

227
TYPE mi_nombre IS RANGE valor inicial TO valor final;

El usuario debe asignar algn nombre (mi_nombre) a sus tipos de datos y


adems debe definir el rango de esos datos (valor inicial, valor final).

Ejemplo 4.6
Analice la siguiente declaracin:

TYPE mis_enteros IS RANGE -100 TO 100;

Esta declaracin indica que el tipo de datos entero mis_enteros (nombre)


estn en el rango que va desde el -100 hasta el 100.

Ejemplo 4.7
Analice la siguiente declaracin:

TYPE numero_estudiantes_vhdl IS RANGE 1 TO 52;

Esta declaracin indica que el tipo de datos entero


numero_estudiantes_vhdl (nombre) estn en el rango que va desde el 1
hasta el 52.
Los tipos de datos enumerados definidos por el usuario deben declarase
siguiendo el siguiente formato:

228
TYPE nombre IS (elemento1, elemento 2, ..);

Nombre es el nombre que el usuario le asigna a su tipo de datos


enumerados, entre parntesis, separados por comas se enumeran los
elementos que conforman el conjunto de datos. Los elementos se
escriben entre comillas simples (apostrofes) si el tipo es un subconjunto
de un tipo predefinido.
Automticamente estos elementos son guardados en el orden que se
escribieron (salvo que se indique otra cosa) y se les asigna un cdigo
binario, este cdigo tendr los bits que sean necesarios, por ejemplo si
son 8 elementos sern necesarios tres bits cuyo cdigo ira desde el 000
hasta el 111.

Ejemplo 4.8
Analice la siguiente declaracin:

TYPE tamao IS (bajo, medio, alto);

El tipo de datos enumerado se llama: tamao y tiene los tres siguientes


elementos: bajo, medio y alto.

Ejemplo 4.9
Analice la siguiente declaracin:

TYPE mis_niveles IS (0, 1, z);

229
El tipo de datos enumerado se llama: mis_niveles y tiene los tres
siguientes elementos: 0, 1, z. los elementos estn entre comillas simples
porque sus elementos son parte de un tipo de datos predefinidos.

Ejemplo 4.10
Analice la siguiente declaracin:

TYPE mis_estados IS (a, b, c, d, e, f);

El tipo de datos enumerado se llama: mis_estados y tiene los seis


siguientes elementos (estados): a, b, c, d, e, f. esta tipo de datos se utiliza
en las mquinas secuenciales.

4.10 SUBTIPOS
Debido a que las operaciones entre diferentes tipos de datos no son
permitidos sino ms bien las operaciones permitidas son entre un subtipo
y la base de ese subtipo.
Por ejemplo si se tiene una seal x declarada como de tipo BIT y otra
seal w declarada como de tipo STD_LOGIC no se pueden realizar
operaciones entre estas dos seales porque son de diferente tipo.
Un subtipo es un subconjunto de un tipo de datos, o es un tipo de datos
con alguna restriccin, o es un tipo de datos dentro de otro tipo de datos.
Un subtipo de datos se declara siguiendo el siguiente formato:

SUBTYPE nombre_subtipo IS nombre_tipo RANGE (valor inicial TO valor


final);

230
Ejemplo 4.11
Analice la siguiente declaracin:

TYPE mis_estados IS (a, b, c, d, e, f);


SUBTYPE mi_subtipo IS mis_estados RANGE a TO c;

Ejemplo 4.12
Analice la siguiente declaracin:

TYPE color IS (rojo, verde, azul, blanco);


SUBTYPE mi_color IS color RANGE rojo TO verde;

Ejemplo 4.13
Analice la siguiente declaracin e indique entre que seales se pueden
realizar operaciones.

SUBTYPE mi_subtipo IS STD_LOGIC RANGE '0' TO '1';


SIGNAL x: BIT;
SIGNAL w: STD_LOGIC;
SIGNAL z: mi_subtipo;

No se pueden realizar operaciones entre x y w porque son de diferente


tipo (bit, STD_LOGIC), sin embargo como z y w son del mismo tipo
(STD_LOGIC) se pueden realizar operaciones entre estas.

231
TYPE mis_enteros IS RANGE -100 TO 100;
TYPE tamao IS (bajo, medio, alto);
TYPE mis_niveles IS (0, 1, z);
TYPE color IS (rojo, verde, azul, blanco);
SUBTYPE mi_color IS color RANGE rojo TO verde;

4.11 OPERADORES
Los siguientes operadores estn predefinidos en VHDL
1. Asignacin.
2. Lgicos.
3. Aritmticos.
4. Relacionales.
5. De desplazamiento
6. De concatenacin.

4.12 OPERADORES DE ASIGNACION


Los operadores de asignacin permiten asignar valores a:
1. Seales.
2. Variables.
3. Constantes.

Sus smbolos son:


1. <=
2. :=
3. =>

232
En la tabla 4.6 se resume la forma como se utilizan estos operadores.

Operador Smbolo uso


<= Para asignar valores a seales.
:= Para asignar valores a variables, constantes y
genricos. Para establecer valores iniciales.
Asignacin
=> Para asignar valores individuales a cada uno de
los elementos de un vector o se utiliza tambin
con la instruccin OTHERS.
Tabla 4.6. El operador de asignacin.

Ejemplo 4.14
Se exponen cinco ejemplos de asignaciones a seales y variables.

a <= '0'; se asigna un cero a la seal a.


b := "0011"; se asigna 0011 a la variable b.
c <= "0111"; se asigna 0111 a la seal c.
d <= (0 =>'1', OTHERS =>'0'); a la seal d se asigna 1000.
e <= (0 =>'0', OTHERS =>'1'); a la seal e se asigna 0111.

4.13 OPERADORES LOGICOS


Los operadores lgicos permiten realizar operaciones lgicas entre datos
del tipo:
1. BIT.
233
2. BIT_VECTOR.
3. STD_LOGIC.
4. STD_LOGIC_VECTOR.
5. STD_ULOGIC.
6. STD_ULOGIC_VECTOR.
Los operadores lgicas son:
1. NOT.
1. AND.
2. OR.
3. NAND.
4. NOR.
5. XOR.
6. XNOR.

Ejemplo 4.15
Se escriben tres ejemplos de uso de los operadores lgicos.

a <= NOT z AND b; operacin lgica y entre z negado y b.


c <= a AND b); operacin lgica y (and) entre a y b.
y <= a OR b; operacin lgica o (or) entre a y b.

4.14 OPERADORES ARITMETICOS


Los operadores aritmticos se utilizan para realizar operaciones
aritmticas entre datos de tipo:
1. Enteros con signo y sin signo.
2. Reales.
Si son utilizados los paquetes:
1. std_logic_signed.
234
2. std_logic_unsigned.
Los datos del tipo std_logic_vector pueden ser utilizados directamente
para realizar operaciones de suma y resta.
Los smbolos de los operadores aritmticos son:
1. + Suma.
2. - Resta.
3. * Multiplicacin.
4. / Divisin.
5. ** Exponenciacin.
6. MOD Mdulo.
7. REM Residuo.
8. ABS Valor absoluto.

4.15 OPERADORES DE COMPARACION


Los operadores de comparacin o relacionales son:
1. = Igualdad
2. /= No igual.
3. < Menor que.
4. > Mayor que.
5. <= menor o igual a.
6. >= mayor o igual a.

4.16 OPERADORES DE DESPLAZAMIENTO


Los operadores de desplazamiento permiten desplazar bits de datos, la
sintaxis es la siguiente:

Dato de tipo: operador de desplazamiento entero


BIT_VECTOR

235
Los operadores de desplazamiento son:
SLL, es el desplazamiento lgico a la izquierda. Los bits son desplazados
una posicin a la izquierda, la posicin del bit que se encuentra ms a
derecha es reemplazo por un cero, la figura muestra esta operacin.
1 1 0 1 1 Dato original

1 0 1 1 0 Dato desplazado

SRL es el desplazamiento lgico a la derecha, los bits se desplazan una


posicin a la derecha la posicin del bit que se encuentra ms a la
izquierda es reemplazo por un cero.
1 1 0 1 1 Dato original

0 1 1 0 1 Dato desplazado

4. 17 OPERADORES DE CONCATENACION
Los operadores de concatenacin son:
1. &
2. (, , , , )

Los tipos de datos que soportan son:


1. BIT, BIT_VECTOR,
2. STD_LOGIC, STD_LOGIC_VECTOR,
3. STD_ULOGIC, STD_ULOGIC_VECTOR
4. SIGNED, UNSIGNED.
236
4.18 ATRIBUTOS DE LAS SEALES
El atributo de una seal da o retorna algn tipo informacin de la seal,
por ejemplo si una seal no ha cambiado, o ha cambiado, o se ha
mantenido estable por un tiempo, etc., la tabla 4.7 muestra la informacin
que se retorna cada atributo de una seal.
En este punto con la finalidad entender el concepto de seal en un
sentido muy informal (ms adelante se formalizara este concepto) y poder
identificarla con facilidad en un circuito, puede ser relacionada con los
cables que conectan los diferentes dispositivos en un circuito, es decir,
todo cable es una seal (conduce una seal) o donde hay un cable hay
una seal, la tabla 4.7 muestra la seal s sus posibles atributos.

Atributo Retorna Comentario


sEVENT: v Si un evento, un cambio, en la seal se
ha producido.

sSTABLE: v Si un evento, un cambio, en la seal


NO se ha producido.
sACTIVE: V Si s=1,

sQUIET V Si un evento no se ha producido en la


<tiempo> seal s en el tiempo especificado.

sLAST_EVENT: tiempo Retorna el tiempo transcurrido desde el


ltimo evento en la seal s.

sLAST_ACTIVE: tiempo Retorna el tiempo transcurrido desde el


ltimo evento donde s fue igual 1.

237
sLAST_VALUE: valor Retorna el valor que tubo s antes de su
ltimo evento.
Tabla 4.7. Los atributos de una seal.
El atributo que ms se suele utilizar en circuitos secuenciales es:
sEVENT, donde s es la seal del reloj.

Ejemplo 4.16
Si clk es la seal del reloj que resultado retorna: clkEVENT,
Retorna un valor verdadero, cuando la seal clk cambie de nivel de alto a
bajo o de bajo a alto, es decir, si se ha producido un flanco de subida o
bajada en la seal clk.

4.19 DISEO DE CIRCUITOS COMBINACIONALES CON VHDL


En esta seccin, de diseo de circuitos combinacionales, aparte de
disear circuitos, se profundiza VHDL estudiando nuevas caractersticas.
Un circuito combinacional tiene las siguientes caractersticas:
1. Sus salidas son funcin o dependen exclusivamente del valor de
sus entradas.
2. No tiene caminos de retroalimentacin.
3. No tiene elementos de memoria.
Para implementar circuitos combinaciones mediante VHDL, hay dos
caminos, el uno es la utilizacin de cdigo concurrente y el otro es
mediante cdigo secuencial, depende de la complejidad del circuito
utilizar el uno o el otro, si el circuito es sencillo el cdigo concurrente es el
ms adecuado, sin embargo, si el circuito es complejo el cdigo
secuencial es mejor.
Para escribir cdigo concurrente (paralelo) se pueden utilizar operadores
o declaraciones como se indica a continuacin.
238
1. Operadores.
2. Las declaraciones.
WHEN-ELSE.
WITH-SELECT-WHEN.
GENERATE.
BLOCK

4.20 IMPLEMENTACIN DE CIRCUITOS COMBINACIONALES CON


OPERADORES
En VHDL los operadores son utilizados para escribir cdigo concurrente
en forma bsica, en general, los operadores se utilizan para escribir las
ecuaciones booleanas que describen el funcionamiento de un circuito.
El funcionamiento de un circuito est especificado en su arquitectura, por
lo tanto, es necesario primero saber cmo se declara una arquitectura.

4.21 DECLARACION DE ARQUITECTURA


Para declarar una arquitectura se debe seguir la siguiente estructura:

ARCHITECTURE nombre_arquitectura OF nombre_entidad IS


Declaraciones
BEGIN
Cdigo;
END nombre_arquitectura;

Las palabras en maysculas y con negrillas son palabras reservadas.


ARCHITECTURE identifica el inicio de la declaracin de una arquitectura
y es la primera palabra que se debe escribir al declarar una arquitectura.
239
nombre_arquitectura es el nombre de la arquitectura. nombre_entidad es
el nombre de la entidad con la cual est relacionada la arquitectura.
Declaraciones, es opcional, y son las declaraciones de por ejemplo de
seales y constantes que sean requeridas por el cdigo de la arquitectura.
BEGIN indica el inicio del cdigo (el programa). Cdigo es el programa
que describe el funcionamiento del circuito. END indica el final de la
arquitectura.
Es importante indicar que el nombre de la arquitectura puede ser el mismo
nombre de la entidad con la cual est relacionada. Como hay diferentes
formas de describir cmo trabaja, como funciona, un mismo circuito, es
posible tambin tener ms de una arquitectura relacionada a una misma
entidad.

Ejemplo 4.18
Utilizando operadores disee una puerta AND de dos entradas, utilice
Quartus II y el entrenador DE2 de altera para implementar este circuito.
El diagrama de una puerta AND de dos entradas se muestra en la figura
4.8, las entradas estn identificadas con los nombres a y b y la salida con
el nombre f.

a puerta_y f

Figura 4.8. Diagrama de una puerta AND.

La declaracin de entidad y arquitectura es la siguiente:


240
-- Declaracin de la entidad
entity puerta_y is
port( a, b:in bit;
f: out bit);
end puerta_y;
-- Declaracin de la arquitectura
architecture apy of puerta_y is
begin
f<= a and b;
end apy;

Ntese que en la arquitectura la ecuacin booleana: f<= a and b describe


el funcionamiento de la puerta AND, en este caso el operador lgico AND
se ha utilizado para escribir el cdigo de la arquitectura.
La ecuacin booleana indica que la operacin lgica and entre las seales
a y b es asignada (<=) a la seal de salida f.
En la figura 4.9 se muestra el programa con la declaracin de la entidad y
la arquitectura escrito en Quartus II.

241
Figura 4.9. Programa para la puerta AND en Quartus II.

Para implementar esta puerta con Quartus II se crea el proyecto


denominado: puerta_y siguiendo los pasos indicados en el captulo:
introduccin a Quartus II, el nombre de la entidad de ms alto nivel que
debe escribirse en el proyecto debe ser el mismo nombre de la primera
entidad que se escriba en el programa (para este caso el proyecto y la
entidad se llaman puerta_y), por esto, es buena prctica escribir con el
mismo nombre al proyecto y a la entidad de ms alto nivel cuando se est
creando el proyecto.
Como se va a implementar la puerta AND en el entrenador DE2 de Altera,
en la ventana de seleccin de la familia del FPGA se debe seleccionar el
CICLON II (DE2 trabaja con el cicln II), y el dispositivo de esa familia que
se debe seleccionar es el que tiene la serie: EP2C35F672C6 (este
nmero esta sobre el chip ciclon II del entrenador DE2 o en las hojas
tcnicas del DE2).
La simulacin se indica en la figura 4.10, como se puede ver cuando a y
b juntas valen 1 lgico la salida vale tambin 1 lgico, para el resto de los
caso la salida es o lgico.

242
Figura 4.10. Simulacin de la puerta AND.

Para programar el FPGA disponible en el entrenador DE2 de Altera, se


procede de la siguiente manera:
1. Con la informacin de la hoja tcnica de distribucin de los pines,
switchs y leds del DE2 (una parte se muestra en la tabla 4.8), se
seleccionan los switchs que se van a conectar a las entradas a y b
de la puerta, as como, el led que se va a conectar a la salida f de
la puerta and.
2. En la barra del men de la ventana principal de Quartus II se
selecciona Assignments/ pin planner y aparece la ventana que se
indica en la figura 4.9.

Se clickea en la columna: location a la altura de una de las seales (el


rectngulo rojo indica este punto) que se encuentran en la parte
inferior de esta ventana y aparece la ventana que se muestra en la
figura 4.11, en esta ventana se seleccionan los pines del FPGA.

243
Figura 4.9.

Figura 4.11. Ventana de pin planner.

To Location
W[0] PIN_N25
SW[1] PIN_N26
SW[2] PIN_P25
SW[3] PIN_AE14
SW[4] PIN_AF14
SW[5] PIN_AD13
SW[6] PIN_AC13
KEY[3] PIN_W26
LEDR[0] PIN_AE23
LEDR[1] PIN_AF23
LEDR[2] PIN_AB21
244
LEDR[3] PIN_AC22
LEDR[4] PIN_AD22
LEDR[5] PIN_AD23
LEDR[6] PIN_AD21
Tabla 4.8. Distribucin de los pines en el DE2.

Figura 4.12. Asignacin de pines en el FPGA.

Por ejemplo de la informacin de la tabla 4.8, al PIN_N26 del FPGA se le


asigna la entrada b y el switch (sw[1]) conectado a ese pin en el
entrenador DE2. El PIN_N25 se asigna a la entrada a y el switch
conectado a ese pin en el entrenador DE2 es el sw[2] finalmente al
PIN_AE23 del FPGA se asigna a la salida f, este pin est conectado el led
rojo denominado LEDR[0] en el entrenador DE2.
Una vez terminado de asignar los switch y leds se compila otra vez y se
procede a programar el FPGA, para llevar a cabo esto, en el men de la
ventana principal de Quartus II se selecciona Tool/Programmer y aparece
la ventana que se muestra en la figura 4.13.

245
Figura 4.13. Ventana de programacin.

Figura 4.14. Ventana Setup

246
Si en lugar de la figura 4.13 aparece la figura 4.14 (la figura 4.13 contiene
la pestaa: USB-Blaster y la figura 4.14 tiene la pestaa: no hardware)
significa que no est conectado el DE2 a la computadora o que el USB-
Blaster no ha sido reconocido, en cualquier caso, se procede de la
siguiente manera: se clickea sobre la pestaa: hardware settings de la
figura 4.14 y aparece la ventana: hardware setup, que se indica en la
figura 4.15, all se clickea sobre la pestaa: no hardware, se selecciona
USB-Blaster y se tiene la ventana de la figura 4.13.

Figura 4.15. Ventana en la que consta el USB-Blaster.

Se clickea sobre el botn: star que se encuentra en la figura 4.16 y el


proceso de programacin del FPGA inicia como muestra la figura 4.16,
cuando en la pestaa: progess, se completa al 100% el FPGA est
programado y listo para ser utilizado.

Figura 4.16. FPGA programndose.

4. 22 OPERADORES LOGICOS
247
Los operadores lgicos que se utilizan para escribir el cdigo de una
arquitectura mediante ecuaciones booleanas para circuitos
combinacionales son:
1. AND
2. OR
3. NAND
4. NOR
5. XOR
6. XNOR
7. NOT
La prioridad en la que se realizan las operaciones de los operadores
lgicos es la siguiente:
1) Expresiones entre parntesis
2) Complementos
3) Funcin AND
4) Funcin OR

Los complementos o negacin tienen la ms amplia prioridad y el cdigo


que se encuentra entre parntesis es el primero que se ejecuta, si hay
varios parntesis se ejecutan los parntesis de izquierda a derecha y
desde los parntesis ms interno. Las operaciones de igual prioridad se
ejecutan de izquierda a derecha.
Ejemplo 4.19.
Disee un multiplexor de 4 a 1 mediante operadores lgicos e
implemntelo en el entrenador DE2 de Altera.
El diagrama de bloques de un multiplexor (mux) de 4 a 1 se muestra en la
figura 4.14, el dispositivo tiene dos lneas de seleccin S1 y S0. S1 es la
variable ms significativa y S0 es la menos significativa, las cuatro
entradas de datos son: A, B, C, D, A. A es la variable menos significativa y
248
D la ms significativa, la nica salida es y. La tabla 4.9 muestra el
funcionamiento del multiplexor.

A
0
y
B
1 C

D
2

S1 S0S0
Figura 4.17. Diagrama de bloques de un multiplexor de cuatro a uno.

La ecuacin booleana de la salida es: y= (/s0 /s1)A + (/s0 s1)C + (s0 /s1)B
+ (s0 s1)D, que escrita con los operadores lgicos de VHDL queda: y <=
(A AND NOT s1 AND NOT s0) OR (B AND NOT s1 AND s0) OR (C
AND s1 AND NOT s0) OR (D AND s1 AND s0).

Tabla 4.9. Tabla de verdad de un multiplexor de cuatro a uno.

Las declaraciones de librera, entidad y arquitectura se indica a


continuacin.

249
LIBRARY ieee;
USE ieee.std_logic_1164.all;
---------------------------------------------------------------------------------------------------
---
ENTITY mux IS
PORT ( a, b, c, d, s0, s1: IN STD_LOGIC;
y: OUT STD_LOGIC);
END mux;
--------------------------------------------------------------------------------------------------
----
ARCHITECTURE amux_booleana OF mux IS
BEGIN
y <= (A AND NOT s1 AND NOT s0) OR (B AND NOT s1 AND s0)
OR
(C AND s1 AND NOT s0) OR (D AND s1 AND s0);
END amux_booleana;

Para implementar este mux con el FPGA del entrenador DE2 de Altera se
procede igual que en el ejemplo anterior, en Quartus II se crea un
proyecto nuevo mediante el asistente para nuevo proyecto, teniendo la
precaucin de poner el nombre de la entidad de ms alto nivel con el
nombre de: mux, que es el nombre de la entidad en la codificacin de
VHDL, se selecciona el ciclon II y dentro de este se selecciona el FPGA:
EP2C35F672C6 disponible en el DE2.
Luego en el men principal se selecciona New y en la ventana que
aparece se selecciona File VHDL y aparece la ventana en donde se
escribe el cdigo del multiplexor, se compila y una vez compilado se
simula como se indic en el captulo denominado introduccin Quartus II.
Las formas de onda de la simulacin con Quartus II se muestran en la
figura 4.18. Como se puede ver en la figura 4.18 el multiplexor trabaja en
forma correcta, selecciona cada una de las entradas en funcin del cdigo
de las lneas de seleccin, por ejemplo cuando las lneas de seleccin
tienen las dos el valor 00 lgico la lnea de entrada que se selecciona es
la entrada a.

250
Figura 4.18. Simulacin del mux.

Una vez comprobado que el mux trabaja a la perfeccin se procede a


programar el FPGA del DE2. Se seleccionan los switchs que van a estar
conectados a las entradas: a, b, c, d del mux y a los pines del FPGA, la
tabla 4.10 muestra esta asignacin, estos switch se encuentran
localizados en el extremo derecho del DE2.

Switch DE2 Location FPGA Seal de entrada


SW[0] PIN_N25 a

SW[1] PIN_N26 b

SW[2] PIN_P25 c

SW[3] PIN_AE14 d
Tabla 4.10. Asignacin de switchs y pines del DE2.

251
Con la finalidad de distinguir de mejor manera los switch asignados a las
entradas y a lneas de seleccin del mux se seleccionan los switch del
extremo izquierdo del DE2, para conectar a las lneas de seleccin del
mux como se indica en la tabla 4.11.

Switch DE2 Location FPGA Seal de seleccin


SW[16] PIN_V1 s0
SW[17] PIN_V2 s1
Tabla 4.11. Asignacin de switchs a las lneas de seleccin del mux.

El led seleccionado para conectar a la salida y del mux se muestra en la


tabla 4.12.

Led del DE2 Location FPGA Seal de salida


LEDR[1] PIN_AF23 y
Tabla 4.12. Asignacin del Led a la salida y del mux.

Se procede a planear los pines en el FPGA, para esto en el men


principal de la ventana de Quartus II se selecciona: Assignments/ pin
planner y aparece la ventana que se indica en la figura 4.19, en la
columna Location se procedi a seleccionar los switchs y pines como se
indican en las tablas: 4.10, 4.11, 4.12.
Para ver el circuito lgico del multiplexor diseado se selecciona en el
men de la ventana principal de Quartus II: Tool/Netlist Viewers/RTL
Viewer y aparece la ventana RTL Viewer que contiene el circuito, la figura
4.20 muestra el circuito.

252
Tabla 4.19. Asignacin de los pines del FPGA.

253
Figura 4.20. Circuito del multiplexor.

4.23 IMPLEMENTACIN DE CIRCUITOS COMBINACIONALES CON


DECLARACIONES
Los circuitos combinacionales pueden ser diseados con declaraciones
del tipo WHEN ELSE o WITH SELECT WHEN.

4.23.1 LA DECLARACION WHEN-ELSE


Para escribir cdigo concurrente con las declaraciones WHEN-ELSE, se
debe seguir la siguiente sintaxis:

Asignacin WHEN condicin ELSE


Asignacin WHEN condicin ELSE
..;

Asignacin, hace referencia al valor que se va a asignar a alguna seal


cuando (when) se cumpla o se cumplan las condiciones indicadas en
condicin.
254
Ejemplo 4.20
Utilice la declaracin WHEN-ELSE para asignarle un valor 1 lgico a una
seal S, cuando las seales a y b son verdaderas. Para cualquier otro
valor de a y b asigne a S un 0 lgico.

S<= 1 WHEN (a=1 and b=1) else


0;
Ejemplo 4.21
Utilice la declaracin WHEN-ELSE para asignarle el vector 1001 a una
seal S, cuando las seales a y b tienen valores de 1 o 0
respectivamente. Si a y b tienen un valor de 0 asigne a S el vector 111,
para cualquier otro valor de a y b asigne a S el vector 000.

S <= "1001" WHEN (a='1' OR b='0') ELSE


"111" WHEN (a='0' and b='0') ELSE
"000;

4.23.2 LA DECLARACION WITH-SELECT-WHEN


Para escribir cdigo concurrente con las declaraciones WITH - SELECT -
WHEN, se debe seguir la siguiente sintaxis:

WITH identificador SELECT


Asignacin WHEN valor,
Asignacin WHEN valor,

255
...;
Asignacin tiene el mismo significado que en WHEN-ELSE, valor es el
valor o valores que tiene el identificador.
Valor puede ser un solo valor, un rango de valores en cuyo caso se
indicara como: valor1 to valor2, esto es aplicable solo en el caso de datos
tipo enumerados. O puede ser: valor1 o valor2 o valor3 ovalorn.
Entonces WHEN puede tener alguna de las tres formas siguientes:

WHEN valor un solo valor.


WHEN valor1 to valor2 para un rango de valores (solo tipo
enumerados).
WHEN valor1 | valor2 |...| valorn para valor1 o valor2 ovalorn.

Ejemplo 4.22
Utilice la declaracin WITH-SELECT-WHEN para asignarle un valor 1
lgico a una seal S, cuando las seales a y b son verdaderas. Para
cualquier otro valor de a y b asigne a S un 0 lgico.
A las seales a y b se les asigna el vector V, es decir, V(1)V(0)=ab, con la
finalidad de tener una sola seal, el identificador.
WITH V SELECT
S <= 1 WHEN 11, -- a S se asigna 1 cuando V=11.
0 WHEN OTHERS,- -- a S se asigna 0 cuando V no es igual a 11.

Ejemplo 4.23
Utilice la declaracin WITH-SELECT-WHEN para asignarle el vector 1001
a una seal S, cuando las seales a y b tienen valores de 1 o 0
respectivamente. Si a y b tienen un valor de 0 asigne a S el vector 111,
para cualquier otro valor de a y b asigne a S el vector 000.
256
A las seales a y b se les asigna el vector V, es decir, V(1)V(0)=ab, con la
finalidad de tener una sola seal, el identificador

WITH V SELECT
S<= "1001" WHEN 10,
"111" WHEN 00,
000 WHEN OTHERS;

Ejemplo 4.24.
Disee el multiplexor del ejemplo 4.16, con la declaracin WHEN-ELSE.

LIBRARY ieee;
USE ieee.std_logic_1164.all;
---------------------------------------------------------------------------------------------------
---
ENTITY mux IS
PORT ( a, b, c, d, s0, s1: IN STD_LOGIC;
y: OUT STD_LOGIC);
END mux;
--------------------------------------------------------------------------------------------------
----
ARCHITECTURE amux_booleana OF mux IS
BEGIN

y <= a WHEN (s1= 0 AND s0= 0 ELSE


b WHEN (s1= 0 AND s0= 0 ELSE
c WHEN (s1= 0 AND s0= 0 ELSE
d;
END amux_booleana;

Ejemplo 4.25.
257
Disee el multiplexor del ejemplo 4.24, con la declaracin WHEN-ELSE,
pero las lneas de seleccin S1 y S0 asuma que es el vector selec.

LIBRARY ieee;
USE ieee.std_logic_1164.all;
---------------------------------------------------------------------------------------------------
---
ENTITY mux IS
PORT ( a, b, c, d: IN STD_LOGIC;
selec: IN STD_LOGIC_VECTOR ( 1 DOWNTO 0);
y: OUT STD_LOGIC);
END mux;
--------------------------------------------------------------------------------------------------
----
ARCHITECTURE amux_booleana OF mux IS
BEGIN

y <= a WHEN (selec=00) ELSE


b WHEN (selec=01) ELSE
c WHEN (selec=10) ELSE
d;
END amux_booleana;

Ejemplo 4.26
Disee el multiplexor del ejemplo 4.24, con la declaracin WHEN-ELSE,
pero las lneas de seleccin S1 y S0 asuma que es un numero entero
selec.

LIBRARY ieee;
USE ieee.std_logic_1164.all;
---------------------------------------------------------------------------------------------------
---
ENTITY mux IS
PORT ( a, b, c, d: IN STD_LOGIC;
258
selec: IN INTEGER RANGE ( 0 DOWNTO 3);
y: OUT STD_LOGIC);
END mux;
--------------------------------------------------------------------------------------------------
----
ARCHITECTURE amux_booleana OF mux IS
BEGIN

y <= a WHEN selec= 0 ELSE


b WHEN selec= 1 ELSE
c WHEN selec= 2 ELSE
d;
END amux_booleana;

Ejemplo 4.27
Disee el multiplexor del ejemplo 4.24, con la declaracin WITH-SELECT-
WHEN.
A las lneas de seleccin S1 y S0 se les denomina el vector selec.

LIBRARY ieee;
USE ieee.std_logic_1164.all;
---------------------------------------------------------------------------------------------------
---
ENTITY mux IS
PORT ( a, b, c, d, s0, s1: IN STD_LOGIC;
selec: IN STD_LOGIC_VECTOR ( 1 DOWNTO 0);
y: OUT STD_LOGIC);
END mux;
--------------------------------------------------------------------------------------------------
----
ARCHITECTURE amux_booleana OF mux IS
BEGIN
WITH selec SELECT
y <= a WHEN selec= 00,

259
b WHEN selec= 01 ,
c WHEN selec= 10,
d WHEN OTHERS; -- es obligatorio utilizar OTHERS,
no se puede usar : when selec=11.
END amux_booleana;

Ejemplo 4.28
Disee el multiplexor del ejemplo 4.24, con la declaracin WITH-SELECT-
WHEN.
A las lneas de seleccin S1 y S0 tratelas como nmeros enteros.

LIBRARY ieee;
USE ieee.std_logic_1164.all;
---------------------------------------------------------------------------------------------------
---
ENTITY mux IS
PORT ( a, b, c, d: IN STD_LOGIC;
selec: IN INTEGER RANGE ( 0 TO 3);
y: OUT STD_LOGIC);
END mux;
--------------------------------------------------------------------------------------------------
----
ARCHITECTURE amux_booleana OF mux IS
BEGIN
WITH selec SELECT
y <= a WHEN selec= 0,
b WHEN selec= 1 ,
c WHEN selec= 2,
d when OTHERS;
END amux_booleana;

260
4.24 DISEO DE CIRCUITOS SECUENCIALES CON VHDL
Los circuitos secuenciales se caracterizan por realizar actividades en
forma repetitiva (secuencial) al pasar por un nmero de estados finitos y
tienen las siguientes caractersticas:
1. Tienen caminos de retroalimentacin.
2. Tienen elementos de memoria.
3. Sus salidas dependen no solo del valor de las entradas sino
tambin de los valores que estuvieron presentes en las entradas.
A pesar de que VHDL es un cdigo esencialmente concurrente, sin
embargo es posible escribir cdigo secuencial siempre y cuando este est
dentro de un: proceso, procedimiento o una funcin.
El cdigo secuencial en VHDL se escribe utilizando las siguientes
sentencias: IF, WAIT, CASE, o LOOP.
Para circuitos secuenciales interesa ms escribir cdigo secuencial dentro
de un proceso dejando las funciones y procedimientos para sistemas
digitales mucho ms grandes.

4.24.1 PROCESO
Un proceso denominado PROCESS contiene cdigo secuencial, cdigo
que se ejecuta lnea por lnea secuencialmente (durante cada periodo del
reloj, en caso de que el circuito tenga reloj, la sintaxis es la que se
muestra a continuacin:

Nombre: PROCESS (lista sensitiva)


Declaracin de variables
BEGIN
Cdigo secuencial;
END PROCESS nombre;
261
Nombre, es el nombre que se le asigne al proceso, no es obligatorio pero
si un programa tiene varios procesos el nombre permite identificar a cada
proceso.
La lista sensitiva o sensible contiene una lista de nombres de seales, su
importancia est en que cada vez que alguna de estas seales cambie de
valor lgico el proceso se ejecuta, es decir, si las seales de la lista
sensitiva no cambian el proceso no se ejecuta. El proceso no tiene una
lista sensitiva cundo se utiliza WAITen el proceso. Entre BEGIN y END
PROCESS se encuentra el cuerpo o cdigo del proceso.
Las seales, las variables as como las declaraciones IF, WAIT, CASE, o
LOOP son utilizadas continuamente, cuando se escribe cdigo secuencial
en VHDL, por lo tanto es necesario tener por lo menos un conocimiento
bsico sobre estos temas.

4.24.2 SEALES Y VARIABLES


Una seal se declara en la seccin declarativa de una entidad, una
arquitectura o un paquete, es global y por lo tanto puede ser invocada
desde cualquier parte del programa, en otras palabras, es vista desde
cualquier lugar de un programa en VHDL.
Por el contrario una variable es local y debe ser escrita en la seccin de
declaracin de un cdigo secuencial como por ejemplo dentro de un
proceso, un procedimiento o una funcin. Una variable tiene valides solo
dentro de un process (proceso) proceso, procedure (procedimiento) o
funtcion (funcin), fuera de ellos simplemente no existe.
Si es necesario sacar el valor de una variable fuera de un proceso por
ejemplo hay que asignarle su valor a una seal.
En un process (proceso) una variable se actualiza inmediatamente, en la
siguiente lnea de cdigo esta lista con su nuevo valor, una seal no se

262
actualiza de inmediato sino solo al final de haber terminado su ciclo el
proceso.

4.24.3 DECLARACION IF
La declaracin IF solo puede estar dentro de un PROCESS, una
FUNCTION o un PROCEDURE. La sintaxis es la siguiente.

IF condiciones THEN asignaciones;


ELSIF condiciones THEN asignaciones;
...
ELSE asignaciones;
END IF;

Ejemplo 4.29
Describa lnea a lnea el siguiente cdigo.

1. IF (a=b) THEN z:="10110000";


2. ELSIF (a<b AND d ='0') THEN z:="01010101";
3. ELSE z:=(OTHERS =>'1');
En la primera lnea se pregunta si a=b, si esto es cierto, entonces se
asigna el valor 10110000 a la variable z. La segunda lnea se ejecuta
siempre que: a < b y d=0 y a z se asigna: 01010101. La tercera lnea se
ejecuta si las dos lneas de cdigo anteriores no se ejecutaron y se asigna
a z el valor 11111111.

4.24.4 DECLARACION CASE


263
Igual que IF, CASE se utilizada exclusivamente para cdigo secuencial, la
sintaxis es la siguiente:

CASE identificador IS
WHEN valor del identificador => asignaciones;
WHEN valor del identificador => asignaciones;
...
END CASE;

Ejemplo 4.29
Para el cdigo que se indica a continuacin explique cul es su funcin.

CASE seleccion IS
WHEN "000" => z<=a; w<=b;
WHEN "001" => z<=b; w<=c;
WHEN "111" => z<=b; w<=c;
WHEN OTHERS => z<="0000"; w<="0000";
END CASE;

CASE seleccion IS, inicia la declaracin de CASE, el identificador es


seleccin.
WHEN "000" => z<=a; w<=b; indica que cuando seleccin=000 a z se le
asigna a y w=b.

264
WHEN "001" => z<=b; w<=c; indica que cuando seleccin=001, a z se le
asina b y a w se asigna b.
WHEN "111" => z<=b; w<=k; indica que cuando seleccin= 111, a z se
asigna b y a w se asigna k.
WHEN OTHERS => z<="00000000"; w<="0000"; indica que para los otras
combinaciones de seleccin (cuando se utiliza CASE se debe
obligatoriamente probar todas las combinaciones de seleccin) a z se le
asigna el valor 00000000
END CASE; indica la terminacin de la declaracion de CASE.

Ejemplo 4.30
Disee un multiplexor de ejercicio 4.24 utilizando la declaracin IF.

LIBRARY ieee;
USE ieee.std_logic_1164.all;
---------------------------------------------------------------------------------------------------
---
ENTITY mux IS
PORT ( a, b, c, d: IN STD_LOGIC;
selec: IN STD_LOGIC_VECTOR( 1 DOWNTO 0);
y: OUT STD_LOGIC);
END mux;
--------------------------------------------------------------------------------------------------
----
ARCHITECTURE amux_booleana OF mux IS

265
BEGIN
PROCESS(select)
BEGIN
IF (select=00) THEN y<= a;
ELSIF (select=01) THEN y<= b;
ELSIF (select=10) THEN y<= c;
ELSE
y<= d;
END IF;
END PROCESS;
END amux_booleana;

Ejemplo 4.31
Disee el multiplexor dl ejercicio 4.24 utilizando la declaracin IF y las
lneas de seleccin del mux deben ser declaradas como enteros.

LIBRARY ieee;
USE ieee.std_logic_1164.all;
---------------------------------------------------------------------------------------------------
---
ENTITY mux IS
PORT ( a, b, c, d: IN STD_LOGIC;
selec: IN INTEGER RANGE 0 TO 3;
y: OUT STD_LOGIC);
266
END mux;
--------------------------------------------------------------------------------------------------
----
ARCHITECTURE amux_booleana OF mux IS
BEGIN
PROCESS(select)
BEGIN
IF (select= 0) THEN y<= a;
ELSIF (select=1) THEN y<= b;
ELSIF (select=2) THEN y<= c;
ELSE
y<= d;
END IF;
END PROCESS;
END amux_booleana;

La simulacin con Quartus II del multiplexor de este ejemplo se muestra


en la figura 4.21, y el la figura 4.22 se muestra el circuito que genera esta
misma herramienta.

267
Figura 4.21. Simulacin del multiplexor con Quartus II.

Figura 4.22. Circuito del multiplexor generado por Quartus II.

Ejemplo 4.31

268
Disee el multiplexor del ejercicio 4.24 utilizando la declaracin CASE y
las lneas de seleccin del mux deben ser declaradas como enteros.

LIBRARY ieee;
USE ieee.std_logic_1164.all;
---------------------------------------------------------------------------------------------------
---
ENTITY mux IS
PORT ( a, b, c, d: IN STD_LOGIC;
selec: IN INTEGER RANGE( 0 TO 3);
y: OUT STD_LOGIC);
END mux;
--------------------------------------------------------------------------------------------------
----
ARCHITECTURE amux_booleana OF mux IS
BEGIN
PROCESS (select)
BEGIN
CASE select IS
WHEN 0 => y<= a;
WHEN 1 => y<= b;
WHEN 2 => y<= c;
WHEN OTHERS => y<= d;
END CASE;

269
END PROCESS;
END amux_booleana;

Ejemplo 4.32
Disee un flip flop tipo D, que tiene una sola entrada la D a parte del
reloj (CLK), simule utilizando Quartus II e indique el circuito obtenido.

LIBRARY ieee;
USE ieee.std_logic_1164.all;
---------------------------------------------------------------------------------------------------
---
ENTITY ff IS
PORT (D, CLK: IN STD_LOGIC;
Q: OUT STD_LOGIC);
END ff;
--------------------------------------------------------------------------------------------------
----
ARCHITECTURE aff OF ff IS
BEGIN
PROCESS(CLK)
BEGIN
IF (CLKevent AND CLK=1) THEN Q<= D;
END IF;
END PROCESS;

270
END aff;

La figura 4.23 muestra la simulacin del flip-flop tipo D en Quartus II.

Figura 4.23. Simulacin del flip-flop tipo D.

La figura 4.24 muestra el circuitodel flip-flop D generado por Quartus II.

Figura 4.24. Circuito del flip-flop.

Ejemplo 4.33

271
Utilizando CASE disee un flip flop tipo D, que tiene las entradas D, CLK
y una seal de RESET, cuando RESET=0 Q=D y cuando RESET=1 la
salida Q=0. Simule utilizando Quartus II e indique el circuito obtenido.

LIBRARY ieee;
USE ieee.std_logic_1164.all;
---------------------------------------------------------------------------------------------------
---
ENTITY ff IS
PORT (D, CLK, RESET: IN STD_LOGIC;
Q: OUT STD_LOGIC);
END ff;
--------------------------------------------------------------------------------------------------
----
ARCHITECTURE aff OF ff IS
BEGIN
PROCESS(CLK, RESET)
BEGIN
CASE RESET IS
WHEN '0' => IF (CLK'event AND CLK= '1')THEN Q<=D;
END IF;
WHEN OTHERS => NULL;
END PROCESS;
END aff;

272
La figura 4.25 muestra la simulacin obtenida con Quartus II yla figura
4.26 muestra el circuito generado con la misma herramienta.

Figura 4.25. Simulacin del fli-flop D.

Figura 4.26. Circuito obtenido con Quartus II.

4.24.4 DECLARACION WAIT


A diferencia de IF, CASE, LOOP, WAIT no requiere de un proceso con
lista sensitiva, su funcionamiento es similar a IF, existen tres formas de
WAIT y su sintaxis es la siguiente.

WAIT UNTIL condicin que una seal debe cumplir;


WAIT ON seal1, seal2, .., sealn;
273
WAIT FOR tiempo;

WAIT UNTIL, espera hasta que se cumpla la condicin en la seal que


est a continuacin de UNTIL para ejecutar el proceso.

Ejemplo 4.35
En cada lnea del cdigo siguiente escriba un comentario que aclare lo
que hace el programa.

PROCESS inicia el proceso y no tiene una lista sensitiva


BEGIN inicio del cuerpo del proceso.
WAIT UNTIL (clk'EVENT AND clk='1'); -- espera hasta que se produzca el
flanco de subida de la seal de reloj (CLK).
IF (reset='0') THEN pregunta si la seal reset=0.
Q <= 0; -- si reset=0, asigna 0 a Q.
ELSIF (clk'EVENT AND clk='1') THEN -- pregunta por el flanco de
subida de la seal de reloj (CLK).
Q <= D; -- asigna a Q el valor de D.
END IF; -- termina el IF.
END PROCESS; -- termina el proceso.

Ejemplo 4.36
Analice el siguiente cdigo y explique.

274
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity sumador_mal is
port
(
s1, s2 : in std_logic_vector(3 downto 0);
r : out std_logic_vector (3 downto 0)
);
end sumador_mal;
architecture a_sumador_mal of sumador_mal is
begin
process( s1)
begin
r<= s1+s2;
end process;
end a_sumador_mal;

El programa (cdigo) realiza la suma de dos nmeros (s1, s2) de 4 bits,


sin acarreo de entrada, en la seccin de declaracin de libreras se utiliza
el paquete std_logic_unsigned que permite tener a los vectores s1 y s2
como nmeros sin signo, si no se utiliza este paquete no se pueden
sumar s1 y s2.
En la declaracin de arquitectura, se utiliza un nico proceso, la lista
sensitiva est formada solo por s1, de acuerdo a como trabaja un process,
275
este se ejecuta cada vez que cualquiera de los elementos de la lista
sensitiva cambia, de acuerdo a esto, el proceso debe ejecutarse solo
cuando s1 cambia, si s1 no cambia y solo s2 cambia, el proceso no debe
ejecutarse.
Se utiliza Quartus II para simular este circuito y el resultado se muestra en
ala figura 4.27.

Figura 4.27. Resultado de la simulacin del sumador en Quartus II.

En la figura 4.27, se puede observar que en el intervalo en donde s1


cambia el proceso se ejecuta, por lo tanto, el sumador suma, sin embargo,
hay un resultado extrao en el tercer intervalo en donde s1 no cambia,
permanece en cero, y el proceso en ese intervalo no debera haberse
ejecutado, el resultado de la suma debi haberse mantenido con el ultimo
valor justo hasta cuando s1 cambio, es decir en uno, pero, el proceso se
ejecuta y suma los valores de s1 y s2.
Las advertencias que enva Quartus II son:
Warning (10492): VHDL Process Statement warning at
sumador_mal.vhd(22): signal "s2" is read inside the Process Statement
but isn't in the Process Statement's sensitivity list

276
En esta advertencia claramente se indica que s2 est dentro del proceso
y que debera estar en la lista sensitiva.
Se realiza una nueva simulacin, esta vez, se mantiene s1 en cero, sin
ningn cambio, pero el proceso igual se ejecuta como muestra la figura
4.28.

Figura 4.28. Resultado de la simulacin con s1 sin cambiar.


En la figura 4.29 se muestra el diagrama del sumador, tomado de Quartus
a travs de tool/ Netlist Viewers/ RTL Viewer, como era de esperarse el
diagrama es el de un sumador de cuatro bits.

Figura 4.29. Diagrama del sumador.

Ejemplo 4.37
En el cdigo del ejercicio 4.36, aada s2 a la lista sensitiva del process y
explique.
El programa queda como se indica a continuacin.

277
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity sumador_mal is
port
(
s1, s2 : in std_logic_vector(3 downto 0);
r : out std_logic_vector (3 downto 0)
);
end sumador_mal;
architecture a_sumador_mal of sumador_mal is

begin
process( s1, s2)
begin
r<= s1+s2;
end process;
end a_sumador_mal;

El resultado de la simulacin se muestra en la figura 4.29, como se puede


el resultado es exactamente como el de la fiura 4.29.
En la figura 430 se muestra el diagrama de este circuito tomado de
Quartus II.

278
Figura 4.29. Respuesta de la simulacin del sumador.

Las figura 4.24 y 4.22 son idnticas, representan al mismo sumador.


Estos ejemplos muestran el resultado extrao de la simulacin en donde
aparentemente el proceso se ejecuta, cuando no debera haberse
ejecutado, si la lista sensitiva no cambia.

Figura 4.30. Diagrama del sumador.

Estos dos ejemplos se simulan con ISE y los resultados son diferentes, el
proceso no se ejecuta cuando el process tiene solo s1 en su lista sensitiva
y s1 no cambia. Cuando se incluye a s2 en la lista sensitiva del process el
sumador suma cuando s1 y/o s2 cambian.

Ejemplo 4.37
El cdigo que se indica a continuacin es el de un comparador de cuatro
bits, tiene dos entradas s1 y s2 y una salida r, simule con Quartus II y
analice el resultado.

279
library ieee;
use ieee.std_logic_1164.all;
entity compara_mal is
port
( s1, s2 : in std_logic_vector(3 downto 0);
r : out std_logic);
end compara_mal;
architecture a_ compara_mal of compara_mal is
begin
process (s1, s2)
begin
if s1=s2 then r<='1';
end if;
end process;
end a_ compara_mal;

El resultado de la simulacin muestra la figura 4.31, como se puede ver la


salida del comparador es siempre uno independientemente de los valores
de las entradas s1 y s2.

Figura 4. 31. Resultado de la simulacin con Quartus II.

280
Para tener ms claro la razn de este resultado, se revisa el grafico del
circuito proporcionado por Quartus II y es el que se indica en la figura
4.27.
Del anlisis de esta figura 4.32 se concluye que la salida efectivamente
siempre est en uno y es una clara falla en del diseo del comparador.
Se revisa la codificacin y se nota que en la sentencia IF se indica
claramente cul debe ser el resultado cuando s1 es igual a s2, pero no se
indica que valor debe tener r cuando s1 es diferente de s2, lo que es un
claro error de diseo.

Figura 4.32. Grafico del circuito del comparador.

La arquitectura debe tener adems el valor de la salida r cuando s1 no es


igual a s2, es decir:

IF s1= s2 THEN
r<= 1;
ELSE
r<=0;
END IF;

El cdigo del comparador corregido se muestra a continuacin:

281
library ieee;
use ieee.std_logic_1164.all;
entity compara_mal is
port
(
s1, s2 : in std_logic_vector(3 downto 0);
r : out std_logic
);
end compara_mal;

architecture a_ compara_mal of compara_mal is


begin
process (s1, s2)
begin
if s1=s2 then
r<='1';
else
r<=0;
end if;
end process;
end a_ compara_mal;

282
El resultado de la simulacin se muestra en la figura 4.33.

Figura 4.33. Resultado de la simulacin del comparador.


Como muestra esta figura el resultado para la salida r del comparador es
la correcta, en conclusin, no se debe dejar el IF sin considerar el else.
El IF debe tener el lazo completo.

El diagrama del circuito del comparador se muestra en la figura 4.30.

Figura 4.34. Grafico del circuito comparador.

Ejemplo 4.37
El comparador del ejercicio anterior se ha modificado para que tenga tres
salidas denominadas: IGUAL. MENOR, MAYOR. MENOR significa que
s1 es menor que s2, MAYOR significa que s1 es mayor que s2 e IGUAL
significa que s1 es igual a S2.

283
El cdigo que se indica a continuacin es el propuesto para el comprador,
analice y corrija si es necesario, utilice Quartus II.

library ieee;
use ieee.std_logic_1164.all;
entity compara_mal is
port
(
s1, s2 : in std_logic_vector(3 downto 0);
IGUAL, MENOR, MAYOR : out std_logic0);
end compara_mal;
architecture a_ compara_mal of compara_mal is
begin
process (s1, s2)
begin
if s1=s2 then
IGUAL<='1';
elsif s1<s2 then
MENOR<='1';
else
MAYOR<='1';
end if;
end process;

284
end a_ compara_mal;

Se simula el cdigo y el resultado se muestra en la figura 4.35. Como


muestra la figura 4.35 la respuesta es que todas las salidas son iguales a
uno independientemente de los valores que tengan las entradas, en el
proceso de compilacin no se observ ningn problema de sintaxis siendo
la compilacin exitosa.

Figura 4.35. Resultado de la simulacin del comparador.

Como es buena estrategia cuando se tienen resultados extraos se


recure al grfico del circuito proporcionado por Quartus II, la figura 4.36
muestra este grfico.

Figura 4.36. Grafico del circuito comparador.


Segn el diagrama del circuito todas las salidas deben estar a un uno
lgico y claramente, se ve que hay una falla en el diseo.

285
En donde est el problema, en el diseo de este comparador, el lazo IF
est cerrado por lo tanto no es el mismo error que en el caso anterior. Sin
embargo analizando las salidas se observa que: solo una salida a la vez
se est encendiendo y no se dice que accin debe realizar el comparador
con las otras salidas, por ejemplo se indica que si s1=s2 entonces la
salida IGUAL debe ser igual a uno, pero respecto de MAYOR Y MENOR
no se indica que valores deben tener.
As que el primer paso es modificar el cdigo aumentando las lneas que
son necesarias, as, si s1=s2 entonces IGUAL=1 y adems se debe
indicar que MAYOR=0 y MENOR =0, se procede de igual manera para los
otros casos. El cdigo modificado se muestra a continuacin.

ibrary ieee;
use ieee.std_logic_1164.all;

entity SS is

port
(
s1, s2 : in std_logic_vector(3 downto 0);
IGUAL, MENOR, MAYOR : out std_logic
);
end SS;
architecture a_sumador_mal of SS is
begin
process (s1, s2)

286
begin
if s1=s2 then
igual<='1'; MAYOR<='0';
MENOR<='0';
elsif s1<s2 then
MENOR<='1'; igual<='0';
MAYOR<='0';
else
MAYOR<='1'; igual<='0';
MENOR<='0';
end if;
end process;
end a_sumador_mal;

La figura 4.37 muestra el diagrama del este circuito obtenido de Quartus


II. Debe notarse que cuando se declara exactamente cul es el valor de
las salidas el circuito sabe como actuar.

Figura 4.37. Circuito del comparador.

287
ls figura 4.38 muestra la simulacin de este circuito como puede verse las
seales de salida se encienden y apagan segn como sean sus entradas,
si son iguales o diferentes.

Figura 4.39. Resultado de la simulacin del circuito.

Ejemplo 4.38

Analice el siguiente programa indique que hace, simule con Quartus II y


obtenga el circuito.

LIBRARY ieee;
USE ieee.std_logic_1164.all;
---------------------------------------------------------------------------------------------------
---
ENTITY mux IS
PORT ( a, b, c, d: IN STD_LOGIC;
sele: IN INTEGER range (0 to 3);
y: OUT STD_LOGIC);

288
END mux;
--------------------------------------------------------------------------------------------------
----
ARCHITECTURE amux_booleana OF mux IS
BEGIN
PROCESS(sele)
BEGIN
IF (sele= 0) THEN y<= a;
ELSIF (sele=1) THEN y<= b;
ELSIF (sele=2) THEN y<= c;
ELSE
y<= d;
END IF;
END PROCESS;
END amux_booleana;

Cuando se compila el programa enva el siguiente aviso Quartus II: Error


(10500): VHDL syntax error at mux.vhd(6) near text ")"; expecting "!", or
"=>".
El programa es el mismo que el del ejercicio anterior solo que en la
declaracin de entidad se ha puesto entre parntesis el rango.
Quitado los parntesis la compilacin se ejecuta sin problemas, la figura
4.40 muestra el grafico del circuito.

289
Figura 4.40. Diagrama del circuito.

Ejemplo 4.30
Escriba y enumere las palabras reservadas de VHDL.
La siguiente es una lista de las palabras reservadas que utiliza VHDL
para construir sus unidades de diseo.
1. Abs
2. Access
3. After
4. Alias
5. all
6. and
7. architecture
8. array
9. assert
10. attribute
11. begin
12. block
13. body

290
14. buffer
15. bus
16. case
17. component
18. configuration
19. constant
20. disconnect
21. downto
22. else
23. elsif
24. end
25. entit y
26. exit
27. file
28. for
29. function
30. generate
31. generic
32. guarded
33. if
34. impure
35. in
36. inertial
37. inout
38. is
39. label
40. library
41. linkage
42. literal
43. loop
44. map
45. mod
46. nand
291
47. new
48. next
49. nor
50. not
51. null
52. of
53. on
54. open
55. or
56. others
57. out
58. package
59. port
60. postponed
61. procedure
62. process
63. pure
64. range
65. record
66. register
67. reject
68. rem
69. report
70. return
71. rol
72. ror
73. select
74. severity
75. shared
76. signal
77. sla
78. sll.
79. sra..
292
80. srl.
81. subtype.
82. then.
83. to.
84. transport..
85. type.
86. unaffected.
87. units.
88. until .
89. use.
90. variable.
91. wait.
92. when.
93. while.
94. with.
95. xnor.
96. xor.

Ejemplo 4.49
Con ejemplos escriba como en VHDL se escriben nmeros, caracteres y
tiras de caracteres (strings).
En Vhdl los nmeros pueden ser enteros, reales, naturales y se pueden
escribir en diferentes bases, por ejemplo:
1. 2016, es un entero.
2. 2_016, es el mismo nmero entero anterior.
3. 56E7, es un entro.
4. 1.2, es un real.
5. 2.3E6, es un real.
6. 2#110011#, es un numero en base dos, porque inicia con: 2#, 2
identifica a la base dos y el smbolo # indica el inicio y fin del
nmero.
293
7. 2#11_00_11#, es el mismo nmero en base dos escrito en la lnea
anterior.
8. 16#4C#, es un nuero expresado en base 16.
9. a, es el carcter a, los caracteres van encerados entre apostrofes.
10. B, es el carcter B.
11. 0, es el carcter 0.
12. 1, es el nmero 1.
13. o, es el carcter o.
14. 0, es el nmero cero.
15. 2015, es un string, los string van encerados entre comillas.
16. 2#11_00_11#, es un string.
17. VHDL, es un string.
18. VHD_L, es un string diferente de: VHDL.
19. 11110000, es un string.
20. 1111_0000, es un string diferente de: 11110000.

Ejemplo 4.50
Que es un objeto en VHDL y cuantos tipos de objetos hay y cul de ellos
no puede ser sintetizado.
Un objeto es el nombre de un elemento con que mantiene el valor de un
tipo de dato especfico.
Hay cuatro tipos de objetos: seal (signal), variable (variable), constante
(constant), archivo (file).
El objeto que no puede ser sintetizado es el file.

Ejemplo 4.51
Indique tres diferencias entre una seal y una variable.
Una seal se le puede ver como un cable con memoria, algo parecido a
un latch, el smbolo de asignacin a una seal es <=, una variable, es un
294
valor y a ese valor por lo tanto no se le puede asociar una forma de onda,
su smbolo de asignaciones:=, y puede ser vista como una localidad de
memoria en donde se almacena temporalmente un valor. Una seal
dentro de un proceso no se actualiza inmediatamente, en cambio una
seal dentro de un proceso se actualiza de inmediato.

Ejemplo 4.52
Explique que es un alias en VHDL, indique un ejemplo.
Un alias, como su nombre indica, es un nombre alternativo para un objeto,
el propsito es dar mayor claridad y facilidad de lectura del cdigo.
Por ejemplo, se tiene un vector, llamado trama, con varios campos y se
desea que cada campo quede planamente identificado de acuerdo a la
funcin que cumple dentro de la trama, para conseguir este objetivo a
cada uno de los campos se puede hacer referencia con un alias, de tal
manera que las partes del vector queden claramente reconocibles.
En la tabla 6.4 se muestra la trama, cada campo de la trama y el nmero
de bits que integran cada campo.

Trama
Campo cabecera Campo datos Campo fin trama
7 6 5 4 3 2 1 0
Tabla 6.4. El vector trama y sus campos.

signal trama: std_logi_vector( 7 downto 0);


alias campo_cabecera: std_logi_vector( 1downto 0) is trama (7downto 6);
alias campo_datos: std_logi_vector( 3 downto 0) is trama (5 downto 2);

295
alias campo_fin_trama: std_logi_vector( 1downto 0) is trama (1 downto 0);

Como se puede notar los alias permiten identificar con claridad cada
campo y el cdigo es fcilmente entendible.

Ejemplo 4.53
Escriba la asignacin W<=10101010 de cuatro formas diferentes:
Las siguientes asignaciones para w son equivalentes:
W<=(1, 0, 1, 0,1, 0, 1, 0)
W<=(7 =>1, 6=> 0, 5=> 1, 4 => 0, 3 => 1, 2=> 0, 1=>1, 0=> 0);
W<= ( 7 5 3 =>1, 6 4 2 0 => 0);
W<= ( 7 5 3 =>1, others => 0);

Ejemplo 4.54
El siguiente dato de cuatro bits: 0100, explique de cuantas formas puede
ser interpretado.
Podran ser interpretados como un grupo de cuatro bits independientes,
es decir, podran ser los valores de cuatro seales.
Otra interpretacin es que podra representar al nmero 12 en caso de
que sea declarado como dato de tipo unsigned (sin signo).
Otra posible interpretacin es que represente al +4 suponiendo que fue
declarado como un dato de tipo signed, es decir, es un nmero que est
en complemento a dos y el bit ms a la izquierda es el bit de signo.

Ejemplo 4.55

296
Cul es la diferencia y similitud entre los paquetes: numeric_ std y
std_logic_arith.
Diferencias: std_logic_arith no es un estndar de lEEE, pero, numeric_ std
si es un estndar del IEEE.
Similitudes, los dos paquetes tienen fines similares, se utilizan para
realizar operaciones aritmticas.
std_logic_arith al igual que los paquetes: std_logic_unsigned y
std_logic_unsigned son incluidos en algunas herramientas EDA de
algunos vendedores y puestos en la librera IEEE.

Ejemplo 4.56
Es conveniente representar a una seal fsica como de tipo bit.
No, porque solo tendra dos valores posibles cero o uno, y una seal
puede tener otros valores (9 valores) como alta impedancia.

Ejemplo 4.57
A una seal de 4 bits con dos operaciones simples divida el valor de esta
seal para 4, la divisin no debe tener residuo.
La seal puede ser considerada como un vector de cuatro hits, con cuatro
bits, el nmero mximo que se puede representar es el 15, como la
divisin debe ser exacta, entonces, las divisiones permitidas son entre los
siguientes nmeros: 12/4=3, 8/4=2 y 4/4=1, en binario se tiene:
12 /4= 3; 1100/0100= 0011.
8/4=2; 1000/0100= 0010.
4/4=1; 0100/0100=0001.

297
Como se puede ver el resultado de la divisin siempre tiene los 2 bits ms
significativos del numerador que se convierten en los bits menos
significativos de la respuesta, por lo tanto, hay que tomar los dos bits ms
significativos del numerador y aadir dos bit 00 en la posicin ms
significativa de la respuesta.
Sea z el nmero y r la respuesta entonces: r<= 00 & z(3 downto 2)
realiza la divisin exacta de un numero de cuatro bits para cuatro.

298
EJERCICIOS PROPUESTOS

1. Explique que es un lenguaje de descripcin de hardware.

2. Indique cual es el significado de las siglas VHDL.

3. Porque VHDL es un estndar.

4. Cual fue el origen de VHDL.

5. Cules son las versiones de VHDL.

6. Defina a una entidad.

7. Escriba la sintaxis para declarar una entidad.

8. Declare la entidad para una puerta AND.

9. Las declaraciones de entidad para una puerta AND y OR podran

ser exactamente las mismas, explique.

10. Declare la entidad para un sumador medio de 8 bits.

11. Declare la entidad para un generador de paridad par de cuatro bits.

12. Declare la entidad para un decodificador de 4 a 16.

13. Explique que es un identificador.

14. Que caracteres no puede tener el nombre de un identificador.

15. Explique que es un puerto.

16. Explique que es el modo y el tipo de un puerto.

299
17. La siguiente expresin qu significado tiene: BIT_VECTOR( 8

DOWNTO 0).

18. Cul es el significado de la siguiente expresin BIT_VECTOR( 0

TO 8).

19. Cul es la diferencia entre las expresiones: BIT_VECTOR( 8

DOWNTO 0) y

20. BIT_VECTOR( 0 TO 8).

21. Explique la utilidad de una librera en VHDL.

22. Que contiene una librera en su interior.

23. Escriba las dos lneas de cdigo que son necesarias para hacer

visible una librera.

24. Indique las libreras que no son necesarias declarar.

25. Indique las libreras que deben declarase obligatoriamente para

poder utilizarlas.

26. Indique los paquetes que estn dentro de la librera IEEE.

27. Cul es la diferencia entre los paquetes std_logic y std_ulogic.

28. Para que se puede utilizar el paquete std_logic_signed.

29. Que tipos de datos pueden ser definidos por el usuario.

30. Que son los subtipos de datos, escriba un ejemplo.

300
31. Como puede identificar a una seal dentro de un circuito.

32. Cul es la diferencia entre una seal y una variable.

33. Explique que es un operador.

34. Enumere los operadores de asignacin.

35. Enumere los operadores lgicos.

36. Enumere los operadosre aritmticos.

37. Para que se utilizan los atributos de una seal.

38. Explique el atributo EVENT.

39. Explique el atributo QUIET.

40. Cules son las caractersticas de un circuito combinacional.

41. Explique la sintaxis de declaracin de una arquitectura.

42. Declare la arquitectura de un sumador medio.

43. Cree una tabla de verdad de cuatro variables de entrada y dos

salidas, e implemntela con operadores.

44. La tabla del ejercicio anterior implemente con la sentencia: WHEN

ELSE.

45. Diseo un decodificador de 4 a 1 con la sentencia WHEN-ELSE.

46. Disee un multiplexor de 2 a 1 para datos de 4 bits con la sentencia

WHEN-ELSE

301
47. Los cuatro ejercicios anteriores simule con Quartus II e implemente

en el entrenador DE2 de Altera.

48. Indique para que se utiliza la ventana pin planner de Quartus II.

49. Explique la sintaxis de la declaracin: WITH-SELECT-WHEN.

50. Explique las caractersticas de un circuito secuencial.

51. Explique que es un proceso (PROCESS).

52. Cuando un PROCESS no requiere una lista sensitiva.

53. Explique la sintaxis de: IF-ELSE.

54. Explique la sintaxis de: CASE.

55. Disee un fli-flop JK mediante IF-ELSE.

56. Didee un flip-flop tipo T con IF-ELSE.

57. Disee un multiplexor de 4 a 1 utilizando IF-ELSE.

58. Disee un contador de 4 bits, el contador debe tener una seal de

habilitacin.

59. Disee un buffer de tres estados.

60. Disee un circuito secuencial que obtenga el complemento a dos

de un numero de cuatro bits, los nmeros ingresan uno a uno y con

cada ciclo del reloj.

302
61. Disee un circuito secuencial sincrnico que controle dos motores,

los motores no deben estar ni encendidos ni apagados al mismo

tiempo, cada motor debe estar encendido el doble de tiempo que

este apagado.

62. Disee un generador de onda cuadrada, la frecuencia debe ser de

100 Khz y la amplitud de cinco voltios.

63. Disee un circuito secuencial sincrnico que genere el siguiente

cdigo: 0000-0011-0000-1100, en forma indefinida.

64. Disee un circuito secuencial sincrnico que detecte el cdigo

111011, sin traslapamiento.

65. Disee un circuito secuencial sincrnico que detecte el cdigo

111011, con traslapamiento.

66. Disee un contador binario de cuatro bits, el contador debe tener

una seal de control que permita incrementar o decrementar la

cuenta y una seal de reset que permita resetear asincrnicamente

el contador.

67. Se tiene una lnea de datos, se desea contar el nmero de unos

que llegan a esa lnea de datos. Disee un circuito si los bits llegan

303
uno a uno y con cada ciclo del reloj. Simule con quartus II y

obtenga el circuito.

68. Proponga un nuevo diseo para el circuito comparador del ejemplo

4.37, para esto declare fuera del process los valores iniciales

iguales a cero de las salidas del comparador. Simule con Quartus

II y obtenga el circuito.

304
Bibliografia

Volnei, A. (2004). Circuit Design and Simulation with VHDL. Cambridg,


Massachusetts: MIT Press.
Maxinez, J. Alcal, J. (2003). VHDL el arte de programar sistemas
digitales. Mexico: CECSA.
Chu, P. (2006). Rtl hardware design using VHDL. New Jersey: John Wiley
& Sons, Inc.
Brown, S. Vranesic, Z. (2006). Fundamentos de Lgica Digital con Diseo
VHDL. Mexico: Mc Graw Hill.

305
CAPITULO V

DISEO DE MQUINAS DE ESTADO ALGORTMICAS CON


VHDL

5.1 INTRODUCCIN A LOS SISTEMAS CONTROLADORES


DIGITALES
En los captulos anteriores se estudiaron los circuitos digitales
secuenciales, que junto con los circuitos combinacionales son las partes
pequeas pero fundamentales de un sistema digital. En general, un
sistema digital puede ser visto como constituido por dos grandes bloques
que interactan entre s, uno de ellos es el sistema controlador y el otro
es el subsistema (formado por circuitos combinacionales y o
secuenciales). El propsito de este captulo es el estudio del sistema
controlador.
Un sistema controlador, es un sistema secuencial normalmente
sincrnico, tiene seales de entrada y de salida, las seales de entrada
son procesadas por este sistema y en funcin de este procesamiento
genera las respectivas respuestas en las seales de salida. La figura 5.1
muestra un ejemplo de un sistema digital, all se puede ver: el sistema
controlador y los otros bloques constituyen el subsistema, a este
conjunto se le denomina: la particin funcional.
La seal de reloj (CLK) en un sistema secuencial sincrnico genera cada
intervalo de tiempo (cada periodo) en donde el sistema debe realizar
alguna o algunas actividades en forma sincrnica, es decir, la sincrona
temporal est dada por el reloj.
En la figura 5.1 las seales de entrada al sistema controlador son: S, R,
N, de estas, S y R son consideradas como las seales del mundo
exterior puesto que no son generadas por el subsistema y las seales
de salida son: LED, G, C y CLK.
306
El subsistema tiene dispositivos combinacionales y secuenciales como
los multiplexores, decodificadores, puertas lgicas, contadores, registros,
Flip-Flops, entre otros.
El sistema controlador de la figura 5.1 recibe en sus entradas bits de
informacin procesa esos bits y en respuesta a este procesamiento
genera los respectivos bits en sus salidas.

El sistema controlador es el encargado de dar las rdenes necesarias al


subsistema para que juntos, sistema controlador y subsistema trabajen
en forma armnica.

Figura 5.1 diagrama de bloques de un sistema digital.

5.2 DISEO DEL SISTEMA CONTROLADOR CON ASM


El diseo de un sistema controlador no es siempre una tarea simple,
sobre todo, en sistemas controladores digitales que tienen que coordinar
una gran cantidad de entras y salidas, la coordinacin entre las entradas
y salidas se establece a travs de un algoritmo a partir del cual se
construye el hardware del sistema controlador.

307
Se requiere, por lo tanto, de algn mtodo para elaborar algoritmos, uno
de ellos es el Algorithmic State Machine Chart (carta ASM) que es un
grfico con smbolos especiales que describe el funcionamiento de un
sistema, este diagrama fue desarrollado por Chris Clare. Otro tipo de
diagramas son los MDS (Mnemonic Documented State diagrams) que
son una generalizacin de los diagramas de estado.
En este libro se utilizan los diagramas ASM y el lenguaje de descripcin
de hardware para circuitos integrados de muy alta velocidad (VHDL) para
disear un sistema controlador. El hardware del sistema controlador es
un FPGA.

5.2.1 DIAGRAMAS ASM


Un diagrama ASM, se parece a un diagrama de flujo, pero mientras un
diagrama de flujo describe macro operaciones que no actan
directamente sobre el hardware, un diagrama ASM trabaja con seales
que acta directamente sobre el hardware (los circuitos).

Los smbolos que se utilizan para elaborar un diagrama ASM son:

1. El diamante.
2. El rectngulo.
3. El rectngulo con bordes curvos.

El diamante, es el smbolo de decisin, en su interior contiene el nombre


de una variable que representa a una entrada al sistema controlador y
tiene dos posibles valores verdadero o falso, si el valor de la variable es
verdadero toma un camino y si es falso toma el otro camino, se parece a
las instrucciones del tipo: IF (entrada) THEN (camino 1) ELSE (camino
2).
308
Figura 4.2. Smbolo para tomar una decisin.

El rectngulo representa a un estado cualesquiera del sistema


controlador, un estado en funcin del tiempo est representado por un
ciclo del reloj, el sistema controlador puede encender alguna(s) seal(es)
de salida(s) en cada estado, la figura 5.3 muestra un estado con su
respectiva simbologa.

Figura 5.3. Smbolo de un estado.

Como se ve en la figura 5.3 un estado debe tener un nombre, por


ejemplo a, un cdigo por ejemplo 1001, y las seales de salida que se
activen en ese estado, por ejemplo en la figura 5.3 a) X es la salida que
se enciende o activa en el estado a.
El rectngulo con las esquinas curvas, tiene la(s) seal(es) que debe(n)
encenderse o activarse en forma condicional o condicionada al valor de
una entrada, la figura 5.4 muestra las seales de salida que deben
encenderse si la seal de entrada X cumple alguna condicin, por lo

309
que trabaja con el smbolo de decisin que es el diamante. En la figura
5.4 por ejemplo si la entrada X es verdadera se enciende la seal de
salida W y si X es falsa se enciende la salida B.

B W

Figura 5.4. Salidas condicionales.

Un ejemplo de un diagrama ASM muestra la figura 5.5, en este


diagrama, en el estado a se pregunta por la entrada X, si es
verdadera enciende la salida W y si es falsa enciende la salida B, los
siguientes estados son los estados c y b.

Figura 5.5. Un ejemplo de diagrama ASM.

310
El nombre de un estado y su cdigo se suele escribir en diferentes
posiciones en el rectngulo que representa al estado, por ejemplo, una
forma es escribir el nombre del estado en la esquina superior izquierda
del rectngulo y fuera del l y el cdigo del estado se escribe en la
esquina superior derecha y afuera del rectngulo, como muestra la figura
5.6, RE es la seal que se activa en este estado a.

a 101

RE
Figura 5.6. Un estado con su nombre, su cdigo y la seal que se activa.

Otra lugar en donde se puede escribir el nombre del estado y su cdigo


es dentro del rectngulo, en este caso el nombre se escribe en la
esquina superior izquierda dentro del rectngulo y el cdigo se escribe
en la esquina superior derecha y tambin dentro del rectngulo como
muestra la figura 5.7, RE es la seal que se activa en este estado a. Si
solo se escribe el nombre del estado este va en la parte central superior
y dentro del rectngulo. Esta forma de ubicar el nombre de un estado y
su cdigo se utiliza en este libro.

a 101
RE
Figura 5.7. Un estado con su nombre, cdigo y seal que se activa.

Los nombres de los estados se acostumbra a escribir con letras


minsculas como por ejemplo: a, b, etc. Sin embargo el nombre de un
estado puede ser cualquier nombre por ejemplo: estado_1,
estado_de_reset, inicio, etc. Sin embargo, cuando a partir de un
311
diagrama ASM se va a escribir un programa o cdigo en VHDL los
nombres deben estar en concordancia con las reglas de VHDL para
escribir identificadores.
Se puede tambin realizar operaciones sobre registros o entre registros
en un estado, estas operaciones se especifican dentro del rectngulo
(estado) utilizando la simbologa de operaciones para registro, por
ejemplo si un registro A debe cargarse con el contenido de algn otro
registro B, simblicamente, esta operacin se representa de la manera
siguiente:

.
Si un registro C, por ejemplo, debe cargarse con un valor constante,
como, cero, simblicamente se representa de la manera siguiente:

.
El incremento de un registro se representa de la siguiente forma:

El decremento de un registro simblicamente es:

Ejemplo 5.1
Se pide disear una mquina que mida la reaccin del sentido de la
visin (los ojos) de un ser humano, para lleva a cabo esta actividad se
debe tomar en consideracin los siguientes requisitos de diseo.
La mquina (sistema) debe disponer de un switch de inicio, que debe ser
presionado por el usuario, para que la mquina est lista para iniciar su
funcionamiento, la forma como debe operar es la siguiente: el sistema
312
debe encender un led en cualquier momento y cuando el usuario se
percate que el led se encendi debe presionar el switch de reaccin tan
rpido como le sea posible, el sistema debe exhibir el tiempo que
transcurri entre el encendido del led y la presin del switch de reaccin
por parte del usuario.
Solucin: primero se debe realizar la particin funcional o diagrama de
bloques del sistema, aqu se debe especificar con claridad las seales
que entran al sistema controlador y las que el sistema controlador
genera, as como tambin, todos los subsistemas que requiera el
sistema controlador.
Primero se dibuja un bloque que represente al sistema controlador, los
otros bloques y dispositivos que se encuentran alrededor del sistema
controlador forman el subsistema, y todo este conjunto (sistema
controlador y subsistema) toma el nombre de particin funcional.
Cada seal ya sea de entrada o de salida debe tener un nombre que la
identifique, en la figura 5.8 la seal S representa al switch de inicio, R al
switch de reaccin que debe presionar el usuario, la seal LED enciende
el led y tambin activa el contador, N indica que se gener el tiempo
aleatorio y, C pone a cero el contador, CLK es el reloj del sistema y,
a,b,c son los nombres de los estados.
El diagrama ASM del sistema que mide la reaccin del sentido de la
visin se ve en la figura 5.9, la descripcin de este diagrama es la
siguiente: cuando la mquina se encuentra en el estado a, pregunta si
el usuario activo el switch de inicio S, si la respuesta es falsa se queda
esperando en el estado a hasta que el usuario presione el switch R.

313
Figura 5.8. Diagrama de la particin funcional.

Cuando la seal S es verdadera se activa o enciende la seal C en


forma condicional y el contador pone en cero su cuenta, la mquina va al
estado b y activa la seal G que es la que pone en funcionamiento el
generador de tiempo aleatorio y se queda en este estado (b) hasta el
momento en que el generador enciende la seal N que es la que indica
que se gener el tiempo aleatorio.
La mquina va al estado c y aqu enciende la seal LED que enciende
el diodo led que genera la seal luminosa que estaba esperando el
usuario para proceder a presionar el switch R, el sistema mide entonces
el tiempo que transcurri entre el encendido del led y la presin del
switch R, este tiempo es la medida de que tan rpido es el sentido de la
visin del usuario.

314
Del estado c la maquina regresa al estado a para iniciar de nuevo otra
medicin, debe notarse que la cuenta en el contador se mantiene hasta
que sea presionado el switch S de nuevo.
El generador aleatorio que en realidad es un seudo generador, puede ser
construido de diferentes maneras una de ellas es mediante dos
contadores que trabajan sus relojes a diferentes frecuencias. Las salidas
de los contadores alimentan a las entradas de un comparador y cuando
la cuenta de los 2 contadores se igualan se enciende la salida igual del
comparador y es esa seal la que indica que se ha generado un tiempo
aleatorio, en el ejemplo la seal N indica la generacin de un tiempo
aleatorio.

Figura 5.9. Diagrama ASM del medidor de reaccin.

315
La seal G activa el generador aleatorio mediante una operacin AND
(Y) entre la seal G y cada reloj de cada contador de la siguiente
manera: G. clk1, G. clk2. clk1 y clk2 son respectivamente los relojes de
los 2 contadores del generador aleatorio. Los contadores de dcadas, el
decodificador y display se pueden adquirir en forma de circuitos
integrados.

5.3 IMPLEMENTACION DE DIAGRAMAS ASM CON VHDL


Un diagrama ASM es un algoritmo de hardware, tiene un nmero finito
de estados, plenamente identificados, por los cuales un sistema
secuencial sincrnico debe pasar, en VHDL se puede identificar
plenamente a estos estados definindolos como un tipo particular de
datos, es decir, de tipo enumerados cuyos elementos son
exclusivamente los estados del diagrama ASM. La de declaracin de
estos datos enumerados es como se indica a continuacin:

TYPE estado IS (estado_0, estado_1, estado_2,estado_n);

En donde TYPE declara que estado es un tipo de dato enumerado y sus


miembros son todos los estados que contiene el diagrama ASM, en este
caso se supone que los nombres de los diferentes estados son: estado0,
estado_1,, estado_n. VHDL a cada estado le asigna un cdigo en
concordancia con el orden en que han sido escritos en la declaracin
TYPE, por ejemplo el estado0 tendr un cdigo (cero en binario), el
estado1 tendr otro cdigo (uno en binario) y as sucesivamente, el
nmero de bits que requiere cada estado depende del nmero de
estados que contenga el diagrama ASM, por ejemplo, si hay 4 estados
diferentes se necesitaran dos bits para cada estado y a cada estado se
asigna uno de los siguientes cdigos: 00, 01, 10 y 11. La relacin
matemtica entre el nmero de estados y los bits de cada estado est

316
dado por: 2n, el resultado de esta operacin da el nmero de estados
que se pueden codificar con n bits.
Como se indic antes, el cdigo de cada estado est en las salidas de
los flip-flops, y estas salidas se actualizan nicamente cuando el flanco
de subida (o bajada) del reloj de estos flip-flops se ha producido, y es en
ese instante donde el estado presente se convierte en el estado
siguiente e inmediatamente este estado siguiente se convierte en el
nuevo estado presente. El PROCESS que convierte el estado presente
en el estado siguiente se escribe a continuacin.

PROCESS (reloj)
BEGIN
IF (reloj'EVENT AND reloj='1') THEN
estado_presente <= estado_siguiente;
END IF;
END PROCESS

El siguiente paso es recorrer secuencialmente por cada uno de los


estados, para ejecutar este paso, en VHDL, se requiere escribir otro
PROCESS (proceso), este proceso debe ser escrito considerando que
de un estado cualquiera se pueden ir a uno de varios estados
opcionados, como muestra la figura 5.10, del estado c se puede ir al
estado a o al estado d, el estado al que vaya depende por supuesto
del estado presente (c) y de la condicin (verdadera o falsa) de la
entrada R en el estado c. Una parte del proceso puede ser escrito de la
siguiente manera.

PROCESS (entradas, estado_presente)

317
CASE estado_presente IS
WHEN estado0 =>
IF (entradas = ...) THEN
salidas<= valor_salidas;
estado_siguiente <= estado1;
ELSE ...
END IF;

Debe notarse que la ejecucin de este proceso depende de las entradas


as como de que el estado siguiente se haya convertido en el nuevo
estado presente.
El estado presente y siguiente son seales y deben ser declaradas como
tales en la arquitectura en la seccin de declaracin de seales, esta
declaracin es como se indica a continuacin: SIGNAL estado_presente,
estado_siguiente: estado.
La sentencia CASE, que est dentro del proceso, debe ejecutarse tantas
veces cuantos estados tenga el diagrama ASM. La seal de reloj es la
que permite ir de estado a estado en forma secuencial dentro de un
diagrama ASM.
A continuacin se escribe un cdigo VHDL que describe a un diagrama
ASM. En el primer proceso se ha incluido la seal de reset para obligar
a que el sistema vaya al estado0 cuando el reset sea activado.

318
Figura 5. 10. Ejemplo de un diagrama de estados.

LIBRARY ieee;
USE ieee.std_logic_1164.all;
----------------------------------------------------------------------------------------------
ENTITY nombre_entidad IS
PORT (
entradas: IN tipo_datos_entradas;
reset, reloj: IN STD_LOGIC;

319
salidas: OUT tipo_datos_salidas);
END nombre_entidad;
-----------------------------------------------------------------------------------------------
ARCHITECTURE nombre_arquitectura OF nombre_entidad IS
TYPE estado IS (estado_0, estado_1, estado_2,estado_n);
SIGNAL estado_presente, estado_siguiente: estado;
BEGIN
------------------------------------------------------------------------------------------------
PROCESS (reset, reloj)
BEGIN
IF (reset='1') THEN
estado_presente <= estado_0;
ELSIF (reloj'EVENT AND reloj='1') THEN
estado_presente <= estado_siguiente;
END IF;
END PROCESS;
-----------------------------------------------------------------------------------------------
PROCESS (entradas, estado_presente)
BEGIN
CASE estado_presente IS
WHEN estado_0 =>
IF (entradas = ...) THEN
salidas<= valor_salidas;

320
estado_siguiente <= estado_1;
ELSE ...
END IF;
WHEN estado_1 =>
IF (entradas = ...) THEN
salidas<= valor_salidas;
estado_siguiente <= estado_2;
ELSE ...
END IF;
WHEN estado_2 =>
IF (entradas = ...) THEN
salidas<= valor_salidas;
estado_siguiente <= estado_3;
ELSE ...
END IF;
WHEN estado_3 =>
IF (entradas = ...) THEN
salidas<= valor_salidas;
estado_siguiente <= estado_4;
ELSE ...
END IF;
..

321

WHEN estado_n-1 =>
IF (entradas = ...) THEN
salidas<= valor_salidas;
estado_siguiente <= estado_n;
ELSE ...
END IF;
...
END CASE;
END PROCESS;
END nombre_arquitectura;

Ejemplo 5.2
Escriba el cdigo VHDL que describa el comportamiento del sistema del
ejemplo 5.1.

LIBRARY ieee;
USE ieee.std_logic_1164.all;
----------------------------------------------------------------------------------------------
ENTITY sistema_controlador IS
PORT (
S, N,R, reset, reloj: IN std_logic;

322
C, LED: OUT STD_LOGIC
);
END sistema_controlador;
-----------------------------------------------------------------------------------------------
ARCHITECTURE a_sistema_controlador OF sistema_controlador IS
TYPE estado IS (a, b, c);
SIGNAL estado_presente, estado_siguiente: estado;
BEGIN
------------------------------------------------------------------------------------------------
PROCESS (reset, reloj)
BEGIN
IF (reset='1') THEN
estado_presente <= a;
ELSIF (reloj'EVENT AND reloj='1') THEN
estado_presente <= estado_siguiente;
END IF;
END PROCESS;
-----------------------------------------------------------------------------------------------
PROCESS (S, N, R, estado_presente)
BEGIN
CASE estado_presente IS
WHEN a =>
IF (S <= 1) THEN

323
C<= 1;
estado_siguiente <= b;
ELSE
estado_siguiente <= a;
END IF;
WHEN b =>
IF (N <=1) THEN
estado_siguiente <= c;
ELSE
estado_siguiente <= b;
END IF;
WHEN c =>
IF (R <=1) THEN
LED<= 1;
estado_siguiente <= a;
ELSE
estado_siguiente <= c;
END IF;
END CASE;
END PROCESS;
END a_sistema_controlador;

324
Ejemplo 5.3
Disee un sistema controlador que controle dos motores A y B, el motor
A (MA) y el motor B (MB) deben cumplir el ciclo que se indica a
continuacin en forma indefinida:

MA OFF ON ON OFF
MB OFF OFF ON ON
Tabla 5.1 ciclo que deben ejecutar los motores MA y MB.

Realice la particin funcional, el diagrama ASM y escriba el cdigo


VHDL.
La particin funcional, dada las caractersticas del sistema, es solo el
sistema controlador y se muestra en la figura 5.11. Se asume que los
motores se encienden con un nivel alto y estn apagados con un nivel
bajo.
Las seales que encienden los motores son respectivamente MA y MB,
la nica entrada que tiene el sistema controlador es el reloj.

Figura 5.11. Particin funcional del controlador de los motores.

El diagrama ASM es el que se indica en la figura 5.12. Los nombres de

325
los estados son a, b, c, d. las seales que encienden cada motor son MA
y MB.

.Figura 5.12. Diagrama ASM del ejemplo 5.3.

El cdigo es el siguiente:

LIBRARY ieee;
USE ieee.std_logic_1164.all;
----------------------------------------------------------------------------------------------
ENTITY CM IS

326
PORT (
reloj: IN std_logic;
MA, MB: OUT STD_LOGIC);
END CM;
-----------------------------------------------------------------------------------------------
ARCHITECTURE a_CM OF CM IS

TYPE estado IS (a, b, c, d);


SIGNAL estado_presente, estado_siguiente: estado;
BEGIN
------------------------------------------------------------------------------------------------
PROCESS (reloj)
BEGIN

IF (reloj'EVENT AND reloj='1') THEN


estado_presente <= estado_siguiente;
END IF;

END PROCESS;
-----------------------------------------------------------------------------------------------
PROCESS (estado_presente)

BEGIN

327
CASE estado_presente IS
WHEN a =>
MA=0, MB=0;
estado_siguiente <= b;

WHEN b =>
MA=1, MB=0;
estado_siguiente <= c;

WHEN c =>
MA=1, MB=1;
estado_siguiente <= d;
WHEN d =>
MA=0, MB=1;
estado_siguiente <= a;
END CASE;
END PROCESS;
END a_CM;

328
Figura .

Ejemplo 5.4
Disee un sistema que detecte la secuencia 1001 sin traslapamiento,
a suma que cada bit ingresa al sistema con el flanco de subida del reloj,
el sistema debe generar una salida denominada F cada vez que la
secuencia es detectada,
El traslapamiento ocurre cuando ms de una secuencia se ha generado
en forma consecutiva. Sin traslapamiento, para la secuencia de este
ejercicio, significa que el bit 1 del final de una secuencia no forma parte
del primer bit 1 de la siguiente secuencia, por ejemplo la siguiente
secuencia es sin traslapamiento: 100110011001.., como se observa el
bit 1 solo forma parte de la secuencia 1001 anterior y no de la
siguiente.
El diagrama de bloques se indica en la figura 5.13, el sistema tiene
adems del reloj una seal de entrada de datos que se llama D y una
salida F. La particin funcional es solo el sistema controlador.

Figura 5.13. Particin funcional del detector de cdigo sin traslapamiento.

329
El diagrama ASM del detector de cdigo muestra la figura 5.14.

a
F=0

F
D=1

V
b

F=0

F
D=0

V
c
F=0
F
D=0

V
F=0 d F=1

F V
D=1

Figura 5.14. Diagrama ASM del detector de cdigo sin traslapamiento.

330
LIBRARY ieee;
USE ieee.std_logic_1164.all;
----------------------------------------------------------------------------------------------
ENTITY DS IS
PORT (
D, reloj: IN STD_LOGIC;
F: OUT STD_LOGIC;
);
END DS;
-----------------------------------------------------------------------------------------------
ARCHITECTURE aDS OF DS IS
TYPE estado IS (a, b, c, e);
SIGNAL estado_presente, estado_siguiente: estado;
BEGIN
------------------------------------------------------------------------------------------------
PROCESS (reloj)
BEGIN
IF (reloj'EVENT AND reloj='1') THEN
estado_presente <= estado_siguiente;
END IF;
END PROCESS;
-----------------------------------------------------------------------------------------------

331
PROCESS (D, estado_presente)
BEGIN
CASE estado_presente IS
WHEN a =>
IF (D = 0) THEN
F<= 0;
estado_siguiente <= a;
ELSE
F<= 0;
estado_siguiente <= b;
END IF;
WHEN b =>
IF (D =1 THEN
F<= 0;
estado_siguiente <= b;
ELSE
F<= 0;
estado_siguiente <= c;
END IF;
WHEN c =>
IF (D=1) THEN
F<= 0;
estado_siguiente <= b;

332
ELSE
F<= 0;
estado_siguiente <= e;
END IF;
WHEN d =>
IF (D =1) THEN
F<= 1;
estado_siguiente <= a;
ELSE
F<= 0;
estado_siguiente <= a;
END IF;
END CASE;
END PROCESS;
END aDS;

Ejemplo 5.5
Disee un sistema que detecte la secuencia 1001 con traslapamiento,
cada bit ingresa al sistema con el flanco de subida del reloj, el sistema
debe generar una salida denominada F cada vez que la secuencia
indicada es detectada,
El diagrama de bloques se indica en la figura 5.13, el sistema tiene
adems del reloj una seal de entrada de datos que se llama D y una
salida F. La particin funcional, para este ejemplo, est formada solo por
el sistema controlador. El traslapamiento ocurre cuando dos o ms

333
secuencias se han generado en forma consecutiva y significa, para la
secuencia de este ejemplo, que el bit 1 del final de una secuencia
forma parte del primer bit 1 de la siguiente secuencia, por ejemplo:
1001001001.., como se observa el bit 1 forma parte de la secuencia
1001 anterior y siguiente. El diagrama ASM se indica en la figura 5.15.

Figura 5.15. Diagrama ASM del detector de cdigo con traslapamiento.

334
El diagrama ASM del detector de secuencia es similar al del ejemplo
anterior la diferencia est en que, una vez detectada la secuencia en el
estado d, en lugar de retornar al estado a el sistema va al estado b, ya
que el bit 1 ltimo de la seuencia anterior es el bit 1 de la siguiente
secuencia.

El cdigo VHDL del diagrama ASM se indica a continuacin:

LIBRARY ieee;
USE ieee.std_logic_1164.all;
----------------------------------------------------------------------------------------------
ENTITY DS IS
PORT (
D, reloj: IN STD_LOGIC;
F: OUT STD_LOGIC;
);
END DS;
-----------------------------------------------------------------------------------------------
ARCHITECTURE aDS OF DS IS
TYPE estado IS (a, b, c, d);
SIGNAL estado_presente, estado_siguiente: estado;
BEGIN
------------------------------------------------------------------------------------------------
PROCESS (reloj)

335
BEGIN
IF (reloj'EVENT AND reloj='1') THEN
estado_presente <= estado_siguiente;
END IF;
END PROCESS;
-----------------------------------------------------------------------------------------------
PROCESS (D, estado_presente)
BEGIN
CASE estado_presente IS
WHEN a =>
IF (D = 0) THEN
F<= 0;
estado_siguiente <= a;
ELSE
F<= 0;
estado_siguiente <= b;
END IF;
WHEN b =>
IF (D =1 THEN
F<= 0;
estado_siguiente <= b;
ELSE
F<= 0;

336
estado_siguiente <= c;
END IF;
WHEN c =>
IF (D=1) THEN
F<= 0;
estado_siguiente <= b;
ELSE
F<= 0;
estado_siguiente <= d;
END IF;
WHEN d =>
IF (D =1) THEN
F<= 1;
estado_siguiente <= a;
ELSE
F<= 0;
estado_siguiente <= a;
END IF;
END CASE;
END PROCESS;
END aDS;

La figura 5.16 muestra la simulacin del detector de cdigo.

337
Figura 5.16. Simulacin del detector de cdigo.

Ejemplo 5.6
Disee una mquina que venda refrescos.
Para disear cualquier sistema se debe primero tener una descripcin de
los requerimientos del sistema que se va a disear. Estos requerimientos
pueden ser establecidos por el solicitante o por el ingeniero (diseador).
El enunciado del ejercicio es simple y solo indica que se debe disear
una mquina que venda refrescos, en este caso, el Ingeniero (el
diseador) debe establecer los requerimientos ms adecuados. Los
requerimientos que la mquina debe tener, para este ejemplo, son los
siguientes:
Mdulo receptor de monedas, el receptor de monedas debe tener un
orificio, por el cual se ingresan las monedas, una a la vez, y que estar
abierto solo cuando reciba la orden de abrir, mediante la seal abrir
receptor (AR), si esta seal es verdadera el orifico se abre hasta que
pase una y solo una moneda, el orificio se cierra automticamente
cuando una moneda ha pasado, el receptor debe aceptar solo monedas
de: cinco, diez, veinticinco, cincuenta y 100 (1 dlar) centavos.

338
El receptor de monedas debe receptar las monedas, una a la vez y, solo
despus de que el usuario ha presionado la tecla refresco.
En el receptor de monedas hay cinco lneas denominadas: A1, A2, A3,
A4, A5, (a todas estas lneas se las identifica en conjunto con una sola
letra: la A) una lnea por tipo de moneda, y solo puede estar encendida
una lnea a la vez, por ejemplo, si el usuario ingreso una moneda de un
dlar la lnea que se enciende es la A5 y las dems estn apagadas,
cada lnea A se codifica con su respectivo valor en centavos de dlar en
las lneas D (D0, D1, etc.), como se indica en la tabla 5.2. La seal DR
decrementa la suma de las moneadas en 5 centavos.
El receptor de monedas deber tambin calcular el valor total en
centavos que el usuario a ingresado, y debe generar dos seales que
indiquen si el valor total es igual (VI), o mayor (VM) que el valor del
refresco, lgicamente si no es igual y no es mayor significa que es
menor, de ah que solo son necesarias dos seales.

Tabla 5.2. Codificacin de las monedas.

339
El mdulo de refresco, este mdulo dispone de una tecla R que al ser
presionada por el usuario genera la seal R, que le indica al sistema
controlador que el usuario desea comprar un refresco.
El mdulo de aviso, est compuesto por un sintetizador de voz, que
continuamente est emitiendo los fonemas: si desea un refresco
presione la tecla R, este mdulo deja de emitir los fonemas cuando el
usuario ha presiona la tecla R.
El mdulo que alerta al usuario para que ingrese una moneda, est
compuesto por un sintetizador de voz, que emite los fonemas: ingrese
una moneda cuando recibe en su entrada la seal denominada: IM
(ingrese moneda).
El mdulo que da vuelto, este mdulo recibe la seal: dar vuelto (DV)
para que inicie la operacin de dar el vuelto, este mdulo solo da el
vuelto en monedas de cinco centavos, una vez que ha dado de vuelto
una moneda de cinco centavos retorna la seal vuelto dado (VD).
El mdulo de entrega del refresco, este mdulo tiene una seal para dar
el refresco (DR), cuando esta es verdadera entrega el refresco y retorna
una seal de refresco dado (RD) cuando ha entregado el refresco al
usuario.
Con estas especificaciones se elabora la particin funcional, que no es
otra cosa que un diagrama de bloques muy detallado, que incluye todas
las seales y todos los elementos que conforman el sistema, es decir, el
sistema controlador y los subsistemas, este diagrama se muestra en la
figura 5.17.
A partir de la particin funcional se desarrolla el diagrama ASM, que es el
algoritmo que describe el funcionamiento del sistema controlador, la
figura 5.18 muestra este diagrama.

340
Figura 5.17. Particin funcional de la mquina vendedora de refrescos.

341
Figura 5.18. Diagrama ASM de la mquina vendedora de refrescos.

342
En la particin funcional no se ha incluido un interruptor de encendido,
que alimentaria a la mquina con energa, tampoco se ha incluido un
botn de inicio, botn que pondra a la mquina lista para trabajar.
Se ha incluido un botn de reset en el programa en VHDL, a pesar de
que este botn no esta en la particin funcional, este botn cuando es
verdadero posisiona a la mquina en el estado S0 y cuando es falso
permite que la mquina realice su funcin.
El programa contine dos procesos, el uno permite recorrer el diagrama
ASM estado por estado y el otro proceso enciende o apaga las seales
de salida en cada estado. El cdigo VHDL para la mquina vendedora de
resfrescos no es nada complicado entender, por esta razn no se
explica, y es el siguiente:

library ieee;
use ieee.std_logic_1164.all;
entity mvr is
port
(
clk : in std_logic;
r, vi,vm, rd, vd, reset : in std_logic;
im,ar, dr, dv, re,de : out std_logic
);

end mvr;
architecture rtl of mvr is
type state_type is (s0, s1, s2, s3,s4,s5);

343
signal state : state_type;
begin
process (clk, reset)
begin
if reset = '1' then
state <= s0;
elsif (rising_edge(clk)) then
case state is
when s0=>
if r = '1' then
state <= s1;
else
state <= s0;
end if;
when s1=>
if vi = '1' then
state <= s4;
elsif vm='1' then
state <= s2;
else
state <= s1;
end if;
when s2=>

344
if vd = '1' then
state <= s3;
else
state <= s2;
end if;
when s3=> state<= s1;
when s4=>
if rd = '1' then
state <= s5;
else
state <= s4;
end if;
when s5=> state<= s0;
end case;

end if;
end process;
process (state, r,vi,rd,vd)
begin
case state is
when s0=> im<='0'; ar<='0'; dr<='0'; dv<='0'; re<='1'; de<='0';
when s1=> im<='1'; ar<='1'; dr<='0'; dv<='0'; re<='0'; de<='0';
when s2=> im<='0'; ar<='0'; dr<='0'; dv<='1'; re<='0'; de<='0';

345
when s3=> im<='0'; ar<='0'; dr<='0'; dv<='0'; re<='0'; de<='1';
when s4=> im<='0'; ar<='0'; dr<='1'; dv<='0'; re<='0'; de<='0';
when s5=> im<='0'; ar<='0'; dr<='0'; dv<='0'; re<='0'; de<='0';
end case;
end process;
end rtl;

en la figura 5.19 esta el RTL obtenido de Quartus II del programa de la


amquoina vendeora de refrescos. Como se puede ver el bloque stae
contiene todas las seales de entrda y salida a la maquina.

Figura 5.19. Rtl de la mquina vendeora de refrescos.

En la figura 5.20 se puede ver el diagrama de estados de la mquina


vendedora de refrescos, este diagrama ha sido obtenido de la
herramienta CAD Quartus II, para obtener este digrama se clickea sobre
en el men principal sobre Tool se selecciona Netlist Viewers y
finalmente se selecciona State Machine Viewer.

346
Figura 5.20. Diagrama de estados de la mquina vendedora de
refrescos.

En la figura 5.21 se puede ver el resultado de una simulacin del


programa de la mquina vendeora de refrescos.

Figura 5.21. Simulacin para la seal reset igual a cero.

347
Como se puede ver en la figura 5.21, cuando la seal de reset es igual a
un uno lgico, la mquina va al S0 y se mantine all mientras la seal r
sea falsa.
En el estado S0 la nica seal que se enciende es la seal re que activa
el mdulo que le indica al usuario que seleccione un refresco.
La figura 5.22 muestra la simulacin de la mquina cuando la seal de
reset es igual a cero y la seal r se hace verdadera en el segundo flanco
del reloj, all se encienden las seales ar e im como indica el diagrama
ASM, la seal re cae a cero porque esta solo se enciende en el estado
S0.

Figura 5.22. Simulacin para la seal r verdadera.

La figura 5.23 muestra la simulacin cuando r es verdadero y vi es


verdadera, del diagrama ASM se puede ver que la mquina debe ir
estado S4 y encender la salida dr, como se puede apreciar en el
diagrama de tiempo de la simulacin la mquina efectivamente va al
estado S4 y enciende la saliuda dr.

348
Figura 5.23. Simulacin para las seales r y vi verdaderas.

Ejemplo 5.7
Elabore el diagrama ASM de un sistema controlador que obtenga el
complemento a dos de un nmero de cuatro bits, los bits ingresan uno a
uno y con cada flanco de subida del reloj.
El diagrama de bloques del sistema controlador se muestra en la figura
5.19, tiene una seal de entrada de datos denominada D a parte del reloj
y una seal de salida denominada C. Se supone que la seal D recibe
una cadena infinita de bits en serie y sincronizados con el flanco de
subida del reloj.
Cada cuatro bits se tiene un dato de informacin donde el bit menos
significativo llega primero a D. En la salida C se tiene el complemento a
dos de los bits de entrada.

349
Figura 5.19. Sistema que genera el complemento a dos.

Para hallar el complemento a dos de un nmero de cuatro bits se aplica


el siguiente algoritmo a la cadena de bits: se analiza el dato empezando
desde el bit menos significativo, se busca el primer uno, hallado el primer
uno en el dato, este se deja igual y el resto de los bits del dato se
complementan (para el ejemplo el dato est compuesto por cuatro bits),
este algoritmo se muestra en la tabla 5.3.

LSB MSB LSB MSB LSB


DATO 0 0 0 0 1 0 1 1 0
Ca2 DEL DATO 0 1 1 1 1 1 0 1 0
Tabla 5. 3. Algoritmo para obtener el complemento a dos de un nmero.

El diagrama ASSM del algoritmo para obtener el complemeto a dos de


un numero de cuatro bits se muestra en la figura 5.20.
El programa o codificacin en VHDL del diagrama ASM de la figura 5.20
se muestra a continuacin.

LIBRARY ieee;
USE ieee.std_logic_1164.all;
----------------------------------------------------------------------------------------------
350
ENTITY CAD IS
PORT (
R, reloj: IN STD_LOGIC;
S: OUT STD_LOGIC;
);
END CAD;
-----------------------------------------------------------------------------------------------
ARCHITECTURE aCAD OF CAD IS
TYPE estado IS (a, b, c, d, e, f, g);
SIGNAL estado_presente, estado_siguiente: estado;
BEGIN
------------------------------------------------------------------------------------------------
PROCESS (reloj)
BEGIN
IF (reloj'EVENT AND reloj='1') THEN
estado_presente <= estado_siguiente;
END IF;
END PROCESS;
-----------------------------------------------------------------------------------------------
PROCESS (R, estado_presente)

BEGIN
CASE estado_presente IS

351
WHEN a =>
IF (R = 0) THEN
S<= 0;
estado_siguiente <= b;
ELSE
S<= 1;
estado_siguiente <= e;
END IF;
WHEN b =>
IF (R =0 THEN
S<= 0;
estado_siguiente <= c;
ELSE
S<= 1;
estado_siguiente <= f;
END IF;
WHEN c =>
IF (R=0) THEN
S<= 0;
estado_siguiente <= d;
ELSE
S<= 1;
estado_siguiente <= g;

352
END IF;
WHEN d =>
IF (R =0) THEN
S<= 0;
estado_siguiente <= a;
ELSE
S<= 1;
estado_siguiente <= a;
END IF;

WHEN e =>
IF (R =0 THEN
S<= 1;
estado_siguiente <= f;
ELSE
S<= 0;
estado_siguiente <= f;
END IF;
WHEN f =>
IF (R=0) THEN
S<= 1;
estado_siguiente <= g;
ELSE

353
S<= 0;
estado_siguiente <= g;
END IF;
WHEN g =>
IF (R =0) THEN
S<= 1;
estado_siguiente <= a;
ELSE
S<= 0;
estado_siguiente <= a;
END IF;
END CASE;
END PROCESS;
END aCAD;

En la figura 5.21 se puede ver la simulacin del complemento a dos de


un del nmero 1111, el resultado es 0001.
En la figura 5.22 se puede ver la simulacin del complemento a dos del
nmero 1011, el bit menos significativo recibe primero el resultado es
0101.

354
Figura 5.20. Diagrama ASM para obtener el complemento a dos de un
nmero de cuatro bits.

355
La figura 5.21 muestra la simulacin del complemento a dos del numero
1111.

Figura 5.21. Complemento a dos del nmero 1111.

La figura 5.22 muestra la simulacin de la obtencin del complemnto a


dos del numero 1111.

Figura 5.22. Simulacin del complemento del nmero 1101.

Ejemplo 5.8
Muestre las plantillas disponibles en Quartus II para disear una mquina
Mealy de cuatro estados.

-- Quartus II VHDL Template


-- Four-State Mealy State Machine
356
-- A Mealy machine has outputs that depend on both the state and
-- the inputs. When the inputs change, the outputs are updated
-- immediately, without waiting for a clock edge. The outputs
-- can be written more than once per state or per clock cycle.

library ieee;
use ieee.std_logic_1164.all;

entity four_state_mealy_state_machine is

port
(
clk : in std_logic;
input : in std_logic;
reset : in std_logic;
output : out std_logic_vector(1 downto 0)
);

end entity;

architecture rtl of four_state_mealy_state_machine is

357
-- Build an enumerated type for the state machine
type state_type is (s0, s1, s2, s3);

-- Register to hold the current state


signal state : state_type;

begin

process (clk, reset)


begin

if reset = '1' then


state <= s0;

elsif (rising_edge(clk)) then

-- Determine the next state synchronously, based on


-- the current state and the input
case state is
when s0=>
if input = '1' then
state <= s1;
else

358
state <= s0;
end if;
when s1=>
if input = '1' then
state <= s2;
else
state <= s1;
end if;
when s2=>
if input = '1' then
state <= s3;
else
state <= s2;
end if;
when s3=>
if input = '1' then
state <= s3;
else
state <= s1;
end if;
end case;

end if;

359
end process;

-- Determine the output based only on the current state


-- and the input (do not wait for a clock edge).
process (state, input)
begin
case state is
when s0=>
if input = '1' then
output <= "00";
else
output <= "01";
end if;
when s1=>
if input = '1' then
output <= "01";
else
output <= "11";
end if;
when s2=>
if input = '1' then
output <= "10";
else

360
output <= "10";
end if;
when s3=>
if input = '1' then
output <= "11";
else
output <= "10";
end if;
end case;
end process;

end rtl;

361
Ejemplo 5.9
Muestre las plantillas disponibles en Quartus II para disear una mquina
Moore de cuatro estados.

-- Quartus II VHDL Template


-- Four-State Moore State Machine

-- A Moore machine's outputs are dependent only on the current state.


-- The output is written only when the state changes. (State
-- transitions are synchronous.)

library ieee;
use ieee.std_logic_1164.all;

entity four_state_moore_state_machine is

port(
clk : in std_logic;
input : in std_logic;
reset : in std_logic;
output : out std_logic_vector(1 downto 0)
);

362
end entity;

architecture rtl of four_state_moore_state_machine is

-- Build an enumerated type for the state machine


type state_type is (s0, s1, s2, s3);

-- Register to hold the current state


signal state : state_type;

begin

-- Logic to advance to the next state


process (clk, reset)
begin
if reset = '1' then
state <= s0;
elsif (rising_edge(clk)) then
case state is
when s0=>
if input = '1' then
state <= s1;

363
else
state <= s0;
end if;
when s1=>
if input = '1' then
state <= s2;
else
state <= s1;
end if;
when s2=>
if input = '1' then
state <= s3;
else
state <= s2;
end if;
when s3 =>
if input = '1' then
state <= s0;
else
state <= s3;
end if;
end case;
end if;

364
end process;

-- Output depends solely on the current state


process (state)
begin
case state is
when s0 =>
output <= "00";
when s1 =>
output <= "01";
when s2 =>
output <= "10";
when s3 =>
output <= "11";
end case;
end process;

end rtl;

Ejemplo 5.10
Muestre las plantillas disponibles en Quartus II para Safe State Machine

365
-- Quartus II VHDL Template
-- Safe State Machine

library ieee;
use ieee.std_logic_1164.all;

entity safe_state_machine is

port(
clk : in std_logic;
input : in std_logic;
reset : in std_logic;
output : out std_logic_vector(1 downto 0)
);

end entity;

architecture rtl of safe_state_machine is

-- Build an enumerated type for the state machine


type state_type is (s0, s1, s2);

-- Register to hold the current state

366
signal state : state_type;

-- Attribute "safe" implements a safe state machine.


-- This is a state machine that can recover from an
-- illegal state (by returning to the reset state).
attribute syn_encoding : string;
attribute syn_encoding of state_type : type is "safe";

begin

-- Logic to advance to the next state


process (clk, reset)
begin
if reset = '1' then
state <= s0;
elsif (rising_edge(clk)) then
case state is
when s0=>
if input = '1' then
state <= s1;
else
state <= s0;
end if;

367
when s1=>
if input = '1' then
state <= s2;
else
state <= s1;
end if;
when s2=>
if input = '1' then
state <= s0;
else
state <= s2;
end if;
end case;
end if;
end process;

-- Logic to determine output


process (state)
begin
case state is
when s0 =>
output <= "00";
when s1 =>

368
output <= "01";
when s2 =>
output <= "10";
end case;
end process;

end rtl;

Ejemplo 5.11
Muestre las plantillas disponibles en Quartus II para User-Encoded State
Machine

-- Quartus II VHDL Template


-- User-Encoded State Machine

library ieee;
use ieee.std_logic_1164.all;

entity user_encoded_state_machine is

port
(
updown : in std_logic;

369
clock : in std_logic;
lsb : out std_logic;
msb : out std_logic
);

end entity;

architecture rtl of user_encoded_state_machine is

-- Build an enumerated type for the state machine


type count_state is (zero, one, two, three);

-- Registers to hold the current state and the next state


signal present_state, next_state : count_state;

-- Attribute to declare a specific encoding for the states


attribute syn_encoding : string;
attribute syn_encoding of count_state : type is "11 01 10 00";

begin

-- Determine what the next state will be, and set the output bits
process (present_state, updown)

370
begin
case present_state is
when zero =>
if (updown = '0') then
next_state <= one;
lsb <= '0';
msb <= '0';
else
next_state <= three;
lsb <= '1';
msb <= '1';
end if;
when one =>
if (updown = '0') then
next_state <= two;
lsb <= '1';
msb <= '0';
else
next_state <= zero;
lsb <= '0';
msb <= '0';
end if;
when two =>

371
if (updown = '0') then
next_state <= three;
lsb <= '0';
msb <= '1';
else
next_state <= one;
lsb <= '1';
msb <= '0';
end if;
when three =>
if (updown = '0') then
next_state <= zero;
lsb <= '1';
msb <= '1';
else
next_state <= two;
lsb <= '0';
msb <= '1';
end if;
end case;
end process;
-- Move to the next state
process

372
begin
wait until rising_edge(clock);
present_state <= next_state;
end process;
end rtl;

373
EJERCICIOS PROPUESTOS

1. Explique que es un sistema controlador.


2. Explique porque un sistema controlador sincrnico debe tener un
reloj e indique de que parmetros dependera la frecuencia
mxima de ese reloj.
3. Existira alguna condicin o condiciones bajo las cuales un
interruptor conectado a un sistema controlador no pueda ser
reconocido por este, explique.
4. Una seal de salida de un sistema controlador dura un ciclo de
reloj o un periodo del mismo, se podra hacer que esta seal dure
solo una parte del ciclo del reloj, explique.
5. Un interruptor conectado a un sistema controlador, es un
dispositivo que trabaja en sincrona con el reloj, explique.
6. Se podran consultar por el estado de dos interruptores
simultneamente en un estado cualquiera, explique.
7. Un sistema controlador puede tener entradas que trabajen en
sincrona con el reloj y en asincrnica con el mismo, explique.
8. Cules seran las consecuencias para el sistema controlador, si
este tiene elementos de memoria (que guardan el cdigo del
estado) que se activen por el nivel del reloj y no por el flanco.
9. Cuanto tiempo dura un estado en un diagrama ASM y cuanto
tiempo dura el cdigo de un estado en los elementos de memoria.
10. Explique que es una particin funcional.
11. Explique que es un algoritmo.
12. Explique que es un diagrama de flujo.
13. De ser el caso, un ingeniero podra crear sus propios smbolos
para graficar un algoritmo de hardware (algo parecido a un
374
diagrama ASM), que consecuencias podra tener esta actitud,
explique
14. Cul es la diferencia entre un diagrama de flujo y un diagrama
ASM.
15. Explique los elementos que conforman un diagrama ASM.
16. Cul es la sintaxis para declarar datos enumerados.
17. Explique el cdigo en VHDL que permite pasar de un estado a
otro.
18. En un estado cualquiera si se consulta por dos entradas, debe
necesariamente consultarse por los cuatro posibles valores de las
entradas o solo por algunos de ellos, explique.
19. En un diagrama ASM de un estado cualquiera (el rectngulo) se
puede ir a consultar por el estado de una seal de entrada
(diamante) que est en cualquier otro estado del diagrama ASM o
necesariamente debe irse a un estado, es decir, se puede ir de un
rectngulo a un diamante que pertenece a otro estado, o solo de
rectngulo a rectngulo, explique.
20. Explique el cdigo en VHDL que permite recorrer, estado por
estado un diagrama ASM.
21. Explique cul es la diferencia, en caso de haya, entre el estado
siguiente y el estado presente en un diagrama ASM.
22. Si en un estado de un diagrama ASM, se debe preguntar por el
estado de dos seales, la consulta debe hacerse en forma
independiente a cada seal o se consulta el estado de las seales
simultneamente, explique.
23. Cul es la funcin del reset en un sistema controlador, explique
mediante un diagrama ASM.

375
24. Explique cul es la diferencia en declarar a una seal de entrada
como de tipo boolean o de tipo std_logic., explique desde el punto
de vista de facilidad de codificacin en VHDL.
25. Se requiere disear una cerradura digital, la cerradura se abre
cuando el usuario a tecleado la clave correcta, si ha ingresado
una clave incorrecta el sistema debe ir a un estado de falla y
permanecer en ese estado hasta que el usuario presione una
tecla de desbloqueo luego de lo cual el sistema estar listo para
recibir una clave, si el usuario equivoca la clave en tres intentos el
sistema se ira a un estado de alerta y permanecer en ese estado
hasta que el usuario presione dos teclas de desbloqueo.
a. Elabore la particin funcional, el diagrama ASM y escriba el
programa en VHDL.
b. La clave queda a eleccin del diseador, al igual que las
teclas de desbloqueo y cualquier otro detalle que crea
necesario para este diseo.
26. Disee utilizando la tcnica de diagramas de estado un contador
binario de cuatro bits, este contador debe tener una seal de reset
sincrnica.
27. Disee un generador de cuatro ondas cuadradas, una onda debe
tener una frecuencia que sea igual a la mitad de la frecuencia del
reloj, la otra debe tener una frecuencia igual a la cuarta parte de la
frecuencia del reloj y la ltima la octava parte de la frecuencia del
reloj.
28. Modifique el diagrama ASM de la maquina vendedora de
refrescos para que una parte del mdulo de recepcin de
monedas este integrado en el sistema controlador.
29. Modifique el diagrama ASM de la maquina vendedora de
refrescos para que el usuario tenga la posibilidad de elegir un
refresco de entre cuatro tipos de refrescos.

376
30. Escriba el programa en VHDL para los diagramas ASM de los
ejercicios 28 y 29.
31. Disee un sistema que permita a un robot salir de un recinto lleno
de obstculos. El robot tiene un sensor de acercamiento que le
enva una seal cuando est muy cerca de un obstculo. El robot
puede girar a la izquierda, a la derecha, avanzar y retroceder. Hay
una sola puerta de salida. El robot tiene tres llantas, dispuestas en
forma triangular, una en la parte delantera y que est ubicada en
el vrtice del tringulo que apunta hacia delante y dos en la parte
posterior y ubicada frente a frente en los otros dos vrtices del
tringulo. Las llantas de la parte posterior tienen un motor cada
una, y se activan y desactivan en forma independiente.
El robot avanza o retrocede si las dos llantas posteriores giran al
mismo tiempo y en el mismo sentido hacia adelante o en reversa
respectivamente. El robot gira a la izquierda cuando el motor de la
llanta izquierda est detenido y el motor de la llanta derecha est
activado, el robot gira a la derecha cuando el motor de la llanta
derecha est detenido y el motor de la llanta izquierda activado.
Elabore la particin funcional, el diagrama ASM y el programa en
VHDL.

377
Bibliografia

Volnei, A. (2004). Circuit Design and Simulation with VHDL. Cambridg,


Massachusetts: MIT Press.
Maxinez, J. Alcal, J. (2003). VHDL el arte de programar sistemas
digitales. Mexico: CECSA.
Chu, P. (2006). Rtl hardware design using VHDL. New Jersey: John Wiley
& Sons, Inc.
Brown, S. Vranesic, Z. (2006). Fundamentos de Lgica Digital con Diseo
VHDL. Mexico: Mc Graw Hill.

378
INDICE EN ORDEN ALFABETICO

A
Acople cruzado, 11
Algoritmo de hardware, 317
Altera, 146
Arquitectura, 239
Asincrnico jk, 45.
Asincrnico, 23.
Asincrnicos, 133.
Asincrnicos, 31.
ASM, 308, 309
Atributos, 237.
B
Bloque, 86.
C
CAD, 146.
Caracterstica, 4
Caractersticas, 261
Case, 263
Celda, 10.
Cicln II, 242
Circuito, 156

379
Clase b, 111.
Clase e, 92.
Clasificar, 122
Clasificar, 85.
Clasificarse, 86.
Combinacional, 238
Comparador, 284
Compare, 107.
Compilacin, 159
Complemento, 103
Configuracin, 162
Contador binario, 98.
Contador Johnson, 127.
Contadores, 122.
Conversin, 62.
Convierta, 63.
Convierta, 68.
D
Datos predefinidos, 225
DE2 de altera, 182
DE2, 182.
Decodificador, 31.
Detector, 112.

380
Diagrama de tiempo, 18,20.
Diagrama de tiempo, 60.
Diseo, 85.
D, 31
Declaracin, 223
Detectar, 106
Diseo, 152
EDA, 211.
E
Eliminador, 21,22
Entidad, 214
Entidad, 149.
Esquemtica, 154.
Estado, 17.
Estados, 93.
F
Flanco, 30.
Flip flop T, 75.
Flip-flop D, 271.
Flip-flops, 72.
Flip-flops, 71.
Formato, 228.
FPGA, 243.

381
Frecuencia, 120.
Flip p-flop tipo D, 73.
Flip-flop JK, 76.
Flip-flop sensible al nivel, 23
FPGA, 206
Funciones, 222.
G
Grfico, 206.
H
Historia, 2.
I
IF, 263.
Implementacin, 110.
Ingresando, 154.
Ingreso, 160
Interruptor, 33.
J
JK, 44
L
Library clause, 170.
Libreras, 224.
Libreras y paquetes, 222
Lgica, 12.

382
M
Maestro - esclavo JK, 61.
Maestro esclavo, 58.
Mealy, 87.
Memoria virtual, 5.
Memoria, 10.
Memoria, 86.
Memoria, 111
Modo, 218.
Moore, 89.
Moore, mquina clase c, 91.
Multimodo, 129.
Multiplexor trabajando como un latch asincrnico, 34.
N
Nivel, 24.
Niveles lgicos, 164.
Nuevo proyecto, 147.
Nmero de estados diferentes, 95.
Nmeros que no son divisibles para dos, 116.
O
Onda, 167.
Operador de asignacin, 233.
Operadores aritmticos, 234.

383
Operadores de comparacin, 235.
Operadores de concatenacin, 236.
Operadores de desplazamiento, 235.
Operadores lgicos, 233.
P
Palabras reservadas, 291.
Pines del DE2, 251.
Proceso, 261.
Pines, 191.
Planeador, 203
Port, 216.
Positiva, 12.
Prioridad, 248.
Proceso de diseo de un circuito secuencial, 93.
Proyecto, 146
Puerta and ideal, 2.
Puerta and real, 2.
Puertos de entrada salida 217.
R
Realimentado, 3, 4.
Reloj verdadero con el flanco de bajada, 30.
Reloj verdadero con el flanco de subida, 29.
Reloj verdadero con nivel alto, 27.

384
Reloj, 28.
Representacin temporal de un estado, 95.
Reloj, 26
Retardos de propagacin en flip-flops, 79.
S
Salidas, 86
Secuencia, 00-01-10-11, 91.
Sensible ,74.
Seal de clear ,125.
Seal de realimentacin, 3.
Seal, 262.
Set reset, 11.
Siguiente, 17.
Smbolo, 310.
Simbologa para un reloj verdadero con el flanco de subida, 29.
Seales de entrada, 163
Simulacin, 166.
SR, 53
Sistema, 5.
Su nombre, puede ser cualquier nombre, 94.
Subtipos, 230.
T
T, 39

385
Tabla caracterstica del flip-flop jk sensible al flanco, 77.
Tabla caracterstica del latch asincrnico tipo sr ,54.
Tabla caracterstica del latch tipo d, 32.
Tabla caracterstica, 47.
Template, 169.
Tiempo de espera, 80.
Tiempo de preparacin, 80.
Tiempo, 135.
Tipo D, 35.
Tipo when else, 254.
Tipos de latch asincrnicos, 25.
Tipos de mquinas, 111.
Tipos de reloj 26.
U
Un estado se identifica por, 94.
Una tabla caracterstica, 38,39.
Usb-blaster, 183.
V
Variable, 262.
Vector, 296.
VHDL, 211.
W
Wait, 273.

386
Warning, 277.
With-select-when, 255.

387

Vous aimerez peut-être aussi