Professional Documents
Culture Documents
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.
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.
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:
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.
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.
Ejemplo 1.2
Para el diagrama de bloques del sistema que se indica en la figura 1.6
indique cuantos caminos de retroalimentacin existen.
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.
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.
7
Ejemplo 1.4
Identifique los caminos de realimentacin que tiene el sistema que se ve
en la figura 1.9.
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.
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.
11
sus entradas a lgica negativa, y las celdas binarias con puertas NOR,
responden sus entradas a lgica positiva.
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.
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.
15
Tabla 1.5. Celda Binaria con puertas NAND.
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.
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:
19
Figura 1.20. Diagrama de tiempo para set y reset verdaderos.
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.
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.
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.
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.
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.
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.
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:
31
Figura 1.36. Diagrama de bloques del Latch Asincrnico tipo 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
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.
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.
35
5. Paso 1, se comparan los diagramas de bloques. La figura 1.40
muestra los dos diagramas de bloques.
6. Se implementa.
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.
37
Tabla 1.8. Tabla para disear el decodificador set -reset.
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 .
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.
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.
42
Tabla 1.11. Tabla para disear el decodificador set -reset.
SET= CLK.T/Q.
La tabla 1.13 muestra el mapa para simplificar la seal reset.
43
RESET=CLK.T.Q
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.
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.
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.
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.
SET= J.K./Qn.CLK.
RESET= CLK./D.
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.
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.
51
Tabla 1.16. Tabla para disear el decodificador set -reset.
52
RESET= (N./ Qn).
Se incluye el reloj.
RESET= (N./Qn).CLK .
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.
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.
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.
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.
57
SET= S./Qn.
Como se debe incluir el reloj en la ecuacin anterior se tiene:
SET= S/Qn.CLK.
RESET= N.
Como se debe incluir el reloj en la ecuacin anterior se tiene:
RESET= N.CLK
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.
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.
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.
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.
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).
63
forma de hacer es mediante una interfaz, un bloque intermedio, que una
la entrada T y D como muestra la figura 1.62.
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.
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).
66
Figura 1.65. Bloque como caja negra.
67
Tabla 1.24. Tabla para disear el decodificador T a D.
T= D exor Q.
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).
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.
T= J /Qn + K Qn.
70
Tabla 1.25. Tabla para disear el decodificador T a D.
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.
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.
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.
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.
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.
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.
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.
80
Ejercicios Propuestos
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
84
CAPTULO 2
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:
86
Figura 2.1 Diagrama de bloques general de una mquina secuencial
sincrnica.
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).
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.
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.
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.
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.
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.
1. Su forma.
2. Su nombre.
3. Su cdigo.
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.
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.
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.
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.
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.
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).
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.
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.
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.
110
En todo caso como se indic en el captulo 1 existen varios tipos de
mquinas y son:
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.
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.
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.
Da= /Qa X.
115
Db= /Qb.X
Y0 Qa./X.
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.
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.
Figura 2.26 diagrama del F/F D como divisor de la frecuencia del reloj.
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.
Ejemplo 2.8
Para el ejercicio anterior encuentre la relacin matemtica entre la
frecuencia y el nmero de Flip- Flop.
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.
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.
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.
124
El diagrama de estados se muestra en la figura 2.31.
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.
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.
127
El diagrama de estados para este contador muestra la figura 2.34,
128
Tabla 2.7. Para el diseo del contador Johnson.
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.
130
Figura 2.36. Diagrama de estados del contador ascendente/descendente,
131
Las ecuaciones booleanas son:
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.
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.
134
Figura 2.40. Contador ascendente asncrono de tres bits.
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.
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.
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:
139
Tabla 2.10. Entradas a los Flip-Flops.
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.
142
Ejercicios Propuestos
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
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.
Hay dos ediciones de Quartus II, la una es la versin web que es gratuita
y la otra es la de suscripcin.
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).
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.
148
Figura 3.3. Ventana con las opciones de configuracin.
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.
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.
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).
153
Figura 3.10. Ventana en donde se ingresa el diseo.
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.
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.
157
Figura 3.15. Ventana de trabajo con un pin de entrada.
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.
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.
160
Ventana 3.21. Ventana para insertar las seales de entrada.
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.
162
Figura 3.25. Configuracin del tiempo a 160 ns.
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.
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.
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.
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.
172
Figura 3. 37 Contenido de Use Clause.
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>;
174
Figura 3.38. Ventana con el contenido de declaracin de entidad.
begin
-- Process Statement (optional)
175
-- Selected Signal Assignment (optional)
end <arch_name>;
176
La plantilla para la declaracin de paquete tiene las caractersticas que se
muestran a continuacin:
package <package_name> is
end <package_name>;
177
Figura 3.40. Ventana con la plantilla de declaracin de paquete.
178
-- derives power-up conditions for memories and registers from the
-- default value.
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 .
180
La figura 3.42 muestra la ventana que contine la plantilla de declaracin
de variable.
181
Figura 3.43. Ventana con la plantilla de declaracin de constante.
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
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.
184
Figura 3.45. Ventana de sistema.
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.
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.
187
Figura 3.51. Ventana de bsqueda de la carpeta Altera.
188
Figura 3.53. Ventana de seleccin de la carpeta drivers.
189
En la ventana de la figura 3.55 se presiona el boton: instalar mismo que la
inicia la instalacion del USB-Blaster.
190
3.6.3 ASIGNACION DE LOS PINES DEL CICLON II EN EL DE2
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.
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.
204
Figura 3.58. Ventana con el planeador de pines desplegada.
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.
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.
207
Ejercicios propuestos
209
Bibliografia
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.
E1 S1
.. NOMBRE ..
En Sm
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
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.
217
3. El tipo de datos. Es la clase (tipo) de informacin que contendr el
puerto.
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
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
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]
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.
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.
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;
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.
227
TYPE mi_nombre IS RANGE valor inicial TO valor final;
Ejemplo 4.6
Analice la siguiente declaracin:
Ejemplo 4.7
Analice la siguiente declaracin:
228
TYPE nombre IS (elemento1, elemento 2, ..);
Ejemplo 4.8
Analice la siguiente declaracin:
Ejemplo 4.9
Analice la siguiente declaracin:
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:
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:
230
Ejemplo 4.11
Analice la siguiente declaracin:
Ejemplo 4.12
Analice la siguiente declaracin:
Ejemplo 4.13
Analice la siguiente declaracin e indique entre que seales se pueden
realizar operaciones.
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.
232
En la tabla 4.6 se resume la forma como se utilizan estos operadores.
Ejemplo 4.14
Se exponen cinco ejemplos de asignaciones a seales y variables.
Ejemplo 4.15
Se escriben tres ejemplos de uso de los operadores lgicos.
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
0 1 1 0 1 Dato desplazado
4. 17 OPERADORES DE CONCATENACION
Los operadores de concatenacin son:
1. &
2. (, , , , )
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.
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
241
Figura 4.9. Programa para la puerta AND en Quartus II.
242
Figura 4.10. Simulacin de la puerta AND.
243
Figura 4.9.
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.
245
Figura 4.13. Ventana de programacin.
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.
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
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).
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.
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.
252
Tabla 4.19. Asignacin de los pines del FPGA.
253
Figura 4.20. Circuito del multiplexor.
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:
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
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
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
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:
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.
Ejemplo 4.29
Describa lnea a lnea el siguiente cdigo.
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;
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;
267
Figura 4.21. Simulacin del multiplexor con 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;
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.
Ejemplo 4.35
En cada lnea del cdigo siguiente escriba un comentario que aclare lo
que hace el programa.
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;
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.
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;
278
Figura 4.29. Respuesta de la simulacin 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;
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.
IF s1= s2 THEN
r<= 1;
ELSE
r<=0;
END IF;
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;
282
El resultado de la simulacin se muestra en la figura 4.33.
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;
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;
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.
Ejemplo 4.38
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;
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.
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
299
17. La siguiente expresin qu significado tiene: BIT_VECTOR( 8
DOWNTO 0).
TO 8).
DOWNTO 0) y
23. Escriba las dos lneas de cdigo que son necesarias para hacer
poder utilizarlas.
300
31. Como puede identificar a una seal dentro de un circuito.
ELSE.
WHEN-ELSE
301
47. Los cuatro ejercicios anteriores simule con Quartus II e implemente
48. Indique para que se utiliza la ventana pin planner de Quartus II.
habilitacin.
302
61. Disee un circuito secuencial sincrnico que controle dos motores,
este apagado.
el contador.
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.
4.37, para esto declare fuera del process los valores iniciales
II y obtenga el circuito.
304
Bibliografia
305
CAPITULO V
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.
1. El diamante.
2. El rectngulo.
3. El rectngulo con bordes curvos.
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
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.
a 101
RE
Figura 5.7. Un estado con su nombre, cdigo y seal que se activa.
.
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:
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.
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.
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.
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
317
CASE estado_presente IS
WHEN estado0 =>
IF (entradas = ...) THEN
salidas<= valor_salidas;
estado_siguiente <= estado1;
ELSE ...
END IF;
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.
325
los estados son a, b, c, d. las seales que encienden cada motor son MA
y MB.
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
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.
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
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.
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.
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;
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.
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;
346
Figura 5.20. Diagrama de estados de la mquina vendedora de
refrescos.
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.
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.
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;
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.
Ejemplo 5.8
Muestre las plantillas disponibles en Quartus II para disear una mquina
Mealy de cuatro estados.
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;
357
-- Build an enumerated type for the state machine
type state_type is (s0, s1, s2, s3);
begin
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;
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.
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;
begin
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;
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;
366
signal state : state_type;
begin
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;
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
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;
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
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
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