Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Conceptos básicos
Dato
Digital
Sistema decimal
Sistemas posicionales
Sistema Binario
Sistemas Octal y Hexadecimal
Conversiones de base
Números con signo
Números reales
Aritmética
Códigos
Representación digital de los datos
Saber Hacer
Representar cantidades enteras en cualquier base, principalmente en binario. Seleccionar
la forma de representación de datos numéricos. Representar en forma digital cualquier tipo
de datos (numéricos y no numéricos).
1
2 CAPÍTULO 1. REPRESENTACIÓN DIGITAL DE LOS DATOS
El mundo moderno gobernado por la informática, nos dice que la “información” puede
ser procesada, enviada de un sitio a otro o almacenada. Lo que llamamos información puede
consistir simplemente en un texto, es decir, una hilera de caracteres en una página de un
directorio telefónico o puede contener imágenes y sonido como la novedosa “multimedia”
nos tiene acostumbrados.
Dentro de este conjunto de información también se incluyen los datos numéricos; al
fin y al cabo, el computador fue conocido inicialmente por su habilidad de hacer cálcu-
los aritméticos. Nuestro interrogante podrı́a ser: ¿Cómo están constituidas todas estas
categorı́as de datos para que sean “manipuladas” por medio de una máquina? ¿Cómo
está constituida la información que maneja un teléfono? Alguien seguramente se acordará,
o hasta lo habrá visto en los comerciales de los teléfonos celulares, que algunos son digitales
y otros son análogos o analógicos. Ya lo entendimos? Seguramente que no.
Examinemos otra de estas famosas máquinas: la calculadora; no hay duda de que el
asunto es digital puesto que los datos que manipula la calculadora están conformados por
dı́gitos. En una calculadora programable, una parte del teclado corresponde a las letras
del alfabeto; además, podemos procesar datos numéricos, almacenar las direcciones y los
teléfonos de todos nuestros amigos.
Es muy probable que nuestra calculadora ya tenga pantalla y pueda mostrar gráficas.
Esta pantalla es similar a una hoja de papel cuadriculado sólo que con los cuadritos más
diminutos; cada cuadrito se denomina “pixel” y simplemente, el puede estar “encendido” o
“apagado”. Ha notado que cuando hacemos gráficas en papel milimetrado, lo que hacemos
es ubicar puntos y después los unimos por una lı́nea continua? Pues algo parecido hace la
calculadora con las gráficas, sólo que no tiene que unir la lı́nea; de eso se encarga el ojo
humano si los puntos son muy pequeños y están muy cerca unos de otros.
Empezamos a concentrarnos entonces en dı́gitos más pequeños; en este caso, los pixeles
están “encendidos” o “apagados”; o también en 1 o en 0. A estos dı́gitos de sólo dos estados
los llamamos “bits”, “bitios”, o dı́gitos binarios (la palabra dı́gito implı́citamente contiene
el significado de decimal o sea que puede tener 10 valores diferentes (0,1,2. . . 9).
Los bits son muy importantes en el mundo “digital” puesto que son los más inmediatos
de representar fı́sicamente; un relé, por ejemplo, puede estar abierto o cerrado (los primeros
computadores fueron construidos con relés); un transistor puede estar conduciendo o estar
en corte. Queremos examinar entonces cómo es posible la representación de cualquier tipo
de información a partir de los bits o dı́gitos binarios.
Empecemos por definir lo que es un sistema: En primer lugar, entendemos por sistema
un conjunto de elementos que en forma coordinada tienen una función especı́fica; desde
el punto de vista matemático, un sistema es una transformación única u operador que
relaciona o transforma una condición de entrada dada en una salida especı́fica. Un sistema
cuyas señales de entrada y de salida son continuas, decimos que es un sistema continuo o
1.2. SISTEMAS DE NUMERACIÓN POSICIONALES 3
Este sistema de numeración tiene como base o raı́z a 10 por lo cual se le denomina
decimal. En general, podemos construir otros sistemas de numeración tomando otras bases
que deben ser números enteros.
4 CAPÍTULO 1. REPRESENTACIÓN DIGITAL DE LOS DATOS
DECIMAL CUATERNARIO
0 0
1 1
2 2
3 3
4 10
5 11
6 12
7 13
8 20
9 21
Cuadro 1.1:
Observamos que 134 (13 en base 4) equivale a:
1×41 + 3 = 4 + 3 = 710
Por lo tanto,
El sistema binario tiene como base 2 y sus dı́gitos binarios (bits) son 0 y 1. Observemos
como se puede contar en el sistema binario:
Cuadro 1.2:
Si con dos dı́gitos decimales podemos contar desde 0 hasta 99, tendremos 100 = 102
cantidades diferentes; en forma análoga, podemos contar con 4 bits desde 0 hasta 1111, o
sea 24 = 16 cantidades diferentes.
1.3. REPRESENTACIONES DE CANTIDADES NUMÉRICAS 5
Si la base es superior a 9, tendremos que usar otros dı́gitos adicionales para los cuales
se usan las letras mayúsculas del alfabeto.
Por ejemplo, si la base es 16, los dı́gitos son 0,1,2,...,9,A,B,C,D,E,F; donde A es el
equivalente a 10, B a 11 y ası́ sucesivamente hasta F = 15. Este sistema de numeración
se denomina “hexadecimal”. En sistemas digitales el sistema de numeración básico es el
binario, pero el octal y el hexadecimal son importantes puesto que 8 y 16 son potencias
de 2. Esto nos permite convertir fácilmente de binario a octal o hexadecimal y viceversa
en forma muy rápida y obtener representaciones más compactas de cantidades binarias.
Los números de punto fijo se utilizan para representar ya sea enteros con signo o
fracciones con signo. En ambos casos se utilizan los sistemas de magnitud y signo, de
complemento de dos, o de complemento de uno para representar los valores con signo.
Los enteros de punto fijo tienen un punto binario implı́cito a la derecha del bit menos
significativo y las fracciones de punto fijo tienen el punto binario implı́cito entre el bit
del signo y el bit de magnitud más significativo. Los números en el sistema de magnitud
y signo constan de una magnitud y además, de un sı́mbolo que indica si la magnitud
es positiva o negativa. Cuando los números son binarios se utiliza un bit adicional para
representar el signo; usualmente es el bit más significativo.
Por ejemplo:
base se llama complemento de 10, mientras que en el sistema binario, se llama complemento
de 2.
Ejemplo:
11101110
Entonces, si 1710 = 000100012 el complemento de 2 será: +1
111011112
Para representar cantidades numéricas que pudieran tener parte fraccionaria y con
magnitud muy grande o muy pequeña, se inventó la codificación de números de punto
flotante, basándose seguramente en la notación cientı́fica. En general, la forma de punto
flotante de un número N se escribe como:
N = M × rE
En donde M, la mantisa, es un número de punto fijo que contiene los dı́gitos signi-
ficativos de N. El exponente E, es un entero de punto fijo. La mantisa M, usualmente se
codifica en magnitud y signo, por lo general como una fracción, y se puede escribir como:
M = SM an−1 · · · a−m
PRECISION PRECISION
SENCILLA DOBLE
Total de bits 32 64
Bits de la mantisa 23 52
Bits del exponente 8 11
Sesgo del exponente 127 1023
Cuadro 1.3:
En esta categorı́a caben muchas cosas tales como el texto, las imágenes, el sonido, etc. El
tipo más común de datos no numéricos es el texto, cadenas de caracteres de algún conjunto
de datos. Cada carácter está representado en el computador mediante una cadena de bits de
acuerdo con una convención establecida. El código de caracteres más comúnmente usado
es el ASCII (American Standard Code for Information Interchange). ASCII representa
cada carácter con una cadena de 7 bits, la cual da un total de 128 caracteres diferentes.
El código BCD (Binary-Coded Decimal) sirve para representar los dı́gitos decimales del
0 al 9 y es un ejemplo de un código ponderado, es decir, cada posición en el código tiene
un valor o un peso numérico asociado a éste. El código BCD utiliza 4 bits y los pesos son
los mismos que en un entero binario de 4 bits. El código BCD también es conocido como
código 8-4-2-1 por los pesos utilizados. Un código cı́clico se puede definir como un código
en el que un corrimiento circular produce otra cadena del código para cualquier palabra
de código. El código Gray es uno de los tipos más comunes de códigos cı́clicos y tiene la
caracterı́stica de que las palabras de código para dos números consecutivos difieren sólo
en un bit. Es decir, la distancia entre dos palabras de código es 1. En general, la distancia
entre dos palabras de código binario es igual al número de bits en el que difieren las dos
palabras. El código Gray es útil donde se necesite medir u observar la posición de un eje
circular. En la figura 1.1 observamos esta aplicación en forma esquemática.
Hasta este punto ya tenemos un panorama general de la forma como los datos pueden
representarse. El término procesamiento es muy amplio e incluye actividades tales como la
comunicación (muy utilizada cuando enviamos un correo electrónico), el almacenamiento,
la ejecución de cálculos numéricos, etc.
En la Figura 1.2 se muestran los elementos que intervienen en el procesamiento de los
datos.
El procesador es el agente ejecutor de la actividad; puede ser una persona (en cuyo
caso el proceso es manual) o puede ser un computador. Este modelo lo podemos aplicar
8 CAPÍTULO 1. REPRESENTACIÓN DIGITAL DE LOS DATOS
Conceptos básicos
Variables lógicas o binarias
Álgebra de Boole
Leyes Booleanas
Postulados del Álgebra Booleana
Tablas de Verdad
Compuerta AND
Compuerta OR
Compuerta NOT
Compuerta NAND
Compuerta NOR
Compuerta EXOR
Compuerta NEXOR
Tabla de Verdad
Saber Hacer
Reconocer los sı́mbolos de las operaciones lógicas.
Manipular ecuaciones lógicas usando conceptos de álgebra booleana.
9
10 CAPÍTULO 2. COMPUERTAS LÓGICAS Y ÁLGEBRA DIGITAL
En 1854 el matemático inglés George Boole escribió el libro “An Investigation of the
Laws of thought on which to found the Mathematical Theories of Logic and Probabilities”
, en el cual se hizo un análisis matemático de la lógica, que dio como resultado un nuevo
campo denominado ”Álgebra de la Lógica”, o “Álgebra Booleana”.
Cualquier variable debe existir en uno de los dos estados; no se permiten otros
estados.
Cualquier variable lógica sólo puede tener un valor. Ninguna cantidad puede ser
simultáneamente ”verdadera” y ”falsa”.
Tomando como entradas las cantidades lógicas, el álgebra booleana define tres opera-
ciones básicas que son el producto booleano, la suma booleana y el complemento. Ya en el
terreno de los sistemas digitales, estas operaciones se convierten en compuertas, las cuales
definimos a continuación, junto con otras compuertas adicionales que son de utilidad.
A B F
0 0 0
0 1 0
1 0 0
1 1 1
En álgebra booleana, la función AND se indica por medio de un punto entre las entradas
(multiplicación lógica) o por multiplicación implı́cita como en álgebra
F = A.B F = AB F = (A)(B)
2.1.2. La compuerta OR
A B F
0 0 0
0 1 1
1 0 1
1 1 1
F = AorB F = A + B
A F
0 1
1 0
F = notA F = A F = A0
A B F
0 0 1
0 1 1
1 0 1
1 1 0
F = A.B
A B F
0 0 1
0 1 0
1 0 0
1 1 0
F =A+B
N Algebra Ley
1 a+a=a Ley de Idempotencia
2 a×a = a
3 a + (b + c) = (a + b) + c Ley asociativa
4 a×(b×c) = (a×b)×c
5 a+b=b+a Ley conmutativa
6 a×b = b×a
7 a + (a×b) = a Ley de Absorción
8 a×(a + b) = a
9 a×(b + c) = (a×b) + (a×c) Ley distributiva
10 a + (b×c) = (a + b)×(a + c)
11 a+0=a
12 a×1 = a
13 a×a0 = 0
14 a + a0 = 1
2.2. FUNCIONES DIGITALES O BOOLEANAS 13
En éste punto conviene mencionar que éstas leyes cumplen con el principio de du-
alidad del álgebra booleana, mediante el cual si intercambiamos suma por producto y 0
por 1, obtenemos otra ley igualmente válida. Obsérvese que 1 y 2 son duales, al igual que
3 y 4, y ası́ sucesivamente.
A+A=1 A,0 = 0 A + AB = A + B
A.A = 0 A,1 = A (A + B).(A + C) = A + B.C
A.A = A A+0=A (A + B).B = B
A+A=A A+1=1 A.B + A.C = A.(B + C)
A+B =B+A A+A=A A.B = B.A
A=A A + AB = A
Teorema de DeMorgan:
(A.B) = A + B (A + B) = A.B
valor de la función. Para éste caso la tabla tendrı́a 28 filas, dado que son 8 variables de
entrada, cada una de las cuales puede tener 2 valores diferentes. Estas tablas se denominan
tablas de la verdad.
Capı́tulo 3
Conceptos básicos
Tabla de verdad
Especificación de un circuito
Forma canónica de una ecuación
Notación POS
Notación SOP
Implementación de un circuito usando compuertas básicas
Saber Hacer
Saber expresar en forma de tabla de verdad una especificación en lenguaje natural de un
circuito lógico.
Obtener de la tabla de verdad la ecuación canónica del circuito.
15
16 CAPÍTULO 3. CIRCUITOS BÁSICOS DE 2 NIVELES
Supongamos que existe una red digital cuya operación es definida por la tabla siguiente:
A B C F
0 0 0 0
0 0 1 0
0 1 0 1
0 1 1 1
1 0 0 1
1 0 1 0
1 1 0 0
1 1 1 1
Cuadro 3.1:
Esta forma de ecuación, una serie de productos (AND) conectado por la suma (OR),
la llamamos suma de productos (SOP).
Una ecuación SOP en la que cada producto contiene todas las variables de entra-
da ya sea en forma verdadera o en forma complementada, está en forma NORMAL o
CANÓNICA.
Una ecuación en forma normal no necesariamente es la más simple o la única ecuación
para evaluar una función booleana en particular. Por ejemplo, la siguiente ecuación es
equivalente a la dada anteriormente.
F = AB + AB C + BC (3.2)
3.1. FORMA “SUMA DE PRODUCTOS” 17
Observe que esta ecuación no está en forma normal. Aun cuando puedan existir varias
ecuaciones para una función dada, sólo existirá una forma normal. Para convertir una
ecuación a forma normal, debemos “multiplicar” los términos a los que les falte una variable
por la variable faltante, ası́:
de donde,
3.1.3. Mintérminos
Observando la tabla 3.1 vemos que cada combinación de variables de entrada forma un
valor binario entre 0 y 2N − 1 en donde N es el número de variables de entrada.
Puesto que cada combinación posible de variables de entrada forma un valor binario
único, una combinación de entrada puede representarse por el valor decimal equivalente
al valor binario formado por las entradas. A este valor lo llamamos número mintérmino.
Por ejemplo, cuál combinación de entrada representa el mintérmino 5 (m5 )?
F = m2 + m3 + m4 + m7 (3.7)
X
F = m(2, 3, 4, 7) (3.8)
Mientras que la ecuación SOP es una serie de productos conectados por suma, la
ecuación POS (Productos de sumas) es una serie de sumas (OR) conectadas por la mul-
tiplicación (AND). Para formular una ecuación POS, decimos que la salida de una red
digital será 1 solamente cuando no sea 0. En la tabla 3.1, la salida es igual a 0 para los
mintérminos 0,1,5 y 6. Por lo tanto,
F = m0 m1 m5 m6 (3.9)
3.2.2. Maxtérminos
F = m0 m1 m5 m6
Y
F = m(0, 1, 5, 6) (3.10)
Simplificación de Circuitos
Conceptos básicos
Minimización por método algebraico
Minimización por tabla de Karnaugh
Condiciones No Importa
Compuertas universales
Implementación con compuertas universales
Saber Hacer
Obtener la función minimizada a partir de la ecuación canónica.
Implementar la ecuación minimizada utilizando compuertas universales
21
22 CAPÍTULO 4. SIMPLIFICACIÓN DE CIRCUITOS
F = BC + AB (4.1)
La convertimos en forma normal multiplicando por las variables faltantes y sus respec-
tivos complementos:
F = (A + A)BC + AB(C + C)
F = ABC + ABC + ABC + AB C (4.2)
Si se diera esta ecuación final en forma normal y se pidiese reducirla a su forma más
simple, ¿cómo se harı́a?
F = BC + AB (4.5)
4.1. TÉCNICAS DE REDUCCIÓN DE EXPRESIONES 23
El proceso empleado aquı́ es sencillo. Si en dos términos una variable aparece tanto en
su forma verdadera como complementada y las variables restantes son iguales, se puede
eliminar la variable y su respectivo complemento y el resultado es simplemente un término
compuesto de las variables restantes.
En los dos primeros términos, B está presente tanto en su forma normal como com-
plementada y las variables restantes son iguales. Por lo tanto, los primeros dos términos
pueden reducirse a:
En los dos últimos términos, B nuevamente está presente tanto en su forma normal
como complementada. Por lo tanto,
F = AC + AC (4.9)
Si examinamos la ecuación vemos que la podemos simplificar aún más. Puesto que A
aparece tanto en su forma verdadera como complementada, podemos reducirla a:
AC = AC = (A + A)C = C (4.10)
F = C (4.11)
Los mapas de Karnaugh son un método gráfico para reducir expresiones a su forma
mı́nima. Un mapa K es una tabla de verdad organizada especialmente de tal modo que
las reducciones posibles se puedan ver fácilmente. En las figuras 4-1, 4-2 y 4-3 se muestra
la forma de los mapas K de dos, tres y cuatro entradas. En lugar de enunciar todas las
combinaciones de las entradas como en una tabla de verdad normal, los mapas K usan
las posiciones de los cuadros en el mapa para representar las diferentes combinaciones de
entrada:
@B
0 1
A @@
0
0 1
1
3 2
@ BC
00 01 11 10
A @@
0
0 1 3 2
1
4 5 7 6
@ CD
00 01 11 10
AB@@
00
0 1 3 2
01
4 5 7 6
11
12 13 15 14
10
8 9 11 10
está representada por el cuadro en la fila 2, columna 4 del mapa K de 4 entradas? La fila
2 está marcada 01; la columna 4 está marcada 10. Colocando estos dos valores uno junto
al otro en orden fila-columna, se produce 0110, el cual es el mintérmino 6 o AB CD . El
cuadrado en la fila 3 columna 2 representa 1101, el cual es el mintérmino 13 o ABCD.
Observando más profundamente vemos que la etiqueta 00 en la fila 1 indica que A y B
son ambos 0 para toda la fila. De igual forma, la etiqueta 10 en la columna 4 indica que
C es 1 y D es 0 para toda la columna.
Para representar una función con un mapa K, los unos y los ceros se colocan en los
cuadrados apropiados de acuerdo con la combinación de entradas representada por cada
cuadro.
El arreglo especial del mapa K asegura que las combinaciones de entrada representadas
por dos cuadrados adyacentes son idénticas excepto que una variable aparece en su forma
verdadera en un cuadrado y en su forma complementada en el otro. Nótese que éste es
simplemente el criterio especificado en la sección 4.1.1 para la reducción de dos términos.
Por lo tanto, dos cuadrados adyacentes pueden ser elegibles para ser reducidos.
Esta relación puede verse mirando dos cuadros adyacentes en un mapa K. Por ejemplo,
considere los dos primeros cuadrados de la fila 1 de un mapa K de 4 entradas. El primer
cuadrado representa la combinación de entrada 0000, o A B C D . El segundo cuadrado
representa la combinación de entrada 0001, o A B CD. Entre estos dos términos, todo
es idéntico excepto que D aparece en su forma verdadera en el segundo cuadro y en su
forma complementada en el primer cuadro. Nótese que esta relación se mantiene entre dos
cuadrados adyacentes cualquiera, tomados ya sea horizontal o verticalmente. Además, la
relación se mantiene entre los lados exteriores (es decir, fila 1, cuadro 1 y 4 o columna 1,
filas 1 y 4, etc.); por lo tanto, los lados extremos son considerados adyacentes.
A B C F
0 0 0 0
0 0 1 0 @ BC
00 01 11 10
0 1 0 0 A @@
0 1 1 1
1 0 0 1 0 0 0 1 0
0 1 3 2
1 0 1 1
1 1 0 0 1 1 1 1 0
4 5 7 6
1 1 1 1
Figura 4.4:
26 CAPÍTULO 4. SIMPLIFICACIÓN DE CIRCUITOS
Puesto que los cuadrados adyacentes representan términos que pueden ser reducidos,
busque y encierre grupos de los unos adyacentes. Un grupo debe constar de 1,2,4,8 ó 16
unos, es decir, una potencia de 2.
En general, entre mayor sea el grupo encerrado, más sencilla será la expresión reducida.
Por lo tanto, primero busque grupos de 16 (no aplicable en este ejemplo, por supuesto) y
luego siga buscando grupos de 8, de 4, de 2 y finalmente, los unos aislados, hasta que los
haya agrupado a todos. Este proceso se muestra en la figura 4.5
@ BC
00 01 11 10
A @@
0 0 0 1 0
0 1
3 2
1 1 1 1 0
4 5
7
6
Figura 4.5:
La expresión resultante SOP constará de un término por cada grupo encerrado. Por lo
tanto, entre menos grupos encerrados, más simple será la expresión.
En el mapa K de la figura 4.5, obtuvimos 2 grupos.
El producto resultante para cada grupo estará compuesto de aquellas variables que
son iguales para todo el grupo. Por ejemplo, para el grupo vertical, tanto B como C son
1 para todo el grupo; por lo tanto, el término producto resultante es BC. En el grupo
horizontal, A es 1 en ambos cuadros y B es 0 en ambos cuadros. Por consiguiente, el
producto resultante será AB. Combinando ambos resultados obtendremos:
F = AC + AB (4.12)
Como segundo ejemplo, reduzcamos la ecuación 4.6 usando mapas K. En la figura 4.6
aparece la tabla de verdad normal y el mapa K resultante.
@ BC
00 01 11 10
A @@
' $
0 0 1 1 0
0 1 3 2
1 0 1 1 0
4 &
5 7 %
6
Figura 4.6:
Puesto que ya hemos encerrado todos los unos, no es necesario seguir buscando más
grupos. La ecuación resultante SOP tendrá solamente un término, en el cual aparecen sólo
aquellas variables que no cambian para todo el grupo. Vemos que solamente C es igual a
1 para los cuatro cuadros. Por lo tanto, la expresión final reducida es:
F =C (4.13)
Como ejemplo final, miremos un caso más complejo. En la figura 4.7 tenemos la tabla
de verdad y el mapa K para un circuito de 4 entradas.
@ CD
00 01 11 10
AB@@
00 0 1 0 0
0
$
1
3
'
2
01 1 0 1 1
4 5
7 6
11 1 0 0 1
12 %
13
15 &
14
10 0 1 0 0
8 9 11 10
Figura 4.7:
La figura 4.7 ilustra cómo reducir ésta función. Según se ve, puede formarse un grupo
de 4 partiendo del hecho de que los vértices extremos son considerados adyacentes. Nótese
una segunda aplicación del enrollamiento al formar el grupo de los unos entre las filas
superior e inferior. Finalmente, nótese el grupo de dos unos, uno usando un 1 que ya habı́a
sido utilizado.
El resultado constará de 3 términos puesto que tenemos tres grupos encerrados. Mirando
el primer grupo de 4, vemos que B y D permanecen constantes. Para el grupo vertical de
2, B es 0, C es 0 y D es 1. En el grupo final de 2, A es 0, B es 1 y C es 1. Por lo tanto, el
resultado es:
F = BD + B CD + ABC (4.14)
Muchas funciones tienen varias combinaciones de entrada para las cuales no se define
ninguna salida. Estas se denominan condiciones “no importa”.
En un mapa K, una condición “no importa” puede usarse como 0 o como 1, lo cual
resulta en una expresión más simple.
28 CAPÍTULO 4. SIMPLIFICACIÓN DE CIRCUITOS
Tomemos como ejemplo la red definida por la tabla de verdad que se muestra en la
tabla 4.1.
Esta red toma un dı́gito BCD de 4 bits como entrada. La salida es 1 si el dı́gito es mayor
que 5; de otra forma, la salida es 0. Puesto que es BCD, las entradas válidas corresponden
a los dı́gitos decimales entre 0 y 9; por lo tanto, los mintérminos 10 a 15 son considerados
como condiciones “no importa” y los marcamos con una X.
A B C D F
0 0 0 0 0
0 0 0 1 0
0 0 1 0 0
0 0 1 1 0
0 1 0 0 0
0 1 0 1 0
0 1 1 0 1
0 1 1 1 1
1 0 0 0 1
1 0 0 1 1
1 0 1 0 X
1 0 1 1 X
1 1 0 0 X
1 1 0 1 X
1 1 1 0 X
1 1 1 1 X
Cuadro 4.1:
@ CD
00 01 11 10
AB@@
00 0 0 0 0
0 1 3 2
01 0 0 1 1
4 5 7 6
11 X X X X
12 13 15 14
10 1 1 X X
8 9 11 10
Figura 4.8:
Observemos que en la figura se han encerrado dos grupos, para los cuales la expresión
resultante es:
4.2. IMPLEMENTACIÓN CON UN TIPO DE COMPUERTA 29
Puesto que las X las podemos tomar como 0. Ası́ como el 1, podemos formar grupos
según se muestra en la figura 4.9
@ CD
00 01 11 10
AB@@
00 0 0 0 0
0 1
'
3 2
$
01 0 0 1 1
'
4 5 7 6
$
11 X X X X
12 13 &
15 14 %
10 1 1 X X
&
8 9 11 10 %
Figura 4.9:
F = A + BC (4.16)
El uso de condiciones “no importa” tı́picamente nos permite la reducción adicional tal
como se ha demostrado.
4.2.1. MOTIVACIÓN
En general, entre más pocas y más baratas sean las partes requeridas para construir
un circuito, menor será el costo. Por lo tanto, un objetivo importante en el diseño de un
circuito, es minimizar el número de elementos y su costo asociado.
30 CAPÍTULO 4. SIMPLIFICACIÓN DE CIRCUITOS
Para ilustrar lo anterior, nos remitimos al capı́tulo dos en el cual se introdujeron algunas
ideas para convertir una expresión POS a SOP en un diagrama lógico. Por ejemplo, dada
la siguiente expresión SOP:
F = AB + CD (4.17)
Para obviar la ineficiencia, se acostumbra implementar una expresión que use solamente
un tipo de compuerta, compuertas NAND o NOR. La compuerta NAND es la función cuya
implementación es más “natural” a nivel interno del chip. Esta cualidad hace que la com-
puerta NAND sea la más rápida y la más barata de los chips TTL. Además, las compuertas
NAND y NOR pueden actuar como inversores, eliminando la necesidad de chips inversores
separados.
Las leyes del álgebra booleana nos permiten convertir una expresión booleana en una ex-
presión equivalente que sea directamente implementable con el tipo de compuerta deseada.
F = AB (4.18)
Por lo tanto, para implementar una expresión usando sólo compuertas NAND, el ob-
jetivo es reducir todas las operaciones lógicas a la forma anterior, es decir, a la de una
compuesta NAND.
4.2. IMPLEMENTACIÓN CON UN TIPO DE COMPUERTA 31
F = AB + CD (4.19)
F = AB + CD (4.20)
F = (AB).(CD) (4.21)
1. (AB)
2. (CD)
3. XY
Figura 4.10:
F =A+B (4.22)
F = AB + CD (4.23)
F = AB + CD (4.24)
F = (A + B) + (C + D) (4.25)
1. (A + B)
2. (C + D)
Finalmente, la función lógica final entre 1 y 2 es la función OR, la cual se puede obtener
invirtiendo la salida de la NOR
Figura 4.11:
Como puede observarse, este método puede llegar s ser muy complejo y en consecuencia,
la probabilidad de error es alta.
Figura 4.12:
F = AB (4.26)
G = AB F =G (4.27)
Esta ecuación puede reducirse a la función AND complementando la ecuación para re-
mover el NOT. Por lo tanto, la compuerta NAND ejecutará la función AND si invertimos
la salida.
F =A+B (4.28)
F =A+B (4.30)
F = CD (4.31)
34 CAPÍTULO 4. SIMPLIFICACIÓN DE CIRCUITOS
G=A+B F =G (4.33)
Definiciones simbólicas
Notamos que la presencia de un cı́rculo a la entrada indica que la entrada debe ser
invertida para ejecutar apropiadamente la función dictada por la forma del sı́mbolo, es
decir, la función AND y OR.
Además, la presencia de un cı́rculo a la salida indica que ésta debe invertirse para
ejecutar apropiadamente la función dictada por la forma del sı́mbolo.
Para definir aún más el significado de los cı́rculos en los sı́mbolos de las compuertas,
podemos decir que una compuerta con un cı́rculo a la salida tiene una salida ACTIVA
BAJA. Una compuerta con cı́rculos en la entrada tiene entradas ACTIVAS BAJAS. De
igual manera, una compuerta sin cı́rculo a la salida tiene salida ACTIVA ALTA y una
compuerta sin cı́rculos a la entrada tiene entradas ACTIVAS ALTAS.
Por ejemplo, la forma AND de la compuerta NAND se puede pensar como una compuer-
ta AND con entradas activas altas y la salida activa baja. La forma OR de la compuerta
NAND se puede pensar como una compuerta OR con entradas activas bajas y la salida
activa alta.oo
El término activo alto se refiere a niveles lógicos como los que hemos mencionado has-
ta ahora: un verdadero se representa por un nivel lógico alto. Activo bajo indica que un
verdadero es representado por un nivel lógico bajo en lugar de un nivel lógico alto. Para
ilustrar esto, consideremos la ejecución de la función AND con la compuerta NAND. La
función AND produce una salida verdadera solamente cuando todas las entradas son ver-
daderas. Si miramos la forma AND de la compuerta NAND, vemos que también ejecuta
la función AND pero como tiene una salida activa baja, el valor verdadero será indicado
por un nivel lógico bajo en lugar de un nivel lógico alto. Por lo tanto, para ver una salida
activa alta normal, debemos invertir la salida de una compuerta NAND.
Figura 4.15:
36 CAPÍTULO 4. SIMPLIFICACIÓN DE CIRCUITOS
Figura 4.16:
Puesto que tratamos con entradas y salidas activas altas en el mundo real, las entradas
iniciales y salidas finales generalmente deben ser activas altas. Si miramos la figura 4.16
vemos que esta condición ya está satisfecha. La siguiente etapa consiste en conectar los
sı́mbolos AND y OR. Puesto que la forma OR de la compuerta NAND requiere entradas
activas bajas y que la salida de la forma AND ya es activa baja, no se necesita conversión
de nivel y puede hacerse la conexión directa entre las salidas de las formas AND y las
entradas de la forma OR. En general, puede hacerse una conexión directa entre una salida
y una entrada, ambas activas bajas, o entre una salida y una entrada, ambas activas altas.
Si una es activa baja y la otra es activa alta, debemos utilizar un inversor. Haciendo las
conexiones como se ha descrito, el diagrama lógico final es como sigue:
Figura 4.17:
Nótese que al usar las formas AND y OR de las compuertas NAND, es mas obvia la
función del circuito. Mirando la figura 4.17, vemos rápidamente que es una implementación
SOP, mientras que si vemos el circuito equivalente de la figura 4.10, encontramos que la
función real del circuito no es clara.
4.2. IMPLEMENTACIÓN CON UN TIPO DE COMPUERTA 37
Figura 4.18:
Para implementar solamente con compuertas NAND de dos entradas, procedemos como
antes reemplazando las compuertas OR con la forma OR de la compuerta NAND, ası́:
Figura 4.19:
Para completar el diagrama debemos asegurarnos que hay entradas y salidas activas
altas. Puesto que las entradas de las formas OR son activas bajas, debemos invertir las
variables de entrada. Si suponemos entradas de doble riel, no mostramos los inversores de
entrada. La salida final del circuito ya es activa alta, por lo cual no necesitamos conversión.
La conversión final se realiza entre la primera y la segunda formas OR, en donde vemos
que es necesario un inversor.
Figura 4.20:
38 CAPÍTULO 4. SIMPLIFICACIÓN DE CIRCUITOS
Al igual que con las compuertas NAND, el primer paso para implementarlas usando
solamente compuertas NOR, es reemplazar todas las compuertas OR con la forma OR
de la compuerta NOR y todas las compuertas AND con la forma AND de la compuerta
NOR. Con la figura 4.14 obtendremos:
Figura 4.21:
Si hacemos las mismas consideraciones de niveles activos alto y activos bajos, finalmente
obtendremos:
Figura 4.22:
.
Capı́tulo 5
Aplicaciones Combinacionales
Conceptos básicos
Multiplexores
Demultiplexores
Sumadores
Codificadores
Comparadores
Convertidores de Código
Circuitos MSI
Saber Hacer
Conocer y saber utilizar las aplicaciones más importantes de tipo combinacional, tales
como mux, demux, sumador, comparador, convertidores de código.
39
40 CAPÍTULO 5. APLICACIONES COMBINACIONALES
5.1.1. Definición
Nuestro estudio previo de las bases de la lógica digital y de diseño de circuitos, nos
permitió entender y diseñar algunos circuitos importantes. En este capı́tulo estudiaremos
dos de esos circuitos: el multiplexor y el demultiplexor. El multiplexor (mux) efectúa la
función de un conmutador rotatorio, seleccionando una de varias entradas para conectar
a una sola salida; por lo general, al multiplexor se le denomina selector. El demultiplexor
(demux) realiza la función inversa, es decir, conecta una sola entrada a una de varias
salidas. Al demultiplexor frecuentemente se le denomina decodificador. Estas dos funciones
se usan intensamente en redes digitales.
La combinación mux-demux se utiliza para la comunicación serial con el fin de reducir el
número de cables requeridos para pasar los datos. Esta pareja puede ser usada de manera
similar para manejar despliegues de dı́gitos múltiples tales como los que se encuentran en
las calculadoras. Los mux se usan frecuentemente en los circuitos digitales para controlar
el enrutamiento de los datos y las señales. Por ejemplo, se puede usar un multiplexor para
seleccionar la entrada a un registro particular de varias fuentes.
Los decodificadores son usados para efectuar decodificaciones de direcciones de memo-
ria. Basados en ciertas lı́neas de dirección, el decodificador puede suministrar las señales de
habilitación a los chips de memoria apropiados. Además, tanto los mux como los demux
pueden utilizarse para evaluar expresiones booleanas sencillas usando menos hardware
que si se usaran compuertas individuales. Existen muchas aplicaciones adicionales; las
descritas, simplemente empiezan a ilustrar la flexibilidad de estas dos funciones.
5.1.2. El Multiplexor
S2 S1 F
0 0 D0
0 1 D1
1 0 D2
1 1 D3
F = S2 S1 D0 + S2 S1 D1 + S2 S1 D2 + S2 S1 D3 (5.1)
En la figura 5.1 se muestra una implementación con compuertas NAND del multiplexor
4 a 1. Puesto que la función mux es tan útil, existen muchos chips TTL que efectúan la
operación equivalente del circuito mostrado en la figura 5.1. Por ejemplo, el 74153 contiene
dos multiplexores 4 a 1, el 74151 contiene un multiplexor 8 a 1 y el 74157 contiene 4
multiplexores 2 a 1.
5.1.3. El Demultiplexor
El demultiplexor conecta una entrada a una de varias salidas. La salida se escoge por
medio de las lı́neas de selección tal como en el mux. El uso más común del demultiplexor
es el de decodificador. De hecho, los demux son conocidos como decodificadores. Un de-
codificador coloca en 0 la lı́nea de salida definida por las lı́neas de selección. Esta función
se implementa fácilmente con el demux conectando la lı́nea de entrada con 0.
Para ilustrar lo anterior, consideremos la operación de un demux que conecta una
entrada a una de cuatro salidas, llamado demultiplexor de 1 a 4. El demux es llamado
decodificador de 2 a 4 puesto que dos lı́neas seleccionan una de cuatro salidas. La operación
de este demux se ilustra en la tabla 5.2
DI S2 S1 F0 F1 F2 F3
0 0 0 0 1 1 1
0 0 1 1 0 1 1
0 1 0 1 1 0 1
0 1 1 1 1 1 0
1 X X 1 1 1 1
Cuadro 5.2:
Nótese que el valor por omisión de las salidas es 1. Por lo tanto, cualquier salida no
seleccionada será 1. Entonces, como lo ilustra la tabla 5.2, cuando el dato en DI sea 1,
todas las salidas serán 1 sin importar la combinación de las lı́neas de selección.
El decodificador coloca en 0 la lı́nea de salida seleccionada por las lı́neas de selección.
Según se aprecia en la tabla 5.2, esto se logra conectando a 0 la entrada de datos. Por lo
tanto, ésta puede verse como una habilitación activa baja para el decodificador. Si esta
señal de habilitación no es baja, el decodificador no funcionará (todas las salidas serán 1); a
menudo, los decodificadores tienen más de una lı́nea de habilitación, haciéndose necesario
que todas la lı́neas de habilitación estén activadas para que funcione el decodificador.
5.1. MULTIPLEXORES Y DEMULTIPLEXORES 43
F0 = Di S2 S1 (5.2)
F1 = Di S2 S1 (5.3)
F2 = Di S2 S1 (5.4)
F3 = Di S2 S1 (5.5)
En la figura 5.3 se muestra una implementación con compuertas NAND del demux 1 a
4 (decodificador 2 a 4)
De igual modo que los multiplexores, el circuito demultiplexor está disponible en difer-
entes variaciones de chips TTL. Por ejemplo, el 74138 contiene dos demux 1 a 4 (decodi-
ficador 3 a 8) y el 74139 contiene dos demux 1 a 4 (decodificadores 2 a 4).
También los demux se colocan en los circuitos como unidades funcionales separadas.
En la figura 5.4 se muestran las representaciones caracterı́sticas:
Nótese la presencia de los indicadores activos bajos en la entrada de habilitación y
en cada una de las salidas de la representación como decodificador. Esto indica que el
44 CAPÍTULO 5. APLICACIONES COMBINACIONALES
decodificador se habilita con una entrada baja y que la salida adquiere el valor bajo al
seleccionarla.
Ahora que ya entendemos la operación básica del mux y el demux, miraremos en detalle
las aplicaciones mencionadas en la sección 5.1.4.
Comunicación
Enrutamiento de datos
En un computador tı́pico, el contador de programa (CP ) debe ser cargado desde fuentes
diferentes. Por ejemplo, cuando se tiene la ejecución en lı́nea recta, el CP simplemente
debe incrementarse después de cada instrucción. En este caso, el CP debe ser cargado
desde un contador. Si se ejecuta una instrucción de salto absoluto, el CP se cargará con
la dirección especificada en la instrucción, la cual normalmente estará en el registro de
instrucción RI. Si se ejecuta una instrucción de salto relativo, entonces el desplazamiento
especificado debe sumarse al valor corriente de CP . En este otro caso el CP se cargará con
la salida de la unidad aritmética lógica U AL.
Un mux es ideal para este tipo de situación: seleccionar una de varias entradas. En
esta situación, el CP se conecta a la salida del mux y las entradas con el contador, con el
registro de instrucción y con la U AL, tal como ya se describió. Colocando diferentes valores
en las lı́neas de selección, puede escogerse la entrada al CP desde diferentes fuentes. El
valor colocado en las lı́neas de selección proviene de un campo, una microinstrucción o de
un secuenciador fijo, que controla la ejecución de las instrucciones.
Existe un problema obvio con este enfoque. Suponga que el computador con el cual se
está trabajando, utiliza direcciones de 16 bits. El mux que se necesita debe tener entradas
de 16 bits cada una pero un mux solo tiene una entrada y no 16. La solución es utilizar un
mux por cada bit de la palabra como se ilustra en la Figura 5.6 donde CO se refiere al bit
0 del contador, R0 se refiere al bit 0 de la dirección en el registro de instrucción, U AL0 se
refiere al bit 0 de la salida de la U AL y ası́ sucesivamente para los 15 bits restantes. Las
mismas lı́neas de selección van a todos los multiplexores.
46 CAPÍTULO 5. APLICACIONES COMBINACIONALES
Decodificación de Direcciones
Consideremos un sistema simple con microprocesador que tenga una memoria de 256
bytes. Suponga que esta memoria está hecha con un chip de RAM de 256X8 (256 registros
de 8 bits). Para identificar las posiciones de este chip se requieren 8 lı́neas de dirección
(direcciones 00-FF).
Esta configuración se muestra en la figura 5.7. Nótese que el chip de RAM tiene una
entrada de habilitación activa baja. La RAM se habilita en este caso colocando una señal
baja en la lı́nea de habilitación. Para no complicar el diagrama, no se han incluido las
ocho lı́neas de datos.
Ahora queremos incrementar la memoria del computador a 1K. Esto requiere obvia-
mente cuatro chips de RAM 256 x 8. El direccionamiento de estos chips puede dividirse
como sigue:
Dirección Chip
0000-00FF 0
0100-01FF 1
0200-02FF 2
0300-03FF 3
Las 8 lı́neas de dirección más bajas (A7 -A0 ) irán a las lı́neas de dirección de cada uno
de los cuatro chips para seleccionar una de las 256 posiciones de cada chip. Las siguientes
dos lı́neas de la dirección (A8 y A9 ) determinan cuál de los cuatro chips debe utilizarse.
5.1. MULTIPLEXORES Y DEMULTIPLEXORES 47
Un multiplexor se puede usar para implementar fácilmente una tabla de verdad sin
necesidad de circuitos complejos AND-OR. Consideremos la tabla de verdad 5.3
A B C F
0 0 0 1
0 0 1 1
0 1 0 0
0 1 1 1
1 0 0 1
1 0 1 0
1 1 0 0
1 1 1 0
Cuadro 5.3:
Una red digital que implemente esta tabla de verdad debe tener una salida 1 para
el mintérmino 0, una salida 1 para el mintérmino 1, una salida 0 para el mintérmino 2
y ası́ sucesivamente. Si se usa A,B y C como entradas a las lı́neas de selección de un
multiplexor de 8 a 1, la salida del multiplexor es la entrada 0 (I0 ) para el mintérmino 0,
la entrada 1 (I1 ) para el mintérmino 1 y ası́ sucesivamente. Por lo tanto, el multiplexor
48 CAPÍTULO 5. APLICACIONES COMBINACIONALES
puede usarse para implementar la tabla de verdad simplemente conectando las entradas
de la función a las lı́neas de selección y conectando las entradas del multiplexor a 1 o a 0
de acuerdo con la salida para ese mintérmino.
En la figura 5.9 se muestra el circuito respectivo.
A B C F
0 0 0 1
0 0 1 1
0 1 0 0
0 1 1 1
1 0 0 1
1 0 1 0
1 1 0 0
1 1 1 0
Cuadro 5.4:
Para AB = 00, la salida de la función es siempre 1; por lo tanto, la entrada 0 (I0 ) del
mux se conecta a 1. Si AB = 01, la salida de la función es 0 cuando C es 0 y 1 cuando C
es 1. Por lo tanto, se conecta C a la entrada 1 (Y1 ) del mux. Si AB = 10, la salida de la
función es 1 cuando C es 0 y 0 cuando C es 1. Por lo tanto, conectamos Cá la entrada 2 (I2 )
del mux. Si AB = 11, la salida de la función es siempre 0. Por consiguiente, conectamos
la entrada 3 (I3 ) a 0. Esta implementación se muestra en la figura 5.10.
5.2. SUMADORES BINARIOS Y OTROS CIRCUITOS COMBINACIONALES 49
La tabla de la suma para dos dı́gitos binarios se muestra en la tabla 5.5. Esta tabla
señala tanto la suma como el acarreo producidos por la adición de 2 bits.
A B Suma Acarreo
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1
Cuadro 5.5:
Ci n A B Suma Cout
0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1
Cuadro 5.6:
@ AB @ AB
00 01 11 10 00 01 11 10
C @@ C @@
0 0 1 0 1 0 0 0 1 0
0
1
3
2 0
1
3
2
1 1 0 1 0 1 0 1 1 1
4
5
7
6 4
5
7
6
Figura 5.12: Mapas K del sumador completo
Usando estas demoras, vemos que el acarreo de salida del bit 0 es válido después de 20ns.
El bit de acarreo de la salida del bit 1 es válido 20ns después del bit 0, y ası́ sucesivamente.
La salida del sumador de 4 bits no será válida hasta tanto C3 como S3 sean válidos. Por
consiguiente, el tiempo total necesario para el sumador de 4 bits será:
Cin a C0 = 20ns
C0 a C1 = 20ns
C1 a C2 = 20ns
C2 a S3 = 30ns
Tiempo de suma = 90ns
A medida que el número de bits que se van a sumar aumenta, el efecto de la propagación
del acarreo es aún más notorio. Por ejemplo, para un sumador de 32 bits el tiempo de suma
serı́a: 31 × 20ns + 30ns = 650ns. Como se puede ver, el tiempo de suma es proporcional
al número de bits que se van a sumar.
5.3. ANTICIPACIÓN DEL ACARREO (“CARRY LOOKAHEAD”) 53
El principal problema del circuito sumador de varios bits de la sección anterior es que la
salida de cada sumador depende del acarreo de salida del sumador anterior. Si se pudiera
determinar los valores de acarreo sin tener que esperar la propagación de los acarreos de las
etapas anteriores, el tiempo de suma serı́a independiente del número de bits del sumador
y por lo tanto, se reducirı́a.
Para lograr esto, notemos que un término (sumador) producirá acarreo bajo dos condi-
ciones. Primera: si ambas entradas son 1, se generará un acarreo sin importar el acarreo
que entre. Esto lo denominaremos “condición generadora”. Segundo: si sólo una de las en-
tradas es 1, se producirá acarreo si hubo acarreo de entrada, es decir, si la etapa anterior
produjo acarreo. A esta situación la denominaremos “condición propagadora”, puesto que
el acarreo de entrada será propagado o transmitido a la salida. Estas condiciones para un
término “i” pueden representarse en álgebra booleana como:
Usando esta relación, puede formarse una expresión para cada bit según se ilustra a
continuación para un sumador de 4 bits:
C0 = G0 + P0 .Cin
C1 = G1 + P1 .C0
= G1 + P1 (G0 + P0 .Cin )
= G1 + P1 .G0 + P1 .P0 .Cin
C2 = G2 + P2 .C1
54 CAPÍTULO 5. APLICACIONES COMBINACIONALES
Pi = Ai Bi + Ai Bi = Ai Bi + Ai Bi (5.7)
Como puede verse, son 2 retardos de compuertas, es decir, 40 ns, para evaluar un térmi-
no de acarreo. Las compuertas asociadas con la generación de la condición de propagación.
Esto, conjuntamente con la naturaleza de dos niveles de las expresiones de acarreo, da co-
mo resultado un total de 4 retardos de tiempos de suma para un sumador de 4 bits y para
un sumador de 32 bits se pueden calcular como sigue:
5.4. OTROS CIRCUITOS COMBINACIONALES IMPORTANTES 55
Como puede verse, el tiempo de suma es independiente del número de bits cuando se usa
la técnica de anticipación del acarreo. Esto resulta de una mejora significativa en el tiempo
de suma, especialemente cuando el número de bits del sumador crece. Desafortunadamente
es bastante complicado implementar estas técnicas en forma completa para un número
grande de bits. Por ejemplo, evaluar la expresión para el bit de acarreo más significativo
de un sumador de N bits, requiere una compuerta OR de N+1 entradas y N compuertas
AND desde 2 entradas hasta NH entradas. Para un sumador de 32 bits, esto significa una
compuerta OR de 33 entradas y 32 compuertas AND, desde 2 hasta 33 entradas para el
bit de acarreo más significativo.
Debido a esta complejidad, la anticipación completa del acarreo sólo se hace de 4 a 8
bits a la vez. Por ejemplo, consideremos un sumador de 32 bits compuesto de 4 sumadores
de 8 bits, cada uno con anticipación de acarreo. Con esta disposición, el acarreo debe
propagarse entre los 4 sumadores pero el efecto de propagación es menos dramático que
la propagación sobre 32 bits. Este sumador se muestra en la figura 5.16.
Los circuitos digitales representan la información “humana” por medio de alguna clase
de código. Por ejemplo, BCD es un código binario que permite representar los valores
56 CAPÍTULO 5. APLICACIONES COMBINACIONALES
Cuadro 5.7:
5.4.2. Comparadores
A menudo se necesita comparar dos valores binarios. Dados dos valores binarios, un
comparador produce una o varias salidas indicando igualdad, menor que, mayor que, y
ası́ sucesivamente. Cuando se diseña un comparador, generalmente no es necesario derivar
expresiones para cada salida como función de las entradas solamente. Por ejemplo, si A > B
y A < B, se expresan como alguna función de las entradas, todas las otras relaciones se
pueden expresar como función de las salidas. Por ejemplo, A es igual a B solamente si A
no es mayor que B y B no es mayor que A.
Los circuitos digitales a menudo se “comunican” con el mundo externo por medio de de-
spliegues LED de siete segmentos tales como los que se encuentran en la calculadora. Estos
despliegues constan de 7 LEDs individuales que se iluminan para formar diferentes dı́gitos.
Un decodificador-manejador de despliegues se utiliza para iluminar apropiadamente esos
segmentos basados en un valor de entrada. Por ejemplo, un decodificador-manejador de
5.4. OTROS CIRCUITOS COMBINACIONALES IMPORTANTES 57
despliegue BCD tiene 4 entradas (los 4 bits del dı́gito BCD) y siete salidas, una por cada
segmento.
Basado en el dı́gito BCD de entrada, las salidas de siete segmentos se deben disponer
apropiadamente para formar el dı́gito en el despliegue. Existen 2 configuraciones básicas
para los despliegues de 7 segmentos: ánodo común y cátodo común.
En un despliegue de ánodo común, el ánodo o lado positivo de cada LED es común,
como se muestra en la figura 5.17. Con estos despliegues, un LED individual se enciende si
se conecta a tierra. Por lo tanto, un decodificador-manejador para un despliegue de ánodo
común coloca su salida baja para encender el segmento. En un despliegue de cátodo común,
el cátodo o lado negativo de cada LED es común, según se muestra en la figura 5.18. Para
encender cada LED de los despliegues, debe conectarse el LED a un voltaje positivo. Por
lo tanto, el manejador debe colocar su salida alta para encender un segmento.
.
58 CAPÍTULO 5. APLICACIONES COMBINACIONALES
Capı́tulo 6
Conceptos básicos
PLD: Programmable Logic Device
PROM
PAL
GAL
FPGA
VHDL
Entidad
Arquitectura
Puerto
Modo de un puerto
Señal
Variable
Configuración
Declaración del paquete
Cuerpo del paquete
Tipos de datos
Vectores
Descripción funcional
Descripción por flujo de datos
Descripción estructural
Saber Hacer
Conocer las diferentes opciones de PLD.
Reconocer la celda básica de un circuito programable.
Conocer la estructura básica de un lenguaje de descripción de hardware como lo es VHDL.
Conocer los diferentes componentes del lenguaje.
59
60 CAPÍTULO 6. INTRODUCCIÓN A LOS PLD Y A VHDL
6.1.1. Introducción.
Los dispositivos lógicos programables PLD, son una alternativa para el diseño de sis-
temas digitales y prototipos de baja escala de integración, esto se debe a la disponibilidad
en el mercado y al soporte existente para las herramientas de desarrollo asistido por com-
putador, CAD.
Un dispositivo lógico programable o PLD por sus siglas en inglés (Programmable Logic
Device), es un circuito integrado que contiene gran número de compuertas, flip-flops y
registros internamente conectados.
Estas conexiones son de dos tipos: fijas y programables. Las conexiones fijas son aquellas
que no varı́an, mientras que las conexiones programables se pueden o no desconectar.
Muchas de estas conexiones programables son tipo fusible, fusibles que son “quemados”
durante la programación, permitiendo de esta manera configurar nuestra aplicación dentro
de un PLD.
Algunas de las caracterı́sticas principales de los PLD pueden ser:
Consumo de potencia.
Tiempo de retardos.
FPGA, son arreglos de compuertas programables en campo, está formado por blo-
ques lógicos configurables.
PROM, Memorias de Sólo Lectura. Son también conocidas como PLE (elementos
lógicos programables), constan de un arreglo AND fijo, el cual decodifica las direcciones,
2 entradas, conectado a un arreglo OR programable.
En la figura 6.2 se muestra una PROM de dos entradas, cuatro lı́neas de producto y
cuatro salidas.
GAL, Lógica de Matriz Genérica. En esta tecnologı́a los fusibles de un PAL son
reemplazados por un bloque E2 CMOS. Su lógica de salida es programable y no se habla
de una arreglo OR, sino de una OLMC, macro celda lógica de salida. Esta permite el
trabajo en modo combinacional, buffer de tercer estado y modo registrado. Con el GAL
se pueden emular los PAL. En la figura 6.5 se muestra el detalle de una macro celda lógica
de salida.
La GAL puede configura en tres modos de operación:
Sencillo o simple , en donde se trabaja lógica combinacional sin salida de tercer estado.
En la figura 6.6 se observa la macro celda en modo combinacional, como puede
observarse, la salida queda definida como entrada o salida.
Complejo , en donde se trabaja lógica combinacional con salida de tercer estado con-
trolada, lo cual permite usar un pin como entrada y salida dentro de un mismo
6.1. INTRODUCCIÓN A LOS DISPOSITIVOS PROGRAMABLES. 63
diseño.
Registrado , el cual hace que cada macro celda de salida funcione en una configuración
combinacional con salida de tercer estado o un modo sincrónico con un flip - flop
tipo D sincronizado con una señal de reloj común a todas las macro celdas.
Mayor rendimiento, con retardos de 15 nano segundos para PLD de tecnologı́a CMOS
y de 10 nano segundos para PLD de familia TTL.
6.2.1. Introducción.
Tal como lo indican sus siglas, VHDL (Hardware Description Language) es un lenguaje
orientado a la descripción o modelado de sistemas digitales; es decir, se trata de un lenguaje
mediante el cual se puede describir, analizar y evaluar el comportamiento de un sistema
electrónico digital.
VHDL es un lenguaje poderoso que permite la integración de sistemas digitales sencil-
los, elaborados o ambos en un dispositivo lógico programable, sea de baja capacidad de
integración como un GAL, o de mayor capacidad como los CPLD y FPGA.
(a) (b)
(c)
Figura 6.8: 6.8(a) Descripción a nivel de compuerta. 6.8(b) Sı́mbolo funcional de la entidad.
6.8(c) Diagrama a bloques relativo de la entidad.
6.2.3. Entidad
Una entidad (entity) es el bloque elemental de diseño en VHDL. Las entidades son
todos los elementos electrónicos (sumadores, contadores, compuertas, flip-flops, memorias,
multiplexores, etc.) que forman de manera individual o en conjunto un sistema digital. La
entidad puede representarse de muy diversas maneras; por ejemplo, la figura ?? muestra
la arquitectura de un sumador completo a nivel de compuertas; ahora bien, esta entidad
se puede representar a nivel de sistema indicando tan sólo las entradas (Cin, A y B) y
salidas (SUMA y Cout) del circuito: figura ??. De igual forma, la integración de varios
subsistemas (medio sumador) puede representarse mediante una entidad, figura ??. Los
subsistemas pueden conectarse internamente entre sı́; pero la entidad sigue identificando
con claridad sus entradas y salidas generales.
6.2. VHDL: SU ORGANIZACIÓN Y ARQUITECTURA. 67
Cada una de las señales de entrada y salida en una entidad son referidas como puertos,
los cuales son similares a una terminal (pin) de un sı́mbolo esquemático. Todos los puertos
que son declarados deben tener un nombre, un modo y un tipo de dato. El nombre se
utiliza para referenciar al puerto; el modo permite definir la dirección que tomará la
información, es decir, si es de entrada o de salida, y el tipo define qué clase de información se
trasmitirá por el puerto. Por ejemplo, respecto a los puertos de la entidad que representan
a un comparador de igualdad (figura 6.9), las variables a y b denotan los puertos de
entrada y la variable c se refiere al puerto de salida.
Modos
Modo in. Se refiere a las señales de entrada a la entidad. Este sólo es unidireccional y
nada más permite el flujo de datos hacia dentro de la entidad.
Tipos de datos
Los tipos se refieren a las diversas clases de valores (datos) que el diseñador establece
para los puertos de entrada y salida dentro de una entidad; se asignan de acuerdo con las
68 CAPÍTULO 6. INTRODUCCIÓN A LOS PLD Y A VHDL
Bit vector (vector de bits) que representa un conjunto de bits para cada variable de
entrada o salida.
Los anteriores son sólo algunos de los tipos que maneja VHDL.
Los números de las lı́neas (1, 2, 3, 4, 5) no son parte del código; se usan como referencia
para explicar alguna sección en particular. Las palabras en negrilla están reservadas por
el lenguaje de programación VHDL; esto es, tiene un significado especial para el programa;
el diseñador asigna los otros términos.
La lı́nea 1 inicia con dos guiones (–), los cuales indican que el texto que está a la derecha
es un comentario cuyo objetivo es documentar el programa; el compilador ignora todos los
comentario. En la lı́nea 2 se inicia la declaración de la entidad con la palabra reservada
entity, seguida del identificador o nombre de la entidad (sumador) y la palabra reservada
is. Los puertos de entrada y salida (port) se declaran en las lı́neas 3 y 4, respectivamente
- en este caso los puertos de entrada A, B y Cin -, mientras que SUMA y Cout representan
los puertos de salida. El tipo de dato utilizado para todos los puertos es bit, lo cual indica
que sólo pueden manejarse valores de ’0’y ’1’lógicos. Por último, en la lı́nea 5 termina la
declaración de entidad con la palabra reservada end, seguida del nombre de la entidad
(sumador).
Identificadores ??????
Los identificadores son simplemente los nombres que se usan para referir variables,
señales, procesos, etc. Pueden ser números, letras del alfabeto y guiones bajos ( ) que
separen caracteres y no tienen una restricción en cuanto a su longitud. Todos los identifi-
cadores deben seguir las reglas que aparecen en la tabla 6.1.
VHDL tiene una lista de palabras reservadas que no son válidos como identificadores
(vea apéndice A).
70 CAPÍTULO 6. INTRODUCCIÓN A LOS PLD Y A VHDL
La entidad sumador realizada en el circuito del listado anterior, usa bits individuales,
los cuales sólo pueden representar dos valores lógicos (0 o 1). De manera general, en la
práctica se utilizan conjuntos (palabras) de varios bits; en VHDL las palabras binarias se
conocen como vectores de bits, de la misma manera como los arreglos de los lenguajes
de programación convencionales. Como ejemplo considérense los vectores de 4 bits que se
muestran a continuación:
En la figura 6.11 se observa la entidad del sumador analizado antes, sólo que ahora las
entradas A, B y la salida SUMA incorporan vectores de 4 bits en sus puertos. Obsérvese
cómo la entrada Cin y la salida Cout son de un bit.
Para describir en VHDL una configuración que utilice vectores se utiliza la sentencia
bit vector, mediante la cual se especifican los componentes de cada uno de los vectores
utilizados. La parte del código que se usa para declarar un vector dentro de los puertos es
el siguiente:
La declaración define los vectores (A, B y SUMA) con cuatro componentes distribuidos
en orden descendente por medio del comando:
3 downto 0 (3 hasta 0)
Una vez que se ha establecido el orden en que aparecerán los bits enunciados en cada
vector, no se puede modificar, a menos que se utilice el comando to:
0 to 3 (0 hasta 3)
booleano, std logic), empleados en la programación en VHDL y que suelen formar parte
de las herramientas en software.
Por último, cuando en el diseño se utiliza algún paquete es necesario llamar a la librerı́a
que lo contiene. Para esto se utiliza la siguiente declaración:
library ieee;
Paquetes
El paquete std logic 1164 (estándar lógico 1164) que se encuentra en la librerı́a
ieee contiene todos los tipos de datos que suelen emplearse en VHDL (std logic vector,
std logic, entre otros).
El acceso a la información contenida en un paquete se hace por medio de la sentencia
use, seguida del nombre de la librerı́a y del paquete, respectivamente:
por ejemplo:
En este caso ieee es la librerı́a, std logic 1164 es el paquete y la palabra reservada all
indica que se pueden usar todos los componentes almacenados en el paquete.
El paquete numeric std define funciones para realizar operaciones entre diferentes
tipos de datos (sobrecargados); además, los tipos pueden representarse con signo o sin
éste.
El paquete numeric bit define tipos de datos binarios con signo o sin éste.
El paquete std arith define funciones y operadores aritméticos, como igual (=), mayor
que ( >), menor que (<), entre otros.
6.2.6. Arquitecturas
llevarán a cabo con el fin de que la entidad cumpla las condiciones de funcionamiento
deseadas.
La definición de una arquitectura se puede realizar utilizando tres enfoques, a saber:
Enfoque funcional.
Enfoque estructural.
Descripción funcional
16 c <= ’0 ’;
17 end if ;
18 end process compara ;
19 end funcional ;
20
Listado 6.2: Arquitectura funcional de un comparador de igualdad de 2 bits.
La descripción por flujo de datos indica la forma en que los datos se transforman al
pasar por el circuito. Este tipo de descripciones permite definir el flujo que tomarán los
datos entre módulos encargados de realizar operaciones. En este tipo de descripción se
pueden utilizar dos formatos mediante instrucciones when∼ else (cuando∼si no) o por
medio de ecuaciones booleanas.
Figura 6.13: a) Entidad del comparador de dos bits. b) Comparador de dos bits realizado
con compuertas.
3
4 entity comparador is
5 port ( a , b : in bit_vector (1 downto 0) ;
6 c : out bit ) ;
7 end comparador ;
8
9 architecture booleana of comparador is
10 begin
11 c <= ( a (1) xnor b (1) and a (0) xnor b (0) ) ;
12 end booleana ;
13
Listado 6.4: Arquitectura de forma de flujo de datos construido por medio de
ecuaciones boolenas.
Descripción estructural
internas, (x0 , x1 ) permiten proponer una solución. En VHDL esta conectividad se conoce
como netlist 1 o listado de componentes.
Para iniciar la programación de una entidad de manera estructural, es necesario la de-
scomposición lógica del diseño en pequeños submódulos (jerarquizar), los cuales permiten
analizar de manera práctica el circuito, ya que la función de entrada/salida es conocida.
En nuestro ejemplo se conoce la función de salida de las dos compuertas xnor, por lo que
al unirlas a la compuerta and, la salida c es el resultado de la operación and efectuada en
el interior a través de las señales x0 y x1 (figura 6.14).
Es importante resaltar que una jerarquı́a en VHDL se refiere al procedimiento de dividir
en bloques y no a que un bloque tenga mayor jerarquı́a (peso) que otro. Esta forma de
dividir el problema hace de la descripción estructural una forma sencilla de programar.
En el contexto del diseño lógico esto es observable cuando se analiza por separado alguna
sección de un sistema integral.
En el listado 6.5 se muestra el código del programa que representa al esquema de la
figura 6.14.
En el código se puede ver que en la entidad nada más se describen las entradas y salida
del circuito (a, b y c), según se ha venido haciendo (lı́neas 3 a la 6). Los componentes xnor
y and no se declaran debido a que se encuentran en el paquete de compuertas (gatespkg),
el cual a su vez está dentro de la librerı́a de trabajo (work), lı́nea 7.
1
Un netlist se refiere a la forma como se encuentran conectados los componentes dentro de una estructura
y las señales que propician esta interconexión.
78 CAPÍTULO 6. INTRODUCCIÓN A LOS PLD Y A VHDL
Generalidades
• Estructural: se definen los elementos que hacen parte del sistema y la forma
como se conectan.
• Funcional: el comportamiento del sistema se describe mediante un algoritmo.
• Flujo de datos: enfoque mixto de los dos anteriores.
Señales , las cuales permiten el modelado de circuitos. Son similares a las variables, pero
se diferencian en la forma en que se actualiza el valor. Una variable lo hace al ejecutar
la sentencia correspondiente, mientras que no ocurre lo mismo con las señales. Se
definen ası́:
TIME
Entidad y arquitectura
Los dos bloques básicos de VHDL son Entidad (entity), la cual define la interfaz del
sistema, y Arquitectura (architecture), en donde se define el comportamiento o diseño del
circuito.
El bloque entidad describe el modelo de entradas y salidas del sistema, o del elemento
del sistema.
El bloque arquitectura describe el comportamiento del sistema o elemento. Conviene
anotar que una entidad puede tener varias arquitecturas. Una combinación particular
entidad-arquitectura se puede declarar como componente.
Las sentencias secuenciales son aquellas que se ejecutan una después de la otra, de
la misma manera que en cualquier lenguaje de programación convencional. Dado que en
los sistemas electrónicos aparecen actividades que no son de naturaleza secuencial sino
paralela o concurrente, VHDL contempla el mecanismo de los procesos (process), los
cuales se ejecutan todos en forma paralela. Cada proceso se describe mediante un bloque
de sentencias, las cuales se ejecutan en forma secuencial.
Estilos de descripción
VHDL permite que se desarrollen los diseños de manera jerárquica. Las bibliotecas
permiten catalogar elementos que se van a utilizar en los diseños, no siendo necesario cada
vez volverlos a definir.
Las unidades definidas por VHDL son de dos tipos:
Circuitos Combinacionales en
VHDL
Conceptos básicos
Variables lógicas o binarias
Saber Hacer
Reconocer los sı́mbolos de las operaciones lógicas.
Manipular ecuaciones lógicas usando conceptos de álgebra booleana.
83
84 CAPÍTULO 7. CIRCUITOS COMBINACIONALES EN VHDL
7.1 Decodificador 3 a 8
MÉTODO CONVENCIONAL
Un decodificador es un circuito lógico que detecta la presencia de una determinada
combinación de bits (código) en sus entradas y señala la presencia de este código
mediante un cierto nivel de salida. En su forma más general, un decodificador tiene
n lı́neas de entrada y 2n lı́neas de salida.
El 74x138 es un decodificador 3 a 8. Su sı́mbolo lógico, tabla de verdad y estructura
interna se muestran a continuación:
Las entradas de selección son A, B y C, las salidas son Y0-Y7, activas bajas. Las
lı́neas G1 , G2A y G2B se emplean como habilitación.
Todas las variables lógicas del programa se definen del tipo std logic. Esto per-
mite especificar su valor por medio de cadenas de caracteres. Las entradas de selec-
ción (A2downto0) y las salidas activas bajas (Y 0to7) se definen como vectores. La
declaración select enumera los 8 casos de decodificación y asigna el valor adecuado
a la variable intermedia Y i. Este valor se asigna a la salida si todas las entradas de
habilitación son correctas.
MÉTODO CONVENCIONAL
7.2. DECODIFICADOR BCD A 7-SEGMENTOS (7449) 87
Entradas Salidas
Decimal
D C B A BI A B C D E F G
0 0 0 0 0 0 1 1 1 1 1 1 0
1 0 0 0 1 0 0 1 1 0 0 0 0
2 0 0 1 0 0 1 1 0 1 1 0 1
3 0 0 1 1 0 1 1 1 1 0 0 1
4 0 1 0 0 0 0 1 1 0 0 1 1
5 0 1 0 1 0 1 0 1 1 0 1 1
6 0 1 1 0 0 0 0 1 1 1 1 1
7 0 1 1 1 0 1 1 1 0 0 0 0
8 0 0 0 0 0 1 1 1 1 1 1 1
9 0 0 0 1 0 1 1 1 1 0 0 1
10 1 0 1 0 0 0 0 0 1 1 0 1
11 1 0 1 1 0 0 0 1 1 0 0 1
12 1 1 0 0 0 0 1 0 0 0 1 1
13 1 1 0 1 0 1 0 0 1 0 1 1
14 1 1 1 0 0 0 0 0 1 1 1 1
15 1 1 1 1 0 0 0 0 0 0 0 0
BI X X X X 1 0 0 0 0 0 0 0
DISEÑO TRADICIONAL.
Los sı́mbolos lógicos de 4 tipos de buffers de tercer estado se observan a continuación:
Los dos primeros buffers son no inversores y los últimos inversores. La señal extra
ubicada en la parte superior del sı́mbolo es la entrada de habilitación del buffer
de tercer estado. Esta puede ser activa alta o activa baja. Cuando el dispositivo
está activado, se comporta como un buffer común o como inversor. Cuando el buffer
no está activado, su salida va a un estado de alta impedancia, es decir se comporta
como si el dispositivo estuviera desconectado. Los buffers de tercer estado permiten
que múltiples fuentes compartan una lı́nea sin que haya superposición de señales.
Un bus transceiver contiene pares de buffers de tercer estado conectados en direc-
ciones opuestas entre cada par de pines, de tal manera que los datos pueden trans-
ferirse en cualquier dirección. Un ejemplo de transcerver octal de tercer estado es el
7.3. BUFFER DE TERCER ESTADO 91
VHDL no tiene tipos y operadores para salidas de tercer estado, pero tiene primitivas
que pueden ser usadas para crear señales y sistemas con posibilidad de tercer estado.
Por ejemplo, el tipo std logic define ’Z’como uno de los 9 posibles valores que puede
tomar una señal digital. Este valor se usa para el estado de alta impedancia. En el
programa anterior se define un proceso, en el cual se emplean lazos if para evaluar el
estado de la entrada de habilitación y para asignarle a la salida una de las diferentes
entradas.
7.4 Multiplexor 8 a 1
DISEÑO TRADICIONAL.
7.4. MULTIPLEXOR 8 A 1 93
Entradas Salidas
Selección Habilitador
S2 S1 S0 E Y W
X X X 1 0 1
0 0 0 0 D0 D0
0 0 1 0 D1 D1
0 1 0 0 D2 D2
0 1 1 0 D3 D3
1 0 0 0 D4 D4
1 0 1 0 D5 D5
1 1 0 0 D6 D6
1 1 1 0 D7 D7
Este multiplexor consta de ocho entradas de datos, tres entradas para selección, una
entrada habilitadora y dos salidas, su funcionamiento es la de un switch digital el
cual enruta uno de los varios datos de entrada a la salida dependiendo de las entradas
de selección. Su tabla de verdad es como sigue.
Para implementación de este circuito mediante compuertas, se necesitan:
Figura 7.10: Sumador completo (full adder) de dos bits, esquema interno, sı́mbolo.
7.5 Mutliplicador
DISEÑO TRADICIONAL.
Una multiplicación combinacional se realiza basándose en el algoritmo de desplaza-
miento y suma. La multiplicación se realiza de forma similar a como se realizaba en
la primaria, solo que más fácil, ya que se multiplica por uno (1) o por cero (0) y la
suma se limita a contar unos (1).
Hay varias maneras de implementar la multiplicación entre dos números de n bits,
una de ellas es el diseño a partir de la tabla de verdad, la cual es viable cuandon
es pequeña (n < 4). Cuando se requieren multiplicaciones con un número mayor de
bits, se puede implementar el algoritmo de la primaria con la ayuda de compuertas
AND, para los productos entre bits, y sumadores completos de dos bits. Con una
adecuada interconexión se logra los resultados esperados.
La implementación de un multiplicador 4 bits x 4 bits se muestra en la siguiente
página. Como puede observarse, se requiere de 12 sumadores completos de dos bits,
los cuales cada uno esta formado por dos compuertas EXOR de 2 entradas, tres
compuertas AND de dos entradas y una compuerta OR de tres entradas, (como se
muestra en la siguiente figura) y 16 compuertas AND de dos entradas.
34 end loop ;
35 end loop ;
36 RAC (0) := ’0 ’;
37 for i in 0 to 6 loop -- suma final
38 RAS ( i ) := PCS (7) ( i +1) xor PCC (7) ( i ) xor RAC ( i ) ;
39 RAC ( i +1) := MAJ ( PCS (7) ( i +1) , PCC (7) ( i ) , RAC ( i ) ) ;
40 end loop ;
41 for i in 0 to 7 loop
42 P ( i ) <= PCS ( i ) (0) ; -- primeros 8 bits del producto ,
del full - adder
43 end loop ;
44 for i in 8 to 14 loop
45 P ( i ) <= RAS (i -8) ; -- siguientes 7 bits del producto
46 end loop ;
47 P (15) <= RAC (7) ; -- último bit , carry del full -
adder
48 end process ;
49 end vmul8x8p_arch ;
50
Listado 7.7: Multiplicador
Conceptos básicos
El latch S-R
Diagramas de tiempo
Tablas caracterı́sticas
El Flip-Flop
Flip-Flops TTL
Contador de rizado o asincrónico
Contador módulo n
División de frecuencia
Modificación de la secuencia de conteo
Contadores comercialmente disponibles
Saber Hacer
Entender el funcionamiento tanto del latch como del flip-flop. Saberlos diferenciar Con-
struir cualquier contador asincrónico Construir divisores de frecuencia
99
100 CAPÍTULO 8. INTRODUCCIÓN A LOS CIRCUITOS SECUENCIALES
Los circuitos que hemos visto hasta ahora han sido combinacionales. La salida de un
circuito combinacional es función solamente de las entradas.
La salida de un circuito secuencial es función no solamente de las entradas sino también
de la salida actual, es decir, se presenta retroalimentación.
Los circuitos secuenciales forman la base de los registros, memorias y máquinas de
estado, las cuales a su vez son unidades funcionales vitales en el diseño digital.
8.2 EL LATCH S- R
El circuito secuencial más sencillo es el latch S-R. A partir de este circuito se construyen
los flip-flops y a partir de los flips-flops, los registros, las memorias y las máquinas de estado
que hemos mencionado.
El latch S-R básico tiene dos entradas, S y R, y dos salidas, Q y Qque son siempre
opuestas.
La entrada S se usa para colocar (set) Q en 1; la entrada R se usa para borrar (Reset)
Q a 0.
En las figuras 8.1 y 8.2 se muestran dos implementaciones del latch S-R que usan las
compuertas NOR y NAND respectivamente. Como puede verse, la implementación NOR
tiene entradas activas altas. Esto indica que la operación Set o Reset se ejecuta bajando
temporalmente la lı́nea Set o Reset a 0.
Debido a la realimentación de las entradas, la salida permanecerá en 1 o en 0 aún de-
spués de que la señal “set” o “reset” haya desaparecido, con lo cual tendremos la capacidad
de memoria del latch. Se encarece al lector verificar esto examinando las secuencias de la
entrada mostradas en las figuras 8.3 y 8.4 y determinando las salidas de cada compuerta
8.2. EL LATCH S- R 101
Figura 8.3: Diagrama de tiempos del latch S-R con compuertas NOR.
del latch.
Describir el comportamiento de los circuitos secuenciales es difı́cil. Existen varios méto-
dos para descubrir la naturaleza de un circuito secuencial, incluyendo los diagramas de
estado, las tablas de estado, las tablas de transición, las tablas caracterı́sticas y los dia-
gramas de tiempo. En este capı́tulo veremos dos métodos: diagrama de tiempos simples y
tablas de caracterı́sticas reducidas.
S R Q+
0 0 Q No cambia
0 1 0
1 0 1
1 1 - Condición inválida
S R Q+
0 0 - Condición inválida
0 1 1
1 0 0
1 1 Q No cambia
La salida del latch S-R se transformará en el mismo instante en que la entrada genere
un cambio. A esto lo denominamos funcionamiento asincrónico. Pero en la mayorı́a de
los circuitos digitales, la temporización de los eventos es crı́tica. Generalmente se utiliza
un reloj para sincronizar la operación de las diferentes unidades funcionales del circuito.
Para trabajar en este ambiente, el latch sólo debe cambiar de estado cuando la señal
del reloj ası́ lo indique. A esto lo denominamos “funcionamiento sincrónico”. Los latches
modificados para operar sincrónicamente, se denominan flip-flops.
Para lograr la operación sincrónica, el latch debe cambiar de estado solamente bajo la
señal apropiada del reloj. Por ejemplo, supongamos que el latch debe cambiar de estado
sólo cuando la señal de reloj sube. La manera más sencilla de lograr esto es agregando
una compuerta a las entradas que le permita al latch “mirar” a las entradas solamente
cuando el reloj esté en alto. A esto lo denominamos “latch controlado por compuertas” y
se ilustra en la figura 8.5.
Las dos compuertas NAND de la izquierda forman la compuerta de control y las dos
compuertas NAND de la derecha forman el latch. Mientras la entrada del reloj (C) esté ba-
ja, la salida de la compuerta será siempre 1 sin importar el valor de S o R.
Cuando el reloj (C) pase a alto, entonces las entradas S y R se pasan al latch y la
salida cambia. El comportamiento de este circuito se muestra en la tabla 8.3
104 CAPÍTULO 8. INTRODUCCIÓN A LOS CIRCUITOS SECUENCIALES
C S R Q+
0 0 0 Q
Salida inmodificable
0 0 1 Q mientras C sea igual
0 1 0 Q a 0 (cero).
0 1 1 Q
1 0 0 Q No hay cambio
1 0 1 0
1 1 0 1
1 1 1 - Condición inválida
Existe un pequeño problema con esta solución. Durante el tiempo en que el reloj está al-
to, el latch controlado por la compuerta se comporta idénticamente al latch asincrónico
corriente. Por lo tanto, si la entrada cambia varias veces, también cambiará varias veces
el estado del latch. El problema se ilustra con el diagrama de tiempo de la figura 8.6
El primer ciclo del reloj, es “normal”. En éste, la lı́nea “S” está alta y “Q” sube también
tan pronto como el reloj sube.
El segundo ciclo del reloj ilustra el problema. Primero sube la lı́nea “R”, y “Q” cae a
0 tan pronto como el reloj sube.
Pero mientras el reloj está aún alto, la lı́nea “S” sube y por lo tanto, “Q” vuelve
nuevamente a 1 durante el mismo ciclo del reloj.
sube. En un flip-flop disparado por flanco trasero, las entradas se miran en el flanco del
reloj que baja.
El flip-flop disparado por flanco puede construirse fácilmente a partir del latch contro-
lado por las compuertas. Hay que agregar un circuito de estrechamiento del pulso antes
de la compuerta de entrada de modo que la compuerta esté activa solamente un instante
en el flanco del reloj que baja o sube. Esta implementación se muestra en la figura 8.7.
Nótese que se han agregado dos entradas, “Borrar” y “Preactivar”. Puesto que estas
entradas van directamente al latch, pueden activar o borrar la salida independiente del
reloj. Se les denomina “entradas asincrónicas” y son útiles para colocar el flip-flop en un
estado inicial.
Existen varias maneras de implementar el circuito de estrechamiento del pulso que ya
hemos mencionado.
En la Figura 8.8 se muestra una implementación sencilla. Este método se vale del hecho
de que una compuerta realmente toma tiempo en cambiar de estado.
Supongamos un estado inicial con la entrada baja del reloj. Debido al inversor de entra-
da, las entradas A y B en la compuerta NAND serán opuestas; la salida de la compuerta
NAND será 1 y la salida final será 0. Cuando el reloj sube, la entrada B de la compuerta
AND inmediatamente sube, pero la entrada A también permanece en alto hasta que el
inversor cambia de alto a bajo. Esto toma aproximadamente 10ns con TTL estándar. Por
lo tanto, durante 10ns, ambas entradas de la compuerta NAND están altas, la salida de la
compuerta NAND está baja y la salida del circuito está alta. Después de 10ns, el inversor
106 CAPÍTULO 8. INTRODUCCIÓN A LOS CIRCUITOS SECUENCIALES
de entrada produce una salida baja, la cual a su vez cambia la salida de la compuerta
NAND a 1 y la salida final retorna a 0.
Otra técnica para eliminar las transiciones de estado múltiple que pueden ocurrir en
un solo pulso de reloj, es el uso de una disposición maestro-esclavo. Un flip-flop maestro-
esclavo se forma de dos latches controlados por la compuerta, según se muestra en la figura
8.9.
El latch de la izquierda o maestro forma las entradas al flip-flop y el de la derecha o
esclavo forma las salidas del flip-flop. El latch maestro mira las entradas mientras el reloj
está alto. Cuando el reloj baja, el esclavo queda habilitado, para utilizar las salidas del
latch maestro como entradas. Por lo tanto, se “leen” las entradas mientras el reloj está alto
y se transfieren a las salidas cuando el reloj retorna a cero.
J K Q+
0 0 Q No cambia
0 1 0 Reset
1 0 1 Set
1 1 Q Conmuta
El flip-flop JK está disponible en varios CHIPS TTL con varias opciones. Por ejemplo,
el 7473 contiene dos flip-flops J-K con una entrada asincrónica de borrado, tal como se
mencionó previamente. El 7476 contiene dos flip flops J-K con borrado y pre-activación.
8.5.1. Flip-Flops D
El flip-flop D o flip-flop de datos sólo tiene una entrada de control, D. La salida del
flip-flop se coloca en el valor que traiga D en cada ciclo del reloj. En la figura 8.11 se da
a conocer el comportamiento descrito y la representación estándar del flip-flop D.
D Q+
0 0
1 1
8.5.2. El flip-flop T
T Q+
0 Q
1 Q
8.6 CONTADORES
8.6.1. DEFINICIÓN
Si un flip-flop J-K se usa como flip-flop T (uniendo J y K), la salida cambia de estado en
cada ciclo del reloj. Por tanto, después de 2 ciclos del reloj, la salida del flip-flop completa
un ciclo. Si la salida de este flip-flop es utilizada como entrada a un segundo flip-flop T,
la salida del segundo flip-flop oscilará con la mitad de la velocidad del primer flip-flop.
Cada flop-flip adicional agregado de esta manera, oscilará con la mitad de la velocidad del
flip-flop precedente. El comportamiento para los dos flip-flops es ilustrado en el diagrama
de tiempo mostrado en la figura 8.13.
Considerando la salida del primer flip-flop, Qa como el primer dı́gito y la salida del
segundo flip-flop como el segundo dı́gito, se obtiene un contador binario sencillo que va
8.6. CONTADORES 109
Consideraciones de Tiempo
El valor para la rata máxima de conteo asume que cada estado existe durante algún
tiempo corto antes del siguiente pulso de reloj.
El lı́mite práctico es menor puesto que a esta velocidad los estados 0 y 8 existirán
durante ese periodo.
El diagrama de tiempo de la figura 8.15 muestra el retardo de conmutación que ocurre
cuando se pasa del estado 15 al estado 0.
Los estados de salida de un contador se usan a menudo como entradas de control a los
multiplexores, decodificadores, memorias, etc. El estado puede representar una posición de
memoria que se va a leer o una salida del decodificador que se va a colocar en 0 pero con
un contador de rizado, la transición de un estado a otro no es instantánea. La figura 8.15
muestra la secuencia de transición de los flip-flops cuando un contador de rizado cambia
del estado 15 (1111) al estado 0 (0000).
En el lado descendente del reloj, el estado de salida es 15 (1111). Cuarenta n segundos
más tarde, Qa cae a 0 y cambia la salida a 14 (1110). Cuarenta ns después de Qa , Qb cae a
0 y deja la salida en 12 (1100). Qc cae a 0 40 ns después de Qb y deja la salida en 8 (1100)
y finalmente Qd cae a 0 40ns, después de Qc , 160ns después del lado original del reloj, con
la salida ahora en 0. De manera que al cambiar el contador del estado 15 al estado 0, los
estados 14, 12 y 8 existen durante 40ns cada uno. Estos estados intermedios son llamados
“ruidos” o “impulsos de decodificación”. Los ruidos no solamente se presentan al cambiar
del estado 15 al 0. En cualquier momento en que más de un flip-flop debe cambiar de
estado, existirán estados intermedios.
Para ilustrar el efecto de estos ruidos considérese un contador que tenga que manejar
las lı́neas de selección de un decodificador de 0 a 15. Las salidas del decodificador pueden
estar encendiendo uno de los 16 valores de un despliegue de siete segmentos. Pero como
ya se mencionó, cuando se conmuta del estado 15 al estado 0, existirán los estados 14,12
8.6. CONTADORES 111
y 8 durante 40ns. Por tanto, en esta aplicación, los despliegues 14, 12 y 8 se encenderán
durante 40ns cuando se requiere el cambio de 15 a 0. Por supuesto, un parpadeo 40ns no
es muy evidente para el ojo humano pero si la salida del decodificador está siendo tomada
por otro aparato digital, 40ns puede ser mucho tiempo.
Un contador de rizado se puede usar para dividir la frecuencia de una señal de reloj.
Por ejemplo, suponga que un circuito digital tiene un reloj de 10KHz. Además de la señal
de 10KHz, el circuito también requiere un reloj de 5KHz. En lugar de tener circuitos de
reloj separados para cada una de estas frecuencias, podemos obtener el reloj de 5KHz
dividiendo por 2 la señal de 10KHz.
Recordemos de la sección ?? que la salida de un flip-flop T oscila con la mitad de la
frecuencia del reloj de entrada. Por tanto, un contador de 1 bit ejecuta una operación
de división por 2. Igualmente, si añadimos un segundo flip-flop T, éste oscilará con la
mitad de la frecuencia del primero y con un cuarto de la frecuencia original. Por tanto, un
contador de rizado de 2 bits ejecuta una operación de división por 4. La operación “dividir
por n” que ejecuta el contador es igual al número de estados en la secuencia del contador.
Un contador de 2 bits tiene 4 estados, 0 a 3 y ejecuta una operación de división por 4. De
igual manera, un contador de 3 bits tiene 8 estados y ejecuta una operación de división
por 8.
los flip-flops; la operación de borrado de un flip-flop J-K 7476 toma un máximo de 40ns.
Finalmente, la salida se borra 90ns después del vértice descendente del reloj. Nótese que
el estado 5 existe durante 50ns pero mirando la figura 8.17, puede verse que el estado
intermedio no afecta a Qc .
Qc Qb Qa
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0 (fin del ciclo)
0 0 0
.. .. ..
. . .
Como puede verse, Qc cambia una vez durante la secuencia pero Qb también hace .lo
mismo por lo cual se puede tomar como salida. Adicionalmente, Qb es más simétrica: vale
0 durante 3 ciclos y 1 durante 2 ciclos.
Es importante que la salida del contador usado como salida de reloj, no esté afectada
por los ruidos. Por ejemplo, en la secuencia previa, Qa aparentemente permanece en 0 entre
el estado 4 y el estado 0. Pero según se muestra en la figura 8.17, Qa va temporalmente a
1 cuando se cambia de estado 4 al estado 0. Si se usara Qa como reloj, este corto perı́odo
de 40ns podrı́a ocasionar problemas.
Si la longitud de la secuencia deseada es par, se puede generar una onda completamente
simétrica. Una operación de división por 2 siempre produce una onda simétrica. Si se
descompone una operación de división par en dos operaciones de división en donde la
última es de división por 2, se producirá una onda simétrica.
Por ejemplo, una operación de división por 10 puede ejecutarse dividiendo por 5 y luego
por 2. La figura 8.19 muestra un contador divisor por 6 simétrico.
Los dos flip-flops de la derecha forman el contador divisor por 3. Nótese que la com-
puerta NAND borra el contador al cambiar de 2 a 3. El flip-flop de la izquierda es el divisor
por 2, de donde se toma la salida.
114 CAPÍTULO 8. INTRODUCCIÓN A LOS CIRCUITOS SECUENCIALES
Secuenciadores de Estado y
Controladores
Conceptos básicos
Diagrama de estado
Tabla de Transición
Contador sincrónico
Secuenciador
Implementación de un secuenciador
Saber Hacer
Distinguir entre contadores sincrónicos y asincrónicos
Construir un diagrama de estados de un proceso
Implementarlo con flip-flops o con circuitos programables
117
118 CAPÍTULO 9. SECUENCIADORES DE ESTADO Y CONTROLADORES
9.1 DEFINICIÓN
En el Capı́tulo anterior vimos varias formas en las cuales los contadores pueden ser
usados para controlar circuitos digitales auque muchas veces los requerimientos de control
van más allá de la simple secuencia ascendente de estados que produce un contador. Los
circuitos secuenciales que pueden generar cualquier secuencia especı́fica de estados son
denominados secuenciadores de estado o controladores.
A diferencia de los contadores de rizado, los secuenciadores de estado generalmente
son sincrónicos, es decir, todas las salidas cambian al mismo tiempo, basadas en un reloj
común. Obviamente un secuenciador de estado que genere una secuencia ascendente de
estados es simplemente un contador sincrónico pero con la capacidad de generar otras
secuencias de estados, los secuenciadores pueden producir una secuencia de control más
compleja. La salida de un secuenciador a menudo se divide en campos de varios tamaños y
cada campo está destinado a controlar una operación que debe ocurrir. En un procesador
aritmético sencillo, por ejemplo, los campos individuales podrı́an controlar el cargue de los
registros, el enrutamiento de los datos a través de lı́neas de selección en un multiplexor,
la selección de función en una unidad aritmética, etc. Como ayuda en el diseño de estos
elementos, se introducen dos métodos para ilustrar el comportamiento de los circuitos
secuenciales: el diagrama de estados y la tabla de transiciones.
Una tabla de transición enumera todas las posibles transiciones de estado y las entradas
necesarias para producir cada cambio. La Tabla 9.1 es una tabla de transición para un flip
flop J K. La segunda lı́nea, por ejemplo, muestra que para cambiar de 0 a 1, J debe estar
en 1 y K puede estar en 0 o en 1.
Como se describió en el Capı́tulo anterior, los contadores de rizado tienen muchos usos.
Sin embargo, en algunas aplicaciones los impulsos causados por la naturaleza asincrónica
del contador pueden ocasionar problemas. En un contador sincrónico, todos los flip flops
cambian de estado a partir de una señal de reloj común. Por tanto, todos los flip flops
cambian de estado al mismo tiempo y en consecuencia no existen los impulsos o saltos.
9.2. CONTADORES SINCRÓNICOS 119
En la Figura 9.1 están los mapas K y las ecuaciones para cada una de las entradas J
K. En la Figura 9.2 está el diagrama lógico que implementa este secuenciador.
120 CAPÍTULO 9. SECUENCIADORES DE ESTADO Y CONTROLADORES
@ Qb Qa @ Qb Qa
Qc @ 00 01 11 10 Qc @ 00 01 11 10
@ @
0 0 0 1 0 0 X X X X
0 1 3 2 0 1 3 2
1 X X X X 1 0 0 1 0
4 5
7
6 4 5
7
6
Jc = Qb Qa Kc = Qb Qa
@ Qb Qa @ Qb Qa
Qc @ 00 01 11 10 Qc @ 00 01 11 10
@ ' $ @ ' $
0 0 1 X X 0 X X 1 0
0 1 3 2 0 1 3 2
1 0 1 X X 1 X X 1 0
4 &
5 7 %
6 4 &
5 7 %
6
Jb = Qa Kb = Qa
@ Qb Qa @ Qb Qa
Qc @ 00 01 11 10 Qc @ 00 01 11 10
@' $ @' $
0 1 X X 1 0 X 1 1 X
0 1 3 2 0 1 3 2
1 1 X X X 1 X 1 1 X
&
4 5 7 6 % &
4 5 7 6 %
Ja = 1 Ka = 1
Figura 9.1: Mapas K y ecuaciones J K.
Para el secuenciador definido por el diagrama de estado de la Figura 9.3, los estados 3,5
y 6 no se muestran. Puesto que estos estados no son parte de la secuencia, las expresiones
para J y K se pueden hacer más simples omitiéndolos de la Tabla de transición (su
presencia resultarı́a en condiciones “no importa” en los mapas K). Pero si el secuenciador
se energiza en uno de estos estados no utilizados, ?´qué sucederı́a en los ciclos de reloj
sucesivos? Generalmente, después de que se completa el diseño, se determina la secuencia
a partir de cada estado no utilizado y se agrega a la Tabla de transición y al diagrama de
estado.
La secuencia a partir de un estado no utilizado se determina asumiendo que el estado
presente de las salidas es uno de los no utilizados. Calculando las entradas J y K a cada
flip flop a partir de las ecuaciones, se puede determinar el máximo estado para flip flop.
Las Figuras 9.6, 9.7 y 9.8 ilustran este proceso para los estados 3, 5 y 6 respectivamente.
Como puede verse, el estado 3 pasa al estado 4, el cual pertenece a la secuencia normal.
El estado 6 pasa al estado 0, el cual también pertenece a la secuencia normal. Estas
transiciones deben agregarse al diagrama de estado original, según se muestra en la Figura
9.9.
Si un estado no utilizado nunca entra al ciclo normal o si algunos estados no utilizados
deben entrar a un estado especı́fico del ciclo, deben incluirse esas transiciones de estado
en la Tabla de transiciones del diseño original y en las expresiones para las entradas J K.
9.3. SECUENCIADORES DE ESTADO 123
@ Qb Qa @ Qb Qa
Qc @ 00 01 11 10 Qc @ 00 01 11 10
@ ' $ @ ' $
0 0 0 X 1 0 X X X X
0 1 3 2 0 1 3 2
1 X X X X 1 0 X 1 X
4 5 &
7 6 % 4 &
5 7 %
6
Jc = Qb Kc = Qb
@ Qb Qa @ Qb Qa
Qc @ 00 01 11 10 Qc @ 00 01 11 10
@ ' $ @' $
0 0 1 X X 0 X X X 1
0 1 3 2
0 1 3 2
1 1 X X X 1 X X 1 X
4 &
5 7 %
6 &
4 5 7 6 %
Jb = Qc + Qa Kb = 1
@ Qb Qa @ Qb Qa
Qc @ 00 01 11 10 Qc @ 00 01 11 10
@' $ @' $
0 1 X X 0 0 X 1 X X
0 1 3 2 0 1 3 2
1 1 X X X 1 X X 1 X
&
4 5 %
7 6 &
4 5 7 6 %
Ja = Qb Ka = 1
Figura 9.4: Reducciones con mapas K y ecuaciones J K.
En ocasiones la secuencia de estados generada debe ser alterada por entradas externas.
En estas aplicaciones, el estado que sigue depende no solamente del estado actual sino
también de las entradas externas. Por tanto, las ecuaciones para las entradas J K deben
ser función no solamente del estado actual sino de las entradas externas. Consideremos
un sistema con dos ciclos. Un ciclo va de 0 a 2 y el segundo ciclo va de 3 a 5. La entrada
externa Y se utiliza para determinar cuál ciclo debe ejecutarse. Si Y es 0, debe ejecutarse
el primer ciclo y si Y es 1, debe ejecutarse el segundo ciclo. El primer ciclo entra y sale
solamente por el estado 0; el segundo ciclo entra y sale por el estado 3.
Este comportamiento se muestra en el diagrama de estado de la Figura 9.10 En la Tabla
?? se muestra la Tabla de transición.
La determinación de las expresiones reducidas se muestra en la Figura 9.11. El diseño
del diagrama lógico y la determinación de las transiciones no utilizadas se dejan como
ejercicio al lector.
126 CAPÍTULO 9. SECUENCIADORES DE ESTADO Y CONTROLADORES
@ Qb Qa @ Qb Qa
Y Q@ 00 01 11 10 Y Q@ 00 01 11 10
c c
@ @ ' $
00 0 0 0 0 00 X X X X
0 1 3 2 0 1 3 2
01 X X X X 01 0 1 X X
4 5
7
6 4 5 7 6
11 X X X X 11 0 1 X X
12 13 15 14 12 13 15 14
10 0 0 1 0 10 X X X X
8 9
11
10 8 &
9 11 %
10
Jc = Y Qb Qa Kc = Qa
@ Qb Qa @ Qb Qa
Y Q@ 00 01 11 10 Y Q@ 00 01 11 10
c c
@ ' $ @' $
00 0 1 X X 00 X X 1 1
0 1 3 2 0 1 3 2
01 0 1 X X 01 X X X X
4 5 7 6 4 5 7 6
11 0 1 X X 11 X X X X
12 13 15 14
12 13 15 14
10 1 1 1 X 10 X X X 1
8 &
9 11 %
10 &
8 9 11 10 %
Jb = Y Qc + Qa Kb = 1
@ Qb Qa @ Qb Qa
Y Q@ 00 01 11 10 Y Q@ 00 01 11 10
c c
@''$$ @
00 1 X X 0 00 X 1 1 X
0 1 3 2 &
0 1 3 2 %
01 1 X X X 01 X 0 X X
4 5 7 6 4 5 7 6
11 1 X X X 11 X 0 X X
12 13 15 14
'
12 13 15 14
$
10 1 X 1 0 10 X 1 X X
&
8 &
9 %
11 %
10 8 9 11 10
Ja = Qb + Qa Ka = Qc
Figura 9.11: Reducciones por mapas K y ecuaciones JK.
Capı́tulo 10
Registros
Conceptos básicos
Estructura de un registro
Registros de desplazamiento
Entradas y salidas de un registro
Entradas o salidas serie o paralelo
Interfaces de registros con otros sistemas
Registros disponibles comercialmente
Saber Hacer
Reconocer la estructura de un registro
Reconocer la necesidad de utilización de un registro
127
128 CAPÍTULO 10. REGISTROS
10.1 DEFINICIÓN
Los registros de un bit obviamente tienen aplicación limitada. ¿Cómo puede construirse
un registro de varios bits? En la Figura 10.1 se muestra un registro de 4 bits hecho de
cuatro flip flops D. Cada flip flop almacena 1 bit. La entrada de reloj a cada flip flop
proviene de una señal de cargue común. En el flanco delantero de la señal de cargue, cada
flip flop almacena el valor que está en la entrada D. Se pueden construir registros con más
bits, agregando un flip flop por cada bit adicional.
10.2. DISEÑO DE LOS REGISTROS 129
Figura 10.2: Registro de desplazamiento de cuatro bits con entrada serial y con salida
paralela
Los datos son cargados paralelamente en los registros multi bits discutidos anterior-
mente, según puede verse en la Figura 10.1. Pero en muchas aplicaciones, los datos no
están disponibles en un formato paralelo; por ejemplo, considere el problema de recibir
serialmente un valor de 4 bits. En esta aplicación, los datos vienen en una sola lı́nea, 1 bit
cada vez. Suponga que los datos son enviados de tal forma que en primer lugar aparece el
bit menos significativo y que una señal de reloj es activada cuando cada bit está disponible.
El circuito receptor necesita ejecutar una conversión serial a paralelo, almacenando cada
bit a medida que se recibe y luego de alguna manera, presentar el valor resultante de 4
bits.
En la Figura 10.2 se muestra un circuito que ejecutará la conversión serial a paralelo.
Como puede verse, la entrada D al primer flip flop es la lı́nea serial de los datos de entrada.
La entrada de datos a cada flip flop adicional es la salida del flip flop anterior. La señal
“bit disponible” va a la entrada del reloj de cada flip flop. Cuando esta señal se activa,
cada flip flop cargará el dato que está en su entrada D. Debido a las conexiones, el primer
flip flop almacenará el valor de la entrada serial y cada flip flop adicional almacenará la
salida del flip flop precedente. Por tanto, el valor de 4 bits representado por los 4 flip flops,
se desplaza una posición a la derecha y la posición de la izquierda se llena con el bit serial
que llega. Si esta operación se repite cuatro veces, el primer bit recibido estará disponible
en Qa , el segundo en Qb , etc.
El circuito mostrado en la Figura 10.2 es realmente un registro de desplazamiento de 4
bits. En un registro de desplazamiento normal, a la entrada “bit disponible” tı́picamente
se le llama entrada de reloj. El registro de desplazamiento mostrado en la Figura 10.2
tiene una entrada en serie y una salida en paralelo, puesto que los datos son cargados
serialmente y quedan disponibles en paralelo en las salidas.
Un registro de desplazamiento con entrada en serie y salida en paralelo, puede ejecutar
la conversión “serie a paralelo” necesaria para recibir la información serial pero ?´Cómo se
ejecuta la conversión “paralelo a serial” necesaria para enviar los datos en forma serial? En
esta aplicación, los datos son almacenados en el registro en paralelo y desplazados hacia
afuera a razón de un bit cada vez. Esto se puede efectuar con un registro de desplazamiento
con entrada en paralelo y salida en serie.
130 CAPÍTULO 10. REGISTROS
Figura 10.3: Registro de desplazamiento de cuatro bits con entrada paralela y salida serial
Con los registros discutidos hasta ahora, los valores son almacenados con base en un
reloj o señal de cargue. El valor de salida cambia solamente cuando se carga un valor nuevo
en el flanco del reloj. Otro tipo de registro, denominado comúnmente “latch transparente”,
opera de una manera ligeramente diferente. En lugar de una señal de reloj o de cargue,
el latch transparente tiene una compuerta o entrada de habilitación. Cuando se habilita,
10.3. INTERFACES DE REGISTROS CON OTROS MÓDULOS 131
las salidas del latch toman el valor de la entrada. Excepto por el retardo de propagación
del latch, éste es transparente. Cuando no está habilitado, las salidas permanecen en el
mismo estado como estaban en el instante en que desapareció la señal de habilitación.
Por ejemplo, suponga que existe un latch transparente con una habilitación activa alta.
Mientras esta habilitación está alta, las salidas toman el valor de las entradas; cuando
la lı́nea de habilitación está baja, las salidas permanecen en el estado existente cuando
la lı́nea estaba baja. Nótese la similitud con el latch S R controlado por la compuerta,
discutido anteriormente.
Los latches transparentes tienen varias aplicaciones. Por ejemplo, para reducir el número
de pines de un integrado, algunos microprocesadores multiplexan las lı́neas de datos con
las lı́neas de dirección, es decir, los mismos pines se usan tanto para el bus de direcciones
como para el bus de datos. Durante la mitad de un ciclo del reloj maestro, los pines
representan la dirección a la cual se está accediendo. Durante la otra mitad del ciclo, esos
mismos pines representan las lı́neas de datos. Con este tipo de procesador, puede usarse
un latch transparente para mantener el valor original de las lı́neas de dirección durante la
segunda mitad del ciclo cuando esas mismas lı́neas se vuelven lı́neas de datos.
Un registro externo tiene muchos usos en un sistema con microprocesador. Por ejemplo,
podrá usarse la salida de un registro de 8 bits para manejar 8 LED indicadores. El mi-
croprocesador podrá iluminar cualquier combinación en los LED almacenando diferentes
valores en el registro; aquı́ el procesador únicamente escribe en el registro. ?´Cómo se
interconectan el microprocesador y el registro en este tipo de aplicación?
La primera preocupación es cuándo cargar el registro con los datos del bus de datos.
Obviamente que esto debe hacerse solamente cuando el microprocesador está escribiendo
en el registro. Cuando esto ocurre, la lı́nea escriba baja y la lı́nea habilita para el registro
también baja, puesto que la dirección que está en el bus es la del registro. Si estas dos
lı́neas están bajas, el registro debe cargarse con los datos del bus de datos en el flanco
descendente de MCLK. Los registros diseñados en la sección ?? cargaban los datos en el
flanco ascendente del reloj. Nos referimos a esta señal como “Cargue”. Los requisitos de
interconexión se pueden resumir como sigue: Si escriba es bajo y habilita es bajo, entonces
en el flanco descendente de MCLK, “Cargue” debe volverse alta para cargar el registro.
Esta secuencia podrá ocurrir como se muestra en la Figura 10.5.
Ahora que están definidos los requisitos de tiempo de la interfaz, ?´cómo puede gener-
arse la señal “cargue”? En la Figura 10.5 vemos que si escriba está baja, habilita está baja
y MCLK está alta, entonces la lı́nea “cargue” debe bajar. Esto es simplemente la función
NAND, según se muestra en la Figura ??. Inspeccionando el circuito, vemos que “car-
gue” baja sólo cuando escriba y habilita están bajas y MCLK está alto. Tan pronto como
MCLK baja, “cargue” sube para escribir en el registro según se desea.
10.3. INTERFACES DE REGISTROS CON OTROS MÓDULOS 133
Otros usos de los registros incluyen aplicaciones en las que un evento externo almacena
un valor en el registro para ser leı́do más tarde por el microprocesador. Por ejemplo,
consideremos un circuito de codificación del teclado para un teclado numérico sencillo.
Este circuito convierte el cierre de una tecla en un valor binario que representa la tecla
oprimida, almacena este valor en un registro y luego le señala al microprocesador que ya
está disponible un nuevo valor. El microprocesador entonces lee el registro para obtener
el valor de la tecla pulsada.
Los requisitos de interconexión son muy diferentes de los vistos para escribir en un
registro en la sección ??. ?´Cómo podemos generar una señal para leer el registro en el
momento apropiado? Recordemos que las salidas del registro son simplemente las salidas
de los flip flops. Estas salidas están siempre encendidas. Si un flip flop está almacenando
un 1, la salida será 1. ?´Cómo podemos leer selectivamente este registro si la salida siempre
está encendida?
Para responder a esta pregunta, miremos el funcionamiento del bus de datos. Cuando
el microprocesador está escribiendo, sus salidas están manejando el bus de datos: ningún
otro dispositivo está intentando colocar un valor en el bus de datos. De forma similar,
cuando el microprocesador está leyendo, solamente las salidas del dispositivo seleccionado
están manejando el bus de datos. El único momento en que las salidas de un dispositivo
deben conectarse al bus de datos debe ser cuando el microprocesador está tomando la
lectura de ese dispositivo. En cualquier otro momento, las salidas del dispositivo deben
estar efectivamente desconectadas del bus de datos. La pregunta obvia es ?´cómo hacer
para desconectar las salidas del bus de datos?
Recordemos del capı́tulo ?? la existencia de compuertas con salidas de tres estados.
Estas salidas pueden asumir los estados normales 0 y 1 pero adicionalmente, pueden asumir
un tercer estado que parece un circuito abierto como si nada estuviese allı́. Cuando la
salida está en el tercer estado, efectivamente se desconecta del circuito. Para conectar el
tercer estado, se usa una lı́nea de habilitación. Cuando se habilita, la salida asume los
valores normales uno o cero. Cuando no se habilita, la salida está en el tercer estado o
desconectada. Se puede conseguir la habilitación activa alta como la activa baja.
En la Figura 10.7 se muestra un registro de 4 bits con cuatro compuertas de tercer
estado en las salidas. Estas compuertas simplemente pasan el valor de la entrada a la
134 CAPÍTULO 10. REGISTROS
Algunas aplicaciones utilizan un registro como una celda de memoria rápida; un ejemplo
lo constituyen los registros de propósitos generales del computador. En estas aplicaciones
se lee el registro e igualmente se escribe en él. La misma dirección se usa tanto para leer
como para escribir, determinándose entonces mediante Lea o escriba cuál es la operación
que se va a efectuar. Simplemente combinando los circuitos definidos en las secciones ??
y ?? se puede obtener el circuito para esta aplicación.
Aplicaciones Secuenciales en
VHDL
Conceptos básicos
Flip-Flops
Contadores
Secuenciadores
Máquinas de Estado
Registros
Saber Hacer
Describir en VHDL un sistema secuencial
Simular el comportamiento del circuito
137
138 CAPÍTULO 11. APLICACIONES SECUENCIALES EN VHDL
11.1 FLIP-FLOPS
Los dispositivos de lógica secuencial necesitan todos para su implementación del mecan-
ismo del proceso (“process”) de VHDL. La forma general de un proceso en VHDL es la
siguiente:
Este ejemplo es tomado del libro de Wakerly. Se refiere al lector a dicho libro para más
detalles del problema. La máquina secuencial a desarrollar tiene 3 variables de entrada,
denominadas left, right y haz, que corresponden a los controles de las señales de las luces
direccionales. La máquina debe controlar seis luces de salida, tres a cada lado del vehı́culo
en la parte trasera, de tal modo que cuando se seleccione la señal left, por ejemplo, las
luces de salida deben mostrar primero 001000, luego 011000, luego 111000 y finalmente
000000, y reiniciar la secuencia.
El diagrama de estados de la máquina pedida se muestra en la siguiente figura:
El programa correspondiente en VHDL se incluye a continuación:
11.8 Semáforo
Este ejemplo es tomado del libro de Floyd en el numeral 6.11, a donde puede referirse el
lector para obtener más detalles sobre el problema. A continuación se muestra el programa
VHDL de ésta aplicación:
42 END CASE ;
43 END IF ;
44 END PROCESS maquina ;
45 salida : PROCESS ( presente ) -- No depende de las entradas
BEGIN
46 CASE presente IS
47 WHEN PrimerEstado = >
48 semcarr <= verde ;
49 semcamin <= rojo ;
50 rescont <= true ;
51 WHEN SegundoEstado = >
52 semcarr <= amarillo ;
53 semcamin <= rojo ;
54 rescont <= true ;
55 WHEN TercerEstado = >
56 semcarr <= rojo ;
57 semcamin <= verde ;
58 rescont <= false ;
59 WHEN CuartoEstado = >
60 semcarr <= rojo ;
61 semcamin <= amarillo ;
62 rescont <= true ;
63 END CASE ;
64 END PROCESS salida ;
65 -- El siguiente proceso define el contador : contador : PROCESS
( clk )
66 BEGIN
67 IF clk = ’1 ’ THEN
68 IF rescont THEN cuenta <=0;
69 ELSE cuenta <= cuenta +1;
70 END IF ;
71 END IF ;
72 END PROCESS contador ;
73
74 -- Detección de los tiempos largos y cortos :
75 fin_largo <= true WHEN cuenta =29 ELSE false ;
76 fin_corto <= true WHEN cuenta =9 ELSE false ;
77 END descripcion ;
78
Listado 11.6: Semáforo.