You are on page 1of 167

Circuitos y Sistemas Digitales

Ingeniería Técnica en Informática de Gestión

Segundo Curso

Juan Manuel PASCUAL GASPAR


Profesor de la
Universidad Europea Miguel de Cervantes
Contenido 1

Tema1: Sistemas de numeración y codificación de la información............................ 4


1.1 Números binarios ..................................................................................................... 4
1.1.1 Cambio de base decimal/binario ................................................................... 7
1.1.2 Base octal....................................................................................................... 8
1.1.3 Base hexadecimal......................................................................................... 10
1.2 Aritmética Binaria.................................................................................................. 11
1.2.1 Suma aritmética binaria............................................................................... 12
1.2.2 Resta aritmética binaria............................................................................... 12
1.2.3 Multiplicación aritmética binaria................................................................ 14
1.3 Números negativos................................................................................................. 15
1.3.1 Representación SM (Signo-Módulo)............................................................ 16
1.3.2 Representación en complemento a 2 (C2) ................................................... 17
1.3.3 Representación en complemento a 1 (C1) ................................................... 19
1.4 Codificación ........................................................................................................... 20
1.4.1 Código ASCII ............................................................................................... 20
1.4.2 Código BCD................................................................................................. 22
1.4.3 Código Gray................................................................................................. 24
1.5 Detección de errores............................................................................................... 27
1.6 Corrección de errores ............................................................................................. 29
1.6.1 Código Hamming ......................................................................................... 30

Tema 2: Álgebra de Boole ............................................................................................ 34


2.1 Introducción .......................................................................................................... 34
2.2 Leyes del Álgebra de Boole .................................................................................. 35
2.3 Circuitos de conmutación ..................................................................................... 36
2.4 Puertas lógicas básicas.......................................................................................... 38
2.5 Funciones de conmutación.................................................................................... 40
2.5.1 Funciones de conmutación de una variable ............................................ 42
2.5.2 Funciones de conmutación de dos variables ........................................... 43

Tema 3: Funciones de conmutación ............................................................................ 48


3.1 Minterms y maxterms ........................................................................................... 48
3.2 Desarrollo de Shannon.......................................................................................... 50
3.3 Adyacencias .......................................................................................................... 52
3.4 Funciones incompletamente especificadas ........................................................... 54
3.5 Mapas de Karnaugh .............................................................................................. 55
3.6 Minimización multifuncional................................................................................ 59

Tema 4: Minimización.................................................................................................. 62
4.1 Realizaciones mínimas.......................................................................................... 62
4.2 Adyacencias de una función ................................................................................. 64
4.2.1 Método de Quine-McCluskey................................................................. 64
4.3 Implicantes primos................................................................................................ 66
4.3.1 Tabla de implicantes ............................................................................... 67
4.3.2 Tabla de implicantes reducida ................................................................ 68
4.3.3 Tablas cíclicas y método de Petrick........................................................ 69
Contenido 2

4.4 Síntesis NAND-NOR............................................................................................ 70


4.4.1 Circuitos con dos niveles ........................................................................ 70
4.4.2 Circuitos con más de dos niveles ............................................................ 71
4.5 Riesgos en circuitos combinacionales .................................................................. 72
4.5.1 Riesgos lógicos ....................................................................................... 74
4.5.2 Riesgos funcionales ................................................................................ 75

Tema 5: Circuitos combinacionales ............................................................................ 78


5.1 Puertas combinacionales ........................................................................................ 78
5.1.1 Niveles de integración.................................................................................. 79
5.2 Circuitos aritméticos .............................................................................................. 80
5.2.1 Sumadores.................................................................................................... 80
5.2.2 Sumador BCD .............................................................................................. 83
5.2.3 Restadores.................................................................................................... 86
5.2.4 Comparadores.............................................................................................. 89
5.3 Codificadores ......................................................................................................... 91
5.3.1 Conversores de código................................................................................. 94
5.3.2 Generación y comprobación de la paridad. ................................................ 94
5.4 Decodificadores ..................................................................................................... 95
5.5 Demultiplexores ..................................................................................................... 99
5.6 Multiplexores ....................................................................................................... 102
5.6.1 Los MUX como módulos lógicos universales ............................................ 106
5.6.2 El MUX como selector de datos................................................................. 106
5.7 Acceso a buses ..................................................................................................... 107
5.8 Memorias ROM ................................................................................................... 108
5.8.1 ROM programables.................................................................................... 111
5.8.2 La ROM como módulo lógico universal. ................................................... 111
5.9 PLA y PAL........................................................................................................... 112
5.10 Resumen............................................................................................................. 114

Tema 6: Elementos de memoria ................................................................................ 116


6.1 Sistemas secuenciales ......................................................................................... 116
6.1.1 Señal de reloj......................................................................................... 116
6.2 El elemento básico de memoria .......................................................................... 117
6.3 Biestable SR (Set-Reset)..................................................................................... 119
6.3.1 Captación de los ceros y los unos ......................................................... 122
6.4 Biestable JK ........................................................................................................ 123
6.4.1 Biestables dueño-esclavo ...................................................................... 124
6.5 Biestable D.......................................................................................................... 125
6.6 Biestable T .......................................................................................................... 126
6.7 Tablas de excitación para los diferentes biestables: ........................................... 127
6.8 Biestables disparados por flanco......................................................................... 127
6.9 Estructura de los sistemas secuenciales síncronos.............................................. 129
6.10 Análisis de un sistema secuencial síncrono ...................................................... 131
6.11 Diagramas de estados........................................................................................ 133
Contenido 3

Tema 7: Registros, contadores y memorias.............................................................. 138


7.1 Registros............................................................................................................... 138
7.2 Registros de desplazamiento ................................................................................ 139
7.3 Contadores ........................................................................................................... 141
7.3.1 Contadores síncronos ................................................................................ 142
7.3.2 Contadores asíncronos .............................................................................. 147
7.4 Contadores obtenidos con registros de desplazamiento....................................... 148
7.4.1 Contadores en anillo.................................................................................. 148
7.4.2 Contadores Johnson................................................................................... 149
7.4.3 Generadores de secuencias........................................................................ 151
7.5 Memorias RAM ................................................................................................... 154
7.5.1 Celda elemental de memoria...................................................................... 155
7.5.2 Expansión de memorias RAM .................................................................... 157
7.5.3 Decodificación bidimensional.................................................................... 159
7.6 Memorias LIFO (Pila).......................................................................................... 160
7.6.1 Memorias LIFO con registros de desplazamiento..................................... 161
7.6.2 Memorias LIFO con memoria RAM .......................................................... 161
7.7 Memorias FIFO (Cola)......................................................................................... 162
7.7.1 Memorias FIFO con registros de desplazamiento..................................... 163
7.7.2 Memorias FIFO con memoria RAM .......................................................... 164
Tema 1. Sistemas de numeración y codificación de la información 4

Tema 1
Sistemas de numeración y
codificación de la información
Sistemas de numeración y codificación de la información ......................................... 4
1.1 Números binarios..................................................................................................... 4
1.1.1 Cambio de base decimal/binario................................................................... 7
1.1.2 Base octal ...................................................................................................... 8
1.1.3 Base hexadecimal ........................................................................................ 10
1.2 Aritmética Binaria ................................................................................................. 11
1.2.1 Suma aritmética binaria .............................................................................. 12
1.2.2 Resta aritmética binaria .............................................................................. 12
1.2.3 Multiplicación aritmética binaria ............................................................... 14
1.3 Números negativos ................................................................................................ 15
1.3.1 Representación SM (Signo-Módulo)............................................................ 16
1.3.2 Representación en complemento a 2 (C2) ................................................... 17
1.3.3 Representación en complemento a 1 (C1) ................................................... 19
1.4 Codificación........................................................................................................... 20
1.4.1 Código ASCII............................................................................................... 20
1.4.2 Código BCD ................................................................................................ 22
1.4.3 Código Gray ................................................................................................ 24
1.5 Detección de errores .............................................................................................. 27
1.6 Corrección de errores............................................................................................. 29
1.6.1 Código Hamming......................................................................................... 30

1.1 Números binarios


Los sistemas de numeración surgen desde la antigüedad como respuesta a la necesidad
de contar. Ejemplos conocidos de sistemas de numeración son el sistema de numeración
romano y el sistema de numeración decimal. Cada sistema de numeración posee su
propio conjunto de caracteres para representar las cantidades numéricas. Así por
ejemplo los caracteres que forman el sistema numérico romano son 7 ( I, V, X, L, C, D,
M ) mientras que los caracteres del sistema numérico decimal son 10 (0, 1, 2, 3, 4, 5, 6,
7, 8 y 9).

Ejemplo 1.1: ¿Cómo se escribiría el año 2004 en el sistema de numeración romano?

La respuesta es MMIV, (MM=2000 y IV=4).

Podemos clasificar los sistemas de numeración en dos tipos:

- Ponderados: (por ejemplo el s.n. decimal)


- No ponderados: (por ejemplo el s.n. romano)
Tema 1. Sistemas de numeración y codificación de la información 5

Un sistema de numeración es ponderado cuando el valor del dígito depende de la


posición que ocupe dentro del número total. Así el sistema de numeración decimal es un
sistema de numeración ponderado, donde a cada dígito se le asocia un factor
multiplicativo potencia de 10 según su posición. De ese modo los números decimales
pueden expresarse como una suma ponderada de potencias de 10.

Ejemplo 1.2: Representar el número decimal 243 como suma de potencias de 10.

La respuesta es obvia: 243 = 2·100 + 4·10 + 3·1 = 2·102 + 4·101 + 3·100

Ejemplo 1.3: Representar el número decimal 586,23 como suma de potencias de 10.

En este caso se han de asociar potencias de exponente negativo para la parte decimal.
Sería por tanto 586,23 = 5·102 + 8·101 + 6·100 + 2·10-1 + 3·10-2

El número 10 en el sistema de numeración decimal es lo que se conoce como su base.


La elección del 10 en este sistema y su uso extendido está asociado al hecho de poseer
10 dedos en las manos (de ahí el nombre de dígitos), que era sin duda el medio más
antiguo para contar, aunque realmente se podría haber elegido cualquier otro número
como base para desarrollar un sistema de numeración.

Ejemplo 1.4: Expresar el número decimal 243 como suma ponderada de potencias de 6.

Las cuatro primeras potencias de 6 son las siguientes: 60=1, 61=6, 62=36 y 63=216

Por tanto si expresamos el numero 24310 como 1·63 + 0·62 + 4·61 + 3·60 tendríamos
que 24310=10436.

Generalizando los resultados anteriores se puede demostrar que cualquier número se


puede expresar como una suma ponderada de potencias de la base b:

Nb = an*bn + an-1*bn-1 + … + a1*b1 + a0*b0 + a-1*b-1 + … + a-m*b-m

En los sistemas digitales (sistemas basados en la electrónica) existen sólo “dos dedos”,
que corresponden a la existencia de tensión en un punto (el 1) o su ausencia (el 0). Por
tanto en los sistemas digitales se trabaja con el sistema de numeración binario, en el que
la base es el 2 y cuyos caracteres son el 0 y el 1, a los cuales ya no se les denomina
dígitos, sino bits (del inglés BInary digiT).

Ejemplo 1.5: Representar el número decimal 19 en binario.

Si desarrollamos el número como suma de potencias de 2 tenemos:

1910 = 16 + 2 + 1 = 1·24 + 1·21 +1·20 = 1·24 + 0·23 + 0·22 + 1·21 + 1·20 = 100112

Observando el ejemplo anterior vemos que la representación de un mismo valor en dos


bases diferentes da lugar a dos representaciones del número diferentes, con la
peculiaridad de que cuanto mayor es la base más compacta es la representación del
número. Por tanto con el mismo número de caracteres, cuanto mayor sea la base, mayor
cantidad de números distintos podremos representar.
Tema 1. Sistemas de numeración y codificación de la información 6

Ejemplo 1.6: Determinar cuántos números podemos representar con tres dígitos. Ídem
con tres bits.

Con 3 dígitos (sistema decimal) podemos representar desde el 0 al 999, es decir, 1000
números. Con 3 bits, desde el 000 al 111 (7 en decimal), es decir un total de 8 números
distintos.

Otro resultado a destacar es la relación entre el número n de caracteres, la base b y el


valor máximo representable:

- Valores posibles distintos = bn


- Rango de valores: { 0, 1, 2, …, bn-1 }

En los sistemas digitales (aparte del sistema numérico decimal) se usan principalmente
los tres siguientes sistemas de numeración:

- Sistema de numeración binario (b = 2)


- Sistema de numeración octal (b = 8)
- Sistema de numeración hexadecimal (b = 16)

Ejemplo 1.7: Representar el número 102010 en las bases binaria, octal y hexadecimal.

El resultado es el siguiente (el modo de llegar a este resultado se verá más adelante):

102010 = 17748 = 3FC16 = 11 1111 11002

Los caracteres utilizados para representar los números por cada una de los sistemas de
numeración anteriores son:

- Base decimal (b=10) = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }


- Base octal (b=8) = { 0, 1, 2, 3, 4, 5, 6, 7 }
- Base hexadecimal (b=16) = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F }
- Base binaria (b=2) = { 0, 1 }

Conviene aprender el sistema de contar en binario, para lo cual se observa que el


proceso es el mismo que en el sistema decimal, de izquierda a derecha se van
incrementado cíclicamente cada una de las posiciones del número de menor a mayor.

Número decimal Número binario Número decimal Número binario


0 0000 8 1000
1 0001 9 1001
2 0010 10 1010
3 0011 11 1011
4 0100 12 1100
5 0101 13 1101
6 0110 14 1110
7 0111 15 1111
Figura 1. 1: Números binarios de 4 bits
Tema 1. Sistemas de numeración y codificación de la información 7

Se denomina MSB (Most Significant Bit) al bit de mayor peso dentro del número
binario, es decir el situado más a la izquierda. Análogamente se denomina LSB (Least
Significant Bit) al bit de menor peso dentro del número binario, es decir el situado más
a la derecha.

Ejemplo 1.8: Determinar el valor decimal del MSB del número binario 101011.

El MSB es el sexto por la derecha (101011), de modo que el valor que aporta el número
anterior es de 1·25=32.

Ejemplo 1.9: Determinar el valor decimal del LSB del número binario 101011.

El LSB es el primero por la derecha (101011), de modo que el valor que aporta el
número anterior es de 1·20=1.

1.1.1 Cambio de base decimal/binario


Es importante para cambiar de base de decimal a binario o viceversa con agilidad,
memorizar las 10 primeras potencias de 2 (figura 1.2).

n 2n
0 1
1 2
2 4
3 8
4 16
5 32
6 64
7 128
8 256
9 512
10 1024
Figura 1. 2: 10 primeras potencias de 2

Cambio de binario a decimal (2 → 10): Se descompone el número binario en suma de


potencias de 2 y se calcula el valor decimal como suma de dichas potencias ponderadas
por sus respectivos coeficientes binarios.

Ejemplo 1.10: Calcular el valor decimal del número binario 1101101.

Descomponiendo en suma de potencias de 2 (se indica únicamente los términos que


aportan valor al resultado, esto es, los coeficientes con valor 1):

11011012 = 64 + 32 + 8 + 4 + 1 = 10910

Cambio de decimal a binario (10 → 2): Se divide el número decimal entre 2 sucesivas
veces hasta que el dividendo sea menor que 2.
Tema 1. Sistemas de numeración y codificación de la información 8

Ejemplo 1.11: Pasar a binario el número decimal 10910.

La solución se muestra en la siguiente figura.

Figura 1. 3: Conversión decimal a binario mediante divisiones sucesivas por 2


Otro posible método de conversión decimal a binario es decomponer el número en
sumandos que sean potencias de 2, desde la inmediatamente inferior al número hasta la
menor que sea necesaria para componer el número decimal como suma de potencias de
2. Este método es más rápido que el anterior ya que en vez de dividir sólo hay que
sumar y restar, aunque presupone una memorización de las potencias de 2 más usuales.

Ejemplo 1.12: Pasar el número decimal 109 a binario mediante el método de suma de
pesos.

Figura 1. 4: Conversión decimal a binario mediante suma de potencias de 2

1.1.2 Base octal


La base octal (veremos más adelante que también la hexadecimal) son dos bases muy
usuales en los sistemas digitales, ya que permiten expresar información binaria de forma
más compacta que utilizando únicamente ceros y unos, lo cual es bastante tedioso.
Además la conversión entre estas bases y la binaria es mucho más sencilla que la
decimal, por lo que su uso es muy extendido por ejemplo para representar código
máquina, direcciones de memoria, etc. La base del sistema numérico octal es el 8, y los
caracteres utilizados en este sistema son los 8 siguientes: { 0, 1, 2, 3, 4, 5, 6, 7 }.

Ejemplo 1.13: El número 270 ¿puede ser un número octal? ¿Y el 279?

El número 270 es un número octal, ya que sólo utiliza caracteres de este sistema de
numeración, sin embrago el 279 utiliza el número 9, el cual no pertenece a los
caracteres del sistema octal y por consiguiente no se trata de un número octal.
Tema 1. Sistemas de numeración y codificación de la información 9

Los cambios de conversión de decimal-octal son llevados a cabo por procedimientos


similares a los realizados entre binario y decimal.

Conversión octal-decimal (8 → 10): Se descompone el número binario en suma de


potencias de 8 y se calcula el valor decimal como suma de dichas potencias ponderadas
por sus respectivos coeficientes octales.

Ejemplo 1.14: Calcular el valor decimal del número octal 2374.

Tenemos cuatro caracteres, por lo que debemos conocer las 4 primeras potencias del 8,
que son las siguientes: 80=1, 81=8, 82=64, 83=512. Para ello se puede hacer uso del
conocimiento de las potencias de dos ya que por ejemplo 83 es igual a (23)3 = 29 = 512.
Por tanto la solución es: 23748 = 2·512 + 3·64 + 7·8 + 4·1 = 127610.

Conversión de decimal a octal (10 → 8): Se divide el número decimal entre 8


sucesivas veces hasta que el dividendo sea menor que 8.

Ejemplo 1.15: Expresar en octal el número decimal 1276.

La solución en la siguiente figura:

Figura 1. 5: Conversión decimal a octal mediante divisiones sucesivas por 8

Al igual que en el caso binario podría utilizarse el método de suma ponderada de pesos,
pero en este caso no es tan aconsejable al ser menos conocidas las potencias de 8.

Las conversiones octal-binario son mucho más sencillas que aquellas a/desde el sistema
decimal. En ellas sólo hay que conocer la representación decimal de los números octales
0 al 7 y contraer / expandir el número según esta representación. Los caracteres octales
en representación binaria son los siguientes:

octal binario
0 000
1 001
2 010
3 011
4 100
5 101
6 110
7 111
Figura 1. 6: Representación binaria de los caracteres octales
Tema 1. Sistemas de numeración y codificación de la información 10

Ejemplo 1.16: Expresar en binario el número octal 274.

Expandiendo de octal a decimal cada dígito del número tenemos que:

2748 = 010 111 100 2

Ejemplo 1.17: ¿A qué número octal corresponde el número binario 101111002?

En este caso hay que agrupar los bits de 3 en 3 empezando por la derecha (por el LSB)
y completar con ceros en caso de que en el último dígito octal tenga menos de 3 bits. En
este caso:
10 111 1002 = 2748

1.1.3 Base hexadecimal


El sistema de numeración hexadecimal tiene incluso mayor uso en los sistemas digitales
(y ordenadores en particular) que el octal. Se trata de un sistema de representación más
compacta que el decimal, ya que su base es mayor (b=16), y los caracteres que se
eligieron para representar los números hexadecimales fueron los 10 primeros dígitos
decimales, más las 6 primeras letras del abecedario para de este modo facilitar su uso
extendido.

De este modo la correspondencia entre los caracteres de las bases decimal, binaria y
hexadecimal es la siguiente:

decimal hexadecimal binario


0 0 0000
1 1 0001
2 2 0010
3 3 0011
4 4 0100
5 5 0101
6 6 0110
7 7 0111
8 8 1000
9 9 1001
10 A 1010
11 B 1011
12 C 1100
13 D 1101
14 E 1110
15 F 1111
Figura 1. 7: Correspondencia entre caracteres hexadecimales, decimales y binarios

En este caso al existir 16 caracteres hexadecimales, cada carácter hexadecimal está


formado por 4 bits, al contrario que en el caso octal donde por sólo existir 8 caracteres
octales distintos bastaba con 3 bits.
Tema 1. Sistemas de numeración y codificación de la información 11

Los procedimientos de conversión son totalmente análogos al caso octal, es decir, la


conversión hacia o desde el sistema decimal es más compleja (divisiones o sumas
ponderadas), y desde/hacia el sistema binario es casi inmediata (mediante
expansión/agrupación).

Ejemplo 1.18: ¿A qué digito decimal corresponde la cifra hexadecimal CAFE10?

Según la tabla 1.7 y sabiendo que las 4 primeras potencias de 16 son 160=1, 161=16,
162=256 y 163=4096 tenemos que:

CAFE16 = 12·163 + 10·162 +15·161 +14·160 = 5196610

Ejemplo 1.19: Expresar en hexadecimal la dirección de memoria 65010 de un


ordenador de arquitectura de 32 bits.

Realizando divisiones sucesivas entre 16 se obtiene:

Como hay que expresar con 32 bits el resultado hay que añadir ceros a la izquierda
hasta completar los 32 bits resultando el número 0000 028A16

Ejemplo 1.20: Sea la función Excel HEX.A.BIN(h), donde h es una cantidad en


hexadecimal. ¿Cual es el resultado expresado con 16 bits de la función
HEX.A.BIN(6F4)?

En este caso hay que sustituir cada carácter hexadecimal por su equivalente en binario,
de acuerdo a la tabla 1.7:

6F416 = 0000 0110 1111 01002

Ejemplo 1.21: Sea el siguiente número binario 10101001102, ¿cuál es el valor de este
numero en representación hexadecimal?

En este caso hay que agrupar de 4 en 4 bits, y completar por la derecha en caso de que
haga falta. Por tanto:

0010 1010 01102 = 2A616

1.2 Aritmética Binaria


Al igual que se hacen operaciones aritméticas entre números expresados en decimal con
una serie de reglas, y se obtienen resultados también en decimal, esas mismas
operaciones se pueden realizar entre números binarios obteniéndose los resultados en
binario.
Tema 1. Sistemas de numeración y codificación de la información 12

En este tipo de operaciones, al igual que en la aritmética decimal, existen los conceptos
de resultado y acarreo (positivo o negativo) y no deben confundirse con las operaciones
lógicas (a nivel de bit) que se verán más adelante.

Las operaciones aritméticas que se verán son:

- Suma binaria
- Resta binaria
- Multiplicación binaria

1.2.1 Suma aritmética binaria


La suma aritmética binaria se rige por la siguiente tabla:

Suma Acarreo
0+0=0 0
0+1=1 0
1+0=1 0
1+1=0 1

Obsérvese que si se ve la operación de suma como una caja negra, existen dos entradas
a dicha caja (los operandos) y dos salidas (el resultado y el acarreo).

Ejemplo 1.22: Realizar las siguientes sumas en binario:

a) 11 + 11
b) 100 + 10
c) 110 + 100
d) 111 + 011
e) 1111 + 1111 + 1111

El resultado sería el siguiente:

1.2.2 Resta aritmética binaria


La resta aritmética binaria se rige por la siguiente tabla:
Tema 1. Sistemas de numeración y codificación de la información 13

Resta Adeudo
0-0=0 0
0-1=1 1
1-0=1 0
1-1=0 0

Es interesante el hecho de que ante dos bits cualesquiera, el resultado de realizar la


suma o resta aritmética entre ellos es el mismo, estando la única diferencia en el
acarreo/adeudo generado. Este resultado será importante a la hora de diseñar un circuito
digital que realice operaciones de suma y resta binaria tal y como se verá en un próximo
tema.

Ejemplo 1.23: Realizar las siguientes operaciones binarias e indicar si el resultado es


positivo o negativo:

a) 11 – 01
b) 111 – 100
c) 110 – 101
d) 11011 – 1110
e) 1110 - 11011

El resultado sería el siguiente:

Obsérvese que en el apartado e) el número que debe obtenerse es un número negativo


(el -13, ya que 14 – 27 = -13). El número binario obtenido al realizar esta resta ha
aparecido en un formato denominado “complemento a 2”, y como vemos, aparece de
forma “natural” al realizarse la operación.

Es por ello, y por algunas razones más que se verán en un próximo apartado, por lo que
es el complemento a 2 el formato que se ha elegido en la mayoría de los computadores y
lenguajes de programación para representar los números enteros (tanto positivos como
negativos).
Tema 1. Sistemas de numeración y codificación de la información 14

1.2.3 Multiplicación aritmética binaria


La multiplicación o producto aritmético binario se rige por la siguiente tabla:

Producto
0·0=0
0·1=0
1·0=0
1·1=1

Como puede observarse, a diferencia de la suma y la resta, el producto aritmético


binario coincide con el producto decimal. Además visto como caja negra presenta dos
entradas (los 2 operandos) y una única salida.

Para realizar la multiplicación habrá que multiplicar realizar los mismos pasos que en
las multiplicaciones con números decimales:

- Se multiplica cada bit del multiplicador (número de abajo) por el multiplicando


(número de arriba) para obtener una multiplicación parcial
- El resultado de la multiplicación parcial se multiplica por el peso que tiene el bit en
el multiplicador (rotando para ello el resultado de la multiplicación a la izquierda)
dando lugar a la multiplicación parcial ponderada.
- Tras ello se suman todas las multiplicaciones parciales ponderadas y se obtiene el
resultado final en binario.

Ejemplo 1.24: Realizar las siguientes operaciones en binario y pasar el resultado a


decimal para comprobar el resultado:

a) 11 · 11
b) 1101 · 1010
c) 1111 · 1111

El resultado es el siguiente de dichas operaciones es el siguiente:


Tema 1. Sistemas de numeración y codificación de la información 15

1.3 Números negativos


Dado que en las computadoras no existen registros especiales para representar los
signos de los números, sino que sólo se dispone de ceros y unos, se ha adoptado el
convenio siguiente para distinguir los números positivos de los negativos:

- Números positivos: los que tienen el bit más significativo (MSB) a 0


- Números negativos: los que tienen el MSB a 1

Esta representación no tiene ninguna causa en especial, se podía haber elegido justo la
contraria sin que una supusiera ventaja sobre la otra. Aparte de esta primera distinción,
que en sí afecta sólo al signo del número, existen varias alternativas para representar la
parte numérica del número en cuestión cuando este se trate de un número negativo.
Antes entrar a verlas en detalle, conviene comentar las similitudes y diferencias de las
tres representaciones más comunes utilizadas para representar números negativos:

- Signo-Módulo (SM)
- Complemento a 2 (C2)
- Complemento a 1 (C1)

En la siguiente tabla se representan todas las posibles combinaciones de números


binarios de 4 bits y sus valores decimales correspondientes dependiendo de la
representación en la que se encuentren codificadas:

a3 a2 a1 a0 SM C2 C1
0000 +0
0001 +1
0010 +2
0011 +3
0100 +4
0101 +5
0110 +6
0111 +7
1000 -0 -8 -7
1001 -1 -7 -6
1010 -2 -6 -5
1011 -3 -5 -4
1100 -4 -4 -3
1101 -5 -3 -2
1110 -6 -2 -1
1111 -7 -1 -0
Figura 1. 8: Representaciones en SM, C2 y C1 de números binarios de 4 bits

Observando esta tabla se pueden sacar algunas primeras conclusiones:

- Los números positivos se representan igual en las tres representaciones (si N>0
entonces NSM = NC2 = NC1).
Tema 1. Sistemas de numeración y codificación de la información 16

- Las representaciones SM y C1 tienen dos ceros (+0 y -0). Por tanto “desperdician”
una combinación.
- Por lo anterior la representación C2 es la que más números diferentes puede
representar.
- Si N es un número negativo se tiene que NC2 = NC1 – 1, es decir que ante una misma
combinación de bits de un número negativo, el número en C2 será “más negativo”
que si se considera expresado en C1.

Ejemplo 1.25: Si sabemos que un número binario en C1 tiene un valor decimal de -433,
¿cuál será el valor decimal de esa misma combinación de bits si se considera que
representa a un número en C2?

La respuesta, según el último apartado anterior, será -433 – 1 = -434.

1.3.1 Representación SM (Signo-Módulo)


La primera y más inmediata de las representaciones de números negativos es la
denominada “signo-módulo” o SM. En ella para el signo se utiliza el convenio citado
anteriormente, y para la parte del módulo se utiliza binario natural.

Números positivos Números negativos

0 Bits en binario natural 1 Bits en binario natural

Signo Módulo Signo Módulo

Figura 1. 9: Representación de números enteros en formato SM

Algunas de las características de esta representación son las siguientes:

- Tiene la misma cantidad de números positivos que negativos, en total 2n-1-1 de cada
tipo.
- Existen dos representaciones del 0: { +0 , -0 }
- Para n bits existen 2n-1 números distintos posibles de representar, desde el -(2n-1 – 1)
al 2n-1 – 1.

Ejemplo 1.26: Representar el número decimal -39 en formato SM de 8 bits.

En primer lugar se pasa a binario el módulo del número -39, estos es, se expresa en
binario natural el número 39 utilizando 7 bits. El resultado es 00100111.

Tras ello, se añade el bit de signo, y como en este caso se trata de un número negativo,
éste será 1, resultando finalmente que el número binario pedido es 100100111.

Ejemplo 1.27: Sea la secuencia de bits 10010101. A qué valor corresponde dicha
secuencia si representa a:

a) Un número codificado en binario natural


b) Un número de codificado en SM de 8 bits
Tema 1. Sistemas de numeración y codificación de la información 17

La respuesta del primer apartado es inmediata si se realiza la conversión de binario a


decimal del modo usual, resultando:

100101012 = 1 + 4 + 16 + 128 = 14910

Para el segundo apartado, de inmediato sabemos que se trata de un número negativo,


ya que está en SM y su MSB es 1. Para el cálculo del módulo realizamos la conversión
de binario a decimal pero con los 7 bits de la izquierda. Estos es:

00101012 = 1 + 4 + 16 = 2110

De modo que el resultado final es que 10010101SM = -2110.

Se pueden realizar operaciones aritméticas en este formato, pero son bastante


complejas, ya que, por un lado debería tenerse en cuenta el signo de cada operando, y
por otro el valor relativo de sus módulos. Sin entrar en más detalles parece obvio que
construir circuitos digitales en los que para realizar una simple suma, haya que
comparar los módulos de los operandos por un lado, y sus signos por otro, para
posteriormente decidir la operación a realizar entre dichos módulos y por último
resolver el signo del resultado, sería al menos costoso.

Se verá más adelante que con las otras representaciones las operaciones aritméticas son
mucho más sencillas y por tanto fáciles de implementar en circuitos digitales.

1.3.2 Representación en complemento a 2 (C2)


Como se ha dicho esta representación es la más usada en las computadoras y lenguajes
de programación para representar cantidades numéricas enteras. En ella se sigue el
convenio del bit de signo, pero para representar el módulo de los números negativos, en
vez de binario natural, se opta por invertir dichos bits y tras ello sumar 1. Nótese que en
este proceso de sumar 1 a bits invertidos no se generará nunca acarreo ya que para ello
los bits sin invertir deberían estar todos a 0, pero ese es el caso del +0 (en C2 el cero es
“positivo”).

Números positivos Números negativos

0 Bits como en SM 1 Bits invertidos + 1

Signo Módulo Signo Módulo

Figura 1. 10: Representación de números enteros en formato SM

Estas son algunas de las características de la representación en C2:

- Existe un número positivo menos que de números negativos


- Existe una única representación del 0: { +0 }
- El rango de números posibles de representar con n bits es de 2n, desde el -2n-1 al
número +(2n-1 -1).
Tema 1. Sistemas de numeración y codificación de la información 18

Ejemplo 1.28: Representar en C2 de 8 bits los números +3910 y -3910 y expresarlos en


hexadecimal.

Se dijo anteriormente que los números positivos se representaban igual en las tres
representaciones, es decir en binario natural. Por tanto con 8 bits el número +3910 será
(con el bit de signo ya incluido en la MSB):

+3910 = 0 010 0111C2 = 2716

Con respecto al segundo número, para expresarlo en complemento a 2 tenemos que


realizar los pasos siguientes:

- Expresar el valor absoluto del número en binario natural con 7 bits. Ya lo tenemos
hecho del caso anterior resultando 010 0111.
- Invertir los 7 bits del paso anterior. Resulta el número 101 1000.
- Sumar 1 al resultado anterior. En este caso 101 1000 + 1 = 101 1001.
- Añadir el bit de signo en la MSB. El resultado final es de este modo 1101 1001C2.

Como se ve, el proceso de codificar un número en C2 es un poco complejo, ya que


además de invertir los bits hay que suma 1. No obstante en contraposición, una de las
características de la representación C2 es su facilidad para la realización de operaciones
aritméticas. Dado que todas las operaciones aritméticas se pueden reducir a sumas o
restas más una codificación adecuada de números nos centraremos en las
operaciones aritméticas de sumas y restas en C2.

La gran ventaja de esta representación es que nos podemos olvidar completamente de


los acarreos y del signo de los operandos y del resultado: cuando operamos con dos
operandos codificados en C2, si el resultado de la operación (ya sea una suma o una
resta) es positivo, el MSB será igual a cero, y si el resultado es negativo, el MSB será
igual a 1, y el número resultante aparecerá en complemento a 2.

Ejemplo 1.29: Realizar las siguientes operaciones decimales en C2:

a) 53 + 46 b) (-53) + 46 c) 53 + (-46) d) (-53) + (-46)

La solución de estas operaciones es la siguiente:


Tema 1. Sistemas de numeración y codificación de la información 19

Un problema inherente al tamaño finito para la representación de datos en las


computadoras es el problema de desbordamiento u “overflow”. Este problema se
presenta cuando el resultado de una operación no es lógico, como por ejemplo que al
sumar dos números positivos se obtenga un resultado negativo o viceversa. El
desbordamiento se produce cuando el resultado de la operación produce un número
fuera del rango de números posibles que pueden representarse con ese tipo de
representación y número de bits.

Ejemplo 1.30: Realizar las dos operaciones siguientes en complemento a 2 de 8 bits.


¿Existe desbordamiento en alguna de ellas?

a) 99 + 32
b) (-99) + (-32)

En primer lugar representemos los números en C2:

9910 = 0110 0011C2, -9910 = 1001 1101C2


3210 = 0010 0000C2, -3210 = 1110 0000C2

El resultado de las dos operaciones es el siguiente:

1.3.3 Representación en complemento a 1 (C1)


Por último existe el formato de representación en complemento a 1 que aunque es
menos utilizado que el complemento a 2, conviene conocerlo. En este formato de
representación resultará más fácil codificar los números negativos que en el caso del C2,
sin embargo las operaciones aritméticas serán más complejas. Para el signo se sigue el
convenio ya conocido, y para representar el módulo de un número negativo únicamente
hay que invertir los bits del valor absoluto del número codificado en binario natural (en
este caso ya no se suma 1).

Números positivos Números negativos

0 Bits como en SM 1 Bits invertidos

Signo Módulo Signo Módulo


Tema 1. Sistemas de numeración y codificación de la información 20

Algunas características de este tipo de representación son:

- Existe la misma cantidad de números positivos y negativos (2n-1-1 de cada tipo)


- Existen dos representaciones del 0: { +0, -0 }
- El total de números distintos posibles de representar con n bits es de 2n-1, desde el
menor número negativo -( 2n-1 - 1) al positivo de mayor valor +( 2n-1 - 1).

Como se ha dicho al principio las operaciones aritméticas son más complejas de realizar
en C1 que si se realizan en C2, por lo que no se describirán (remitirse a la bibliografía si
se desea más información al respecto).

1.4 Codificación
Se entiende por codificación a la representación de información no binaria en formato
binario. En los siguientes apartados se van a ver los siguientes sistemas de codificación
textual y numérica:

- Código ASCII
- Código BCD
- Código Gray

1.4.1 Código ASCII


El “American Standard Code for Information Interchange” es un código de 7 bits
estándar propuesto por la Asociación Norteamericana de Estandarización (ANSI) en
1963 para la representación estándar de caracteres alfanuméricos. El código ASCII fue
propuesto para conseguir compatibilidad entre los distintos tipos de equipo para
procesamiento de datos de la época convirtiéndose posteriormente en el código estándar
de uso por las computadoras.

Está formado por 128 (27) caracteres del siguiente tipo: 96 caracteres imprimibles:
letras, números y marcas de puntuación y 32 caracteres no imprimibles: caracteres de
control. Si el ANSI ASCII se representa con 8 bits, entonces estos 128 primeros
caracteres establecen el MSB a 0.

0 1 2 3 4 5 6 7 8 9 A B C D E F
0 NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI
1 DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US
2 SP ! " # $ % & ' ( ) * + , - . /
3 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
4 @ A B C D E F G H I J K L M N O
5 P Q R S T U V W X Y Z [ \ ] ^ _
6 ` a b c d e f g h i j k l m n o
7 p q r s t u v w x y z { | } ~ DEL
Figura 1. 11: Código ASCII estándar (ANSI ASCII)
Ejemplo 1.31: ¿Qué texto se encuentra tras la siguiente secuencia de bits si sabemos
que se encuentra codificada en ASCII de 8 bits?

01001000 01101111 01101100 01100001 00100000


01001101 01110101 01101110 01100100 01101111
Tema 1. Sistemas de numeración y codificación de la información 21

En primer lugar pasamos a hexadecimal el texto anterior para poder consultar la tabla
1.11. Resulta el siguiente fragmento:

48 6F 6C 61 20
4D 75 6E 64 6F

De aquí se obtiene que el texto descifrado es: “Hola Mundo”.

Existe un conjunto de caracteres ASCII extendido que comprende los caracteres con
MSB a 1 del 128 al 255 e incluyen:

- Caracteres alfanuméricos no ingleses (ñ, á, …)


- Símbolos de moneda no ingleses
- Letras griegas
- Caracteres matemáticos
- Caracteres gráficos

Este conjunto de caracteres extendido no es estándar y por tanto difiere entre distintos
equipos. Por ejemplo el sistema operativo MS Windows posee tres codificaciones
diferentes para una misma zona geográfica (Windows, DOS y Unicode).

Figura 1. 12: Juego de caracteres DOS para MS Windows XP


Tema 1. Sistemas de numeración y codificación de la información 22

Figura 1. 13: Juego de caracteres Windows para MS Windows XP


El código ASCII aunque posee caracteres numéricos, no es un código apropiado para
operaciones aritméticas.

Más información sobre el código ASCII en las direcciones web:


- http://www.jimprice.com/jim-asc.htm
- http://www.asciitable.com

1.4.2 Código BCD


Para representar los números en un formato binario suele utilizarse el código BCD
(Binary Coded Decimal) el cual consiste en expresar con 4 bits en binario natural cada
uno de los dígitos decimales que componen la cifra decimal.

DEC 0 1 2 3 4 5 6 7 8 9
BCD 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001
DEC 10 11 12 13 14 15
No BCD 1010 1011 1100 1101 1110 1111
Figura 1. 14: Código BCD

Obsérvese que los números caracteres binarios del 1010 al 1111 no son caracteres BCD
válidos.
Tema 1. Sistemas de numeración y codificación de la información 23

Ejemplo 1.32: Codificar en BCD el número decimal 967310.

Según la tabla 1.14 el número anterior codificado en BCD sería el siguiente:

1001 0110 0111 0011BCD

Ejemplo 1.33: Indicar a qué números decimales corresponderían las siguientes cadenas
binarias si sabemos que están codificadas en BCD. ¿Y si están codificadas en binario
natural?

a) 0101 0001
b) 1010 1000

En el caso a) tenemos que, si el dato binario está codificado en BCD, según la tabla
1.14, correspondería al número 5110, y en el caso b), y bajo el mismo presupuesto, se
observa que no se trata de un código BCD, ya que el carácter 1010 no pertenece al
conjunto de caracteres BCD.

En caso de que los datos binarios representaran números en binario natural, éstos
corresponderían a los números 8110 y 16810 respectivamente.

Aunque normalmente las operaciones aritméticas no se hacen directamente en BCD,


sino que se transforman a un código intermedio más adecuado como puede ser el
complemento a 2, a veces si que puede interesar realizarlas directamente en BCD, por lo
que a continuación se verá el proceso a seguir para la suma de dos números decimales
codificados en BCD.

Regla para sumar en BCD dos números A y B:

- Si A + B ≤ 9 entonces el resultado se deja igual


- Si A + B > 9 entonces se suma 6 al resultado

Ejemplo 1.34: Realizar en BCD las siguientes sumas de números decimales:

a) 5 + 3 b) 5 + 6 c) 8 + 9

La solución es la siguiente:

a) b)
Tema 1. Sistemas de numeración y codificación de la información 24

c)

1.4.3 Código Gray


A veces interesa codificar cantidades numéricas en binario, pero de un modo no usual,
como consecuencia de una necesidad concreta.

Ejemplo 1.35: Supongamos que queremos construir un circuito digital detector de la


dirección del viento (veleta digital) que indique el ángulo en el que gira el viento con
una precisión de 45º.

Figura 1. 15: Veleta con salida digital de tres bits

Se necesita dividir la circunferencia de 360º en 8 partes para obtener una precisión de


45º. Por ello necesitamos un código de 3 bits que se asocie a cada sector de 45º.

Esta veleta interiormente posee un disco rotatorio con el viento (figura 1.16) sobre el
que existen tres escobillas conductoras de electricidad que se sitúan en cada momento
sobre las tres porciones en las que se divide cada sector. Cada una de estas áreas tiene
una superficie metálica cargada situada bajo un elemento aislante que las recubre
inicialmente. Para asignar a una porción de sector un uno lógico hay que retirar dicho
aislante, de modo que cuando la escobilla toque la parte metálica interpretará la
lectura de dicha área de sector como un “1”, mientras que si toca la superficie aislante
lo interpretará como un “0”.

La primera solución que se nos ocurre es codificar el disco usando el código binario
natural de 3 bits, resultando el disco de la figura 1.16 en la que las zonas negras son
las zonas metálicas descubiertas y las blancas aquellas en las que no se ha retirado el
aislante:
Tema 1. Sistemas de numeración y codificación de la información 25

Figura 1. 16. Solución 1: Codificación binaria con 3 bits

El problema con esta codificación es que si las tres escobillas no están totalmente
alineadas al producirse una transición de un sector a otro podrían producirse valores
intermedios incorrectos. Por ejemplo si la escobilla central se encontrara ligeramente
desplazada a la izquierda respecto a las de los extremos y se produjera un cambio de
viento que diera lugar a una transición desde el sector 0 (000) al sector 7 (111), se
generaría el valor intermedio erróneo 010 (sector 2) lo cual podría interpretarse como
que en la transición del sector 0 al 7 se ha pasado por 2, lo cual es imposible.

Para solucionar este tipo de problemas aparecen los códigos cíclicos, de los cuales el
código Gray es el más popular. Este tipo de códigos se caracterizan porque entre un
carácter y su siguiente sólo existe un bit de diferencia. En la tabla siguiente se muestra
un código Gray de 3 bits:

Gray (3 bits) 000 001 011 010 110 111 101 100
Decimal 0 1 2 3 4 5 6 7

Ya se verá más adelante cómo se crea un código de este tipo, pero volviendo al ejemplo
si se utiliza el código anterior se obtiene una codificación más segura que la primera,
en la cual ya no se producirían errores en las transiciones, puesto que entre dos
sectores contiguos sólo variaría una porción de sector, tal y como puede verse en la
figura 1.17:

Figura 1. 17: Solución 2: Codificación Gray con 3 bits


Tema 1. Sistemas de numeración y codificación de la información 26

Las características del código Gray son las siguientes:

- Código sin pesos


- Es no aritmético
- Es cíclico

Existen diferentes formas para construir un código Gray con n bits siendo la más usual
la realizada a partir de un dato binario, dada por la siguiente fórmula:

G = B ⊕ ( B >> 1)

Donde B es el dato en binario natural, ⊕ es la operación lógica XOR (figura 1.18),


“>>d” es la operación desplazamiento a la derecha de d bits y G es el resultado
codificado en Gray.

XOR
0⊕0=0
0⊕1=1
1⊕0=1
1⊕1=0
Figura 1. 18: Función lógica XOR

Ejemplo 1.36: Convertir a código Gray el número binario de 5 bits 10110.

Por el método anteriormente expuesto la solución es 11101:

1 0 1 1 0 BIN

1 0 1 1 0 BIN>>1

1 1 1 0 1 GRAY

Existen otros dos métodos para realizar la conversión no sólo de binario a Gray, sino de
Gray a binario.

- Conversión de binario a Gray: el primer bit es igual, y para el resto se hace la


operación XOR de cada bit del número binario con su siguiente.
- Conversión de Gray a binario: el primer bit es igual, y para el resto se hace la
operación XOR de cada bit Gray con el bit siguiente del número binario.

Ejemplo 1.37: Convertir a Gray el dato binario 10110. Hacer el proceso inverso con el
dato Gray 11101.

En la figura 1.19 se muestra el resultado de ambas conversiones:


Tema 1. Sistemas de numeración y codificación de la información 27

1 0 1 1 0 Binario 1 1 1 0 1 Gray

1 1 1 0 1 Gray 1 0 1 1 0 Binario
1 1⊕ 0 0 ⊕ 1 1 ⊕ 1 1⊕ 0 1 1 ⊕ 1 0 ⊕ 1 1⊕ 0 1 ⊕ 1

Figura 1. 19: a) Conversión de Gray a binario b) Conversión binario a Gray

1.5 Detección de errores


Según lo visto hasta ahora, el objetivo de la codificación ha sido únicamente el de
representar la información, sin ningún análisis del dato codificado. Sin embargo, la
codificación puede tener otras utilidades, como son la detección y/o corrección de
errores, con el fin de no sólo representar la información, sino también asegurar su
veracidad. Supóngase por ejemplo el llamado código 2 en 5 de la figura 1.20, el cual
está formado por todas las posibles combinaciones de 5 bits en los que dos de ellos con
unos y el resto ceros.
Decimal 2 en 5
0 00011
1 00101
2 00110
3 01001
4 01010
5 01100
6 10001
7 10010
8 10100
9 11000
Figura 1. 20: Código 2 en 5
Si en una transmisión de un dato decimal codificado en el código 2 en 5 se produjese un
error en uno de los bits transmitidos, podríamos saber de inmediato que se ha producido
un error, porque o bien un cero se transforme en un uno con lo que tendremos un
carácter con 3 unos, o bien porque un uno se transforme en un cero con lo que se
recibirá un dato con un sólo uno. En ambos casos se sabe que se ha producido un error,
aunque no se puede saber qué dato fue el que se codificó en el origen, por lo que habría
que retransmitir la información.

Ejemplo 1.38: En un proceso de compra mediante tarjeta de crédito se transmite desde


el datáfono del comercio el número de tarjeta de crédito 0010 5820 0582 1256 usando
el código 2 en 5 para codificar dichos números. La información recibida en la central
autorizadora es:
00011 00011 00101 00111
01100 10100 00110 00111
00011 01100 10100 00110
00101 00110 01100 10001
Tema 1. Sistemas de numeración y codificación de la información 28

¿Autorizará la transacción la central?

Si observamos el código recibido, todos los caracteres son correctos (2 unos y 3 ceros)
excepto el cuarto (el 00111). Esto quiere decir que ha habido algún error en la
transmisión por lo que no se autorizará la transacción (ya que no se puede decodificar
el número de tarjeta), de modo que la central probablemente solicitará el reenvío del
número de tarjeta.

El ejemplo anterior muestra que a partir de la forma en que se han codificado los datos,
se ha obtenido una cierta seguridad en la veracidad de los mismos, aunque, si en vez de
haber sido sólo un bit el erróneo (00011  00111), hubieran sido dos (00011  00101)
se habría pasado por alto el error de transmisión y lamentablemente (para el afectado) se
habría cargado el importe de la transacción a un número de cuenta diferente.

Esta consideración lleva al concepto de “distancia Hamming”. Se denomina distancia


Hamming entre dos caracteres de un código al número de bits en el que difieren. Se
denomina distancia Hamming de un código a la mínima distancia entre dos caracteres
cualesquiera de dicho código. Se verá que esta distancia Hamming de un código dado
tiene relación con el número de bits erróneos que son posibles detectar y corregir con
dicho código.

Ejemplo 1.39: ¿Cual es la distancia Hamming del código 2 en 5?

Si observamos la tabla 1.20 vemos que la distancia que existe entre dos caracteres
cualesquiera es como mínimo de 2 bits, por lo que se concluye que la distancia
Hamming dH del código 2 en 5 es dH = 2.

Algunos ejemplos de códigos con distancia mínima 1 son el código BCD, el código
ASCII, el binario natural, etc. Este tipo de códigos no permiten detección de errores ya
que un cambio en un bit en un carácter da lugar a otro carácter válido.

Los códigos con distancia mínima 2, como por ejemplo el código 2 en 5, permiten la
detección de errores de hasta 1 bit.

Un método muy utilizado para generar códigos con distancia mínima 2 es la generación
de un bit de paridad. Este bit de paridad P se genera a partir del resto de bits de un
carácter y se suele concatenar al carácter como MSB. Existen dos posibilidades de
generación de un bit de paridad:

- Bit de paridad par: se genera el bit P de forma que el número de unos del carácter
codificado (incluido P) debe ser par.
- Bit de paridad impar: se genera el bit P de forma que el número de unos del carácter
codificado (incluido P) debe ser impar.

Este método se basa en el hecho de que si dos caracteres binarios difieren en un sólo bit,
es claro que el número de unos en uno de ellos será par y en el otro impar. Lo que se
hace por tanto es añadir un bit extra a cada uno de los caracteres que los etiquete como
“par” o “impar”, de modo que pasen a ser de uno a dos los bits en los que difieran.
Tema 1. Sistemas de numeración y codificación de la información 29

Ejemplo 1.40: Crear un código que permita la detección de errores en números


decimales basándose en el código BCD.

Una solución puede ser añadir un bit de paridad par al código BCD. Se tendría el
siguiente código de 5 bits:

DEC 0 1 2 3 4 5 6 7 8 9
BCD 00000 10001 10010 00011 10100 00101 00110 10111 11000 01001

1.6 Corrección de errores


Se ha visto en el apartado anterior que los códigos con distancia mínima 2 permitían la
detección de 1 bit erróneo. Generalizando este resultado se puede decir que los códigos
con distancia mínima d permiten detectar errores en d-1 bits.

La solución tras encontrar un error en un dato codificado suele ser la retransmisión de la


información, sin embargo esto no siempre es posible o deseable. Por ejemplo, en el caso
de un robot enviado a explorar el planeta Marte no es deseable que ante un error en un
bit en los ficheros del ordenador de a bordo del robot se tenga que reenviar desde la
Tierra la información ya que ésta tardaría aproximadamente 20 minutos en llegar. Otro
ejemplo es el de la información grabada en un CD-ROM, donde no es posible volver a
solicitar los datos almacenados en caso de error.

Ejemplo 1.41: Sea el siguiente código de 4 caracteres de 5 bits: 00000, 10101, 11010,
01111.
a) Calcular su distancia Hamming.
b) Determinar el número de bits erróneos que permite detectar.
c) Determinar el número de bits erróneos que permite corregir.

Solución:
a) Se observa que el número de bits en el que difieren dos caracteres cualesquiera es
como mínimo 3, por lo que la distancia Hamming dH es igual a 3.

b) Por el resultado anterior tenemos que, para que un carácter del código se
transforme en otro carácter válido, es necesario que como mínimo 3 bits modifiquen su
valor, por lo que si se produce un error en sólo 2 bits se detectará el error.

c) Si se produce error en 2 bits se ha visto que se detecta el error, pero no se puede


saber cual era el carácter codificado, ya que como ejemplo, si se detecta el carácter
01110 no se puede saber de antemano si el carácter original era el 01101 (01101 
01110) o el 10110 (10110  01110). Es decir, el carácter 01110 se encuentra “a medio
camino” entre el 01101 y el 10110. Sin embargo si sólo se produce un error en un
único bit en cualquiera de los caracteres del código se generará un carácter más
“cercano” a su original que a cualquiera de los demás, puesto que la distancia mínima
para que haya incertidumbre (el punto medio) es 2. Como ejemplo si se recibe el
carácter 10010 y se presupone que el número de bits erróneos es sólo uno, se deduce
que el único carácter que pudo generarlo es el 11010. Si sólo supiéramos que el
número de errores es menor a 3 no podríamos saber cual era el carácter original ya
que el 00000 con dos errores da también lugar al 10010.
Tema 1. Sistemas de numeración y codificación de la información 30

Generalizando los resultados del ejemplo anterior se pueden deducir las siguientes
ecuaciones:

- Bits posibles de detectar con un código de distancia Hamming dH: bd = dH – 1


- Bits posibles de corregir con un código de distancia Hamming dH: bc = (dH – 1) / 2

1.6.1 Código Hamming


Otro ejemplo de código muy conocido de código con distancia mínima 3 es el código
Hamming propuesto por Richard Hamming en 1950. Está basado en el uso de bits de
paridad.

Cada carácter codificado en código Hamming de H bits está formado por los siguientes
bits:

- P bits de paridad
- D bits de datos
-H=D+P

El número de bits de paridad determina la cantidad de bits de datos que pueden


utilizarse según la relación D = 2P – P – 1. Todos los bits se numeran del 1 (el LSB) al
2P-1 (el MSB).

Codificación Hamming con paridad par


El proceso para la codificación de un dato binario en código Hamming de paridad par es
el siguiente:

- Los bits de paridad se colocan en las posiciones potencias de 2 dentro del carácter
codificado final.

- Se calcula el valor de cada uno de los bits de paridad sabiendo éstos establecen
paridad par entre todos los bits cuyo índice en binario contenga un 1 en la posición
en la que el índice del bit de paridad tiene el 1.

Ejemplo 1.42: Codificar en código Hamming el número 9BCD.

Dado que 9BCD = 1001, necesitaremos como mínimo 4 bits de datos para codificarlo.
Para ello con 3 bits de paridad es suficiente ya que 23 – 3 – 1 = 4, que son los bits de
datos que se pueden codificar con 3 bits de paridad.

El código Hamming constará de este modo de 3 bits de paridad (P1, P2 y P4) y 4 bits de
datos (D3, D5, D6 y D7), 7 bits en total que se numeran del 1 al 7 y se ordenan del
siguiente modo: D7D6D5P4D3P2P1.

A los bits de datos se le asignan los valores del dato a codificar en el siguiente orden:
D7D6D5D3=1001.

Para ver qué bits de datos se asocian a cada uno de los bits de paridad, representamos
en una tabla los 7 índices en binario de cada uno de los bits Hamming:
Tema 1. Sistemas de numeración y codificación de la información 31

Bit Hamming Índice en binario


P1 001
P2 010
D3 011
P4 100
D5 101
D6 110
D7 111

A partir de esta tabla se ve que el bit de paridad 4 (100) “controlará” la paridad de los
bits de datos 5, 6 y 7, ya que sus índices en binario tienen un 1 en la posición más a la
izquierda, la misma donde P4 tiene el 1. Análogamente se obtienen el resto de
relaciones entre los bits de paridad y los de datos que se resumen en la siguiente tabla:

Bit de paridad Bits de datos Valores


P1 D3, D5, D7 1, 0, 1
P2 D3, D6, D7 1, 0, 1
P4 D5, D6, D7 0, 0, 1

Resta únicamente el cálculo de los bits de paridad según los valores que tengan los bits
de datos. Este cálculo es el siguiente (PP ≡ Paridad Par):

P1 = PP(1,0,1) = 0
P2 = PP(1,0,1) = 0
P4 = PP(0,0,1) = 1

Con lo que el dato 1001 codificado en Hamming resulta finalmente el 1001100.

Ejemplo 1.43: Codificar el carácter ASCII “f” en código Hamming y expresar el


resultado en hexadecimal.

En primer lugar hay que ver la representación binaria del carácter ASCII “f”. Según la
tabla 1.11 se tiene que corresponde al hexadecimal 66, que en binario de 8 bits es
01100110.

Necesitamos codificar 8 bits, por lo que con 3 bits de paridad no es suficiente. Con 4
bits de paridad podemos codificar 24 – 4 – 1 = 11 bits de datos, por lo que el resto de
bits los dejaremos a 0. Tendremos 11 bits de datos y 4 bits de paridad.

El código Hamming deberá tener por tanto 15 bits ordenados del siguiente modo:

D15D14D13D12D11D10 D9P8D7D6D5P4D3P2P1

donde los bits de datos tendrán como valor:

D15D14D13 D12D11D10D9 D7D6D5D3 = 000 0110 0110

Escribimos la tabla para hacer la relación bits de paridad / bits de datos:


Tema 1. Sistemas de numeración y codificación de la información 32

Bit Hamming Índice en binario


P1 0001
P2 0010
D3 0011
P4 0100
D5 0101
D6 0110
D7 0111
P8 1000
D9 1001
D10 1010
D11 1011
D12 1100
D13 1101
D14 1110
D15 1111

De donde se obtiene la relación siguiente:

Bit de paridad Bits de datos Valores


P1 D3, D5, D7, D9, D11, D13, D15 0, 1, 0, 0, 1, 0, 0
P2 D3, D6, D7 D10, D11, D14, D15 0, 1, 0, 1, 1, 0, 0
P4 D5, D6, D7 D12, D13, D14, D15 1, 1, 0, 0, 0, 0, 0
P8 D9, D10, D11 D12, D13, D14, D15 0, 1, 1, 0, 0, 0, 0

Con lo que los bits de paridad quedarían como sigue:

P1 = PP(0, 1, 0, 0, 1, 0, 0) = 0
P2 = PP(0, 1, 0, 1, 1, 0, 0) = 1
P4 = PP(1, 1, 0, 0, 0, 0, 0) = 0
P8 = PP(0, 1, 1, 0, 0, 0, 0) = 0

Y el código Hamming finalmente es 000 0110 0011 0010 = 063216

Decodificación Hamming con paridad par


El proceso para la decodificación de un dato binario en código Hamming de paridad par
es el siguiente:

- Se calculan las paridades a posteriori de cada uno de los grupos de bits de datos
controlados por bits de paridad incluyendo en el cálculo el propio bit de paridad.
- Se forma un número binario E con el resultado del cálculo de las paridades a
posteriori. Pueden ocurrir varias cosas:
⋅ Si el número E es cero quiere decir que no ha habido error
⋅ Si el número E es distinto de cero el propio valor decimal de E es el bit erróneo.
En este caso bastará con invertir el valor de dicho bit para recuperar su valor
original.
- Por último se extraen los bits de datos
Tema 1. Sistemas de numeración y codificación de la información 33

Ejemplo 1.44: Decodificar el dato binario 0001100 si está codificado en Hamming de 7


bits.

En primer lugar según la tabla de índices se calculan los bits de error:

Bit de error Bits de datos Valores


E1 P1, D3, D5, D7 0, 1, 0, 0
E2 P2, D3, D6, D7 0, 1, 0, 0
E4 P4, D5, D6, D7 1, 0, 0, 0

E1 = PP(0, 1, 0, 0) = 1
E2 = PP(0, 1, 0, 0) = 1
E4 = PP(1, 0, 0, 0) = 1

E = E4E2E1 = 1112 = 710

Como E es distinto de cero existe error de un bit, siendo dicho bit erróneo el 7 (D7). El
valor de este bit se invierte (0  1) con lo que el código Hamming original era
1001100. De este código se pueden extraer ahora los bits de datos resultando que el
dato codificado era 1001 (9BCD).
Tema 2. Álgebra de Boole 34

Tema 2
Álgebra de Boole
Álgebra de Boole........................................................................................................... 34
2.1 Introducción.......................................................................................................... 34
2.2 Leyes del Álgebra de Boole.................................................................................. 35
2.3 Circuitos de conmutación ..................................................................................... 36
2.4 Puertas lógicas básicas ......................................................................................... 38
2.5 Funciones de conmutación ................................................................................... 40
2.5.1 Funciones de conmutación de una variable............................................ 42
2.5.2 Funciones de conmutación de dos variables........................................... 43

2.1 Introducción
En 1854 George Boole desarrolla el álgebra que lleva su nombre “Álgebra de Boole”
considerada como las matemáticas de los sistemas digitales. Años más tarde, en 1934
Claude Shannon la aplica al análisis y diseño de circuitos dándole la popularidad que
tiene hoy en día. Como toda álgebra está compuesta por elementos, operaciones y
reglas. Veamos como ejemplo el álgebra de Boole de dos elementos (también conocida
como Teoría de la Conmutación). Esta sencilla álgebra está formada por:

- Un conjunto B2 formado por dos elementos, el 0 y el 1


- Unas operaciones básicas a realizar entre dicho elementos como son la suma, el
producto y el complemento. Estas operaciones se definen a través de las siguientes
tablas de la figura 2.1.
- Una serie de reglas (que se verán en los apartados siguientes).

· 0 1 + 0 1 A A
0 0 0 0 0 1 0 1
1 0 1 1 1 1 1 0
Producto Lógico Suma Lógica Complemento
Figura 2. 1: Operaciones del Álgebra de Boole de 2 elementos

Este será el álgebra usual en el que se trabaje en el resto de esta asignatura, aunque no
debe olvidarse que se pueden construir otras álgebras de Boole con otro tipo de
elementos y otro tipo de operaciones, siempre que se verifiquen las reglas que se verán
más adelante. Como ejemplo, se puede demostrar que el conjunto de números divisores
de 10 junto con las operaciones Mcd y mcm (máximo común divisor y mínimo común
múltiplo) forman un álgebra de Boole.

Un concepto muy importante en el álgebra de Boole es el concepto de DUALIDAD.


Este concepto nos asegura que si una expresión determinada es válida su expresión dual
también lo será. Para obtener la expresión dual de una expresión dada hay que realizar
los cambios de la figura 2.2.
Tema 2. Álgebra de Boole 35

Ejemplo 2.1: Hallar la expresión dual de A + 1 = 1 y comprobar su validez en el


álgebra de Boole de dos elementos.

Según la figura 2.2 la expresión dual será A * 0 = 0, de modo que ya sea A=0 o A=1 en
ambos casos se cumple la tabla de la figura 2.1.

Nota: El signo de multiplicar (* o · ) suele eliminarse de las ecuaciones.

Expresión válida Expresión dual válida


0 1
1 0
+ *
* +
A A

Figura 2. 2: Elementos en forma normal y forma dual

2.2 Leyes del Álgebra de Boole

Regla Forma normal Forma dual

I) Leyes conmutativas A+B = B+A AB = BA

II) Leyes asociativas (A+B) + C = A + (B+C) (A · B) · C = A · (B · C)

III) Leyes distributivas A (B+C) = (AB) + (AC) A + (BC) = (A+B)(A+C)

IV) Elementos neutros A+0=A A·1=A

V) Leyes de anulación A+1=1 A·0=0

VI) Leyes tautológicas A+A=A A·A=A

VII) Leyes de complementación A+ A = 1 A·A = 0

A + AB = A A (A + B) = A
VIII) Leyes de absorción
A+ AB = A+ B A(A + B) = AB

IX) Teoremas de DeMorgan A+ B = A·B A·B = A + B

Figura 2. 3: Leyes del Álgebra de Boole

Ejemplo 2.2: Demostrar las formas normales de las leyes de absorción.

a) A + AB = A ( 1 + B) = A ( 1 ) = A
b) A + A B = (A + AB) + A B = A + B( A + A ) = A + B (1) = A + B
Tema 2. Álgebra de Boole 36

Ejemplo 2.3: Demostrar mediante tablas verdad los teoremas de DeMorgan.


Demostración:
A B A+ B A·B A B A·B A + B
00 1 1 00 1 1
01 0 0 01 1 1
10 0 0 10 1 1
11 0 0 11 0 0
Forma normal Forma Dual
Figura 2. 4: Demostración de los teoremas de DeMorgan con tablas verdad

Ejemplo 2.4: Aplicar los teoremas de DeMorgan a la expresión x + y + z

Solución: x + y + z = x · y · z = x · y · z

Ejemplo 2.5: Aplicas sucesivamente los teoremas de DM a la expresión w ·x · y ·z

Solución: w ·x · y ·z = w + x + y + z = w + x + y + z

Ejemplo 2.6: Simplificar lo máximo posible mediante manipulaciones algebraicas la


expresión (AB+ C)(A+ BC)

Solución:
(AB+ C)(A+ BC) = (AB+ C) + (A+ BC) = AB·C + A·BC = (A+ B) C + A(B + C) =
= A C+ BC + AB + AC = (AC+ AC) + AB + BC = AC + AB + BC

Ejemplo 2.7: Simplificar lo máximo posible mediante manipulaciones algebraicas la


expresión A+ BC + D(E+ F)

Solución:
A+ BC + D (E+ F) = (A+ BC)·(D (E+ F)) = (A+ BC)·(D+ (E+ F)) = (A+ BC)·(D+ (E+ F)) =
= (A+ BC)·(D+ E+ F)

2.3 Circuitos de conmutación


Definición: denominamos circuito de conmutación a un sistema con entradas y salidas
discretas (no continuas). En la figura 2.5 puede verse el esquema de un circuito de
conmutación con n entradas y m salidas.

X1 z1

. . . .
Circuito
n . . . . m
de
. . . .
conmutación

Xn zm

xi, zi pertenecen a { 0, 1 }

Figura 2. 5: Esquema de un circuito de conmutación


Tema 2. Álgebra de Boole 37

Ejemplo 2.8: Dibujar el esquema y la tabla verdad de un circuito de conmutación con


dos entradas {x, y}, y tres salidas {z1, z2, z3}que realice las siguientes operaciones sobre
las entradas (PP ≡ paridad par):

a) z1: x + y b) z2: x · y c) z3: PP(x,y)

El esquema del circuito de conmutación pedido sería una particularización del


esquema de la figura 2.5 resultando el siguiente:

z1

x Circuito
de z2
y conmutación

z3

La tabla verdad se trata de una representación de todas las posibles combinaciones de


las entradas y sus salidas. En este caso sería la siguiente:

xy z1 z2 z3
00 0 0 0
01 1 0 1
10 1 0 1
11 1 1 0

Las variables x, y, z1, z2 y z3 sólo puede tomar valores de 0 y 1 y se conocen como


variables de conmutación. Los valores 0 y 1 son valores lógicos, ya que en la realidad
un circuito digital presenta en sus entradas y salidas voltajes que, dependiendo del valor
que tengan, se asocian al 0 o al 1 lógico. El 0 lógico es representado por una tensión de
valor 0 V más/menos un rango de error, mientras que el 1 lógico vendría dado
normalmente (aunque depende de la tecnología usada) por un voltaje de 5 V mas/menos
un rango de error.

Ejemplo 2.9: Si la forma de onda en función del tiempo del voltaje en un terminal de
salida de un circuito de conmutación es el de la figura 2.6, escribir las posibles lecturas
analógicas y digitales en la parte central de cada periodo de la señal de salida.

Figura 2. 6: Forma de onda


Una posible solución serían los valores de la siguiente tabla:

Medida analógica (V) 0,2 4,8 0,3 0,1 4,7 0,5 0,4 0,4
Medida digital 0 1 0 0 1 0 0 0
Tema 2. Álgebra de Boole 38

Como puede observarse el rango de salida analógico es infinito (son números reales),
sin embargo el rango de salida digital es discreto { 0, 1 }.

2.4 Puertas lógicas básicas


Las puertas lógicas van a ser la unidad mínima con la que se trabajará en el diseño de
sistemas digitales a lo largo de esta asignatura. Son los componentes base con los cuales
se construirán componentes cada vez más complejos como si de un mecano de tratara.
No se va estudiar el fundamento físico de estos componentes sino que serán tratados
como cajas negras con una serie de entradas y salidas interesando únicamente el modo
en que relacionan ambas.

Estas puertas lógicas están construidas a partir de un componente electrónico llamado


transistor (figura 2.7), el cual actúa como un interruptor microscópico construido en
silicio. Este transistor funciona de manera que deja circular una intensidad de corriente I
a través de él condicionada por la aplicación de una tensión V en uno de sus tres
terminales. Cuando se aplica una tensión V ≈ 5V circulará corriente a través del
transistor, y cuando V ≈ 0V no.

Se demostrará más adelante que se pueden construir puertas lógicas “macroscópicas”


con un interruptor eléctrico de modo que el concepto de puertas “digitales” no es nada
nuevo, sino que la gran revolución que supuso la aparición del transistor es la de poder
construirse con un material barato como es el silicio, y sobre todo, a una escala
microscópica, ya que su tamaño es del orden de la micra (1micra = 1metro/1.000.000),
lo cual da lugar a que en los microprocesadores quepan millones de transistores, y
consecuentemente la capacidad de realización de cálculos sea enorme en muy poco
espacio.

V I

Figura 2. 7: Símbolo del transistor

Aunque existen más tipos de puertas las 3 básicas son:

- NOT: Implementa la función lógica de la inversión


- AND: Implementa la función lógica del producto
- OR: Implementa la función lógica de la suma

a) Puerta NOT. Características:

x x x
x x 0 1
1 0 x

Símbolo Tabla verdad Cronograma


Tema 2. Álgebra de Boole 39

b) Puerta AND. Características:


x y xy x
0 0 0
x xy 0 1 0 y
y
1 0 0
1 1 1 xy
Símbolo Tabla verdad Cronograma

b) Puerta OR. Características:

x y x+ y x
0 0 0
x y
y x+ y 0 1 1
1 0 1
1 1 1 x+ y
Símbolo Tabla verdad Cronograma

Como se dijo anteriormente en este apartado, una vez vistas las tres puertas lógicas
básicas, se van a construir estas puertas en base a circuitos eléctricos macroscópicos
basados en interruptores.

a) Puerta OR “macroscópica“:
A A

B B

AB = 00 AB = 11

b) Puerta AND “macroscópica“:

A B A B

AB = 00 AB = 11

c) Puerta NOT “macroscópica“:

A A

A=0 A=1
Tema 2. Álgebra de Boole 40

Ejemplo 2.10: Escribir la tabla verdad del circuito eléctrico que controla la luz de una
habitación con dos interruptores. Construir un circuito lógico macroscópico que
implemente dicha tabla verdad.

Denominaremos A y B a los dos interruptores y F a la luz de la habitación (F = 0 si no


hay luz y F = 1 si la hay). Si asociamos el estado “pulsado” de un interruptor al 1
lógico, y el estado “sin pulsar” al 0 lógico, la tabla verdad que gobierna la existencia
de luz en la habitación es la siguiente:
AB F
00 0
01 1
10 1
11 0

Esta tabla verdad corresponde a la puerta lógica EXOR (se verá más adelante). Un
circuito eléctrico que sirva para implementar esta función podría ser el siguiente:

A B A B

AB = 00 AB = 11
Combinaciones de apagado

A B A B

AB = 01 AB = 11
Combinaciones de encendido

2.5 Funciones de conmutación


Definición: Se denomina función de conmutación a una aplicación del producto
cartesiano de n variables de conmutación de entrada en el conjunto {0, 1}.

La relación existente entre una función de conmutación y un circuito de conmutación es


que la función de conmutación es una representación abstracta de la funcionalidad de un
circuito de conmutación.

El sentido de la función de conmutación es por tanto el mismo que el de una función


matemática, pero donde el rango de valores de todas las variables (tanto de entrada
como de salida) es discreto.

Para representar una función matemática que actúe sobre un conjunto infinito (por
ejemplo sobre el conjunto de los números reales) es necesario expresarla en forma de
ecuación (forma algebraica). Sin embargo las funciones de conmutación, gracias a que
el conjunto de posibles combinaciones de las entradas es finito, pueden definirse
explicitando el valor de la salida para cada combinación de las entradas.
Tema 2. Álgebra de Boole 41

Existen los cuatro siguientes métodos para definir una función de conmutación:

- Tablas verdad
- Función algebraica
- Puertas lógicas
- Cronogramas

Conocido cualquiera de ellos se puede deducir fácilmente el resto.

Ejemplo 2.11: Representar de todas las formas posibles las tres funciones de
conmutación que implementa el circuito del ejemplo 2.8.

La tabla verdad ya fue representada en dicho ejemplo:

xy z1 z2 z3
00 0 0 0
01 1 0 1
10 1 0 1
11 1 1 0

Las funciones algebraicas que describen las tres salidas en función de las entradas
también fueron definidas en el enunciado del ejemplo resultando las siguientes:

z1 = x + y z2 = x · y z3 = x ⊕ y

Nota: El operador ⊕ corresponde la función EXOR, que se verá más adelante.

No obstante también se explicará posteriormente como obtener estas ecuaciones a


partir de la tabla verdad.

El cronograma es una representación en forma onda en función del tiempo de las


salidas y las entradas. De la tabla verdad pueden obtenerse también el cronograma y
las puertas lógicas (figura 2.8).
x xy
y z1
z1
z2
z2
z3
z3
a) Cronograma b) Puertas lógicas

Figura 2. 8: Representación de funciones de conmutación mediante:


a) cronograma b) puertas lógicas
Tema 2. Álgebra de Boole 42

2.5.1 Funciones de conmutación de una variable


Si nos preguntáramos ¿cuantas funciones reales de una variable existen? la respuesta
sería claramente “infinitas”, incluso aunque dichas funciones sólo utilizaran las
operaciones de suma y producto. Algunos ejemplos de tales funciones reales podrían ser
f(x)=x, f(x)=x2, f(x)=2x+3, etc.

Sin embargo cuando hablamos de funciones de conmutación, debido a que tanto las
entradas como las salidas sólo pueden tomar valores discretos, y ayudados por las reglas
del álgebra de Boole, se tiene que el número de funciones de conmutación de una
variable es un número finito. En concreto el número de funciones de conmutación de
una variable es únicamente de cuatro:

x f0 f1 f2 f3
0 0 0 1 1
1 0 1 0 1
Figura 2. 9: Funciones de conmutación de una variable

Como puede verse, sólo existen dos posibles entradas (0 y 1), y ante ellas sólo existen
cuatro formas distintas de responder (siempre con 0’s, siempre con 1’s, con 0/1 y con
1/0).

Las cuatro funciones anteriores poseen los siguientes nombres y formas algebraicas:

- Función nula: f 0 ( x) = 0
- Función transferencia: f1 ( x) = x
- Función complemento: f 2 ( x) = x
- Función unidad: f 0 ( x) = 1

Cualquier otra función de conmutación de una variable tales como f(x)=x·x,


f(x)=x+x+1, etc... podrán reducirse mediante reglas del álgebra de Boole a alguna de las
cuatro formas anteriores.

Ejemplo 2.12: Sea la función de conmutación de una variable f ( x) = x ⋅ x + x ⋅ x + x ⋅ x .


Determinar a qué función de conmutación de una variable corresponde.

En primer lugar, sabemos por las leyes VI-dual y VII-dual de la tabla 2.3 que: x ⋅ x = 0 ,
x ⋅ x = x y x ⋅ x = x , de modo que la función puede reducirse a f ( x) = x + x .

De nuevo, por la ley VII-normal tabla 2.3 se llega a que la función anterior es la
función unidad: f(x)=1.

El número de funciones de conmutación, obviamente no sólo es finito para una variable,


sino para cualquiera que sea el número de variables de entrada. En concreto, para n
variables de entrada, el número de funciones de conmutación es de 2 N , con N=2n.
Tema 2. Álgebra de Boole 43

2.5.2 Funciones de conmutación de dos variables


En este caso (n=2) de modo que el número de funciones de conmutación será:

N = 22 = 4 ⇒ 24 = 16 funciones de conmutación

Estas 16 funciones son las siguientes:

Salida
Función Ecuación Nombre
00 01 10 11
f0 0 Nula 0 0 0 0
f1 xy AND 0 0 0 1
f2 xy 0 0 1 0
f3 x 0 0 1 1
f4 xy 0 1 0 0
f5 y 0 1 0 1
f6 x ⊕ y = xy + xy EXOR 0 1 1 0
f7 x+ y OR 0 1 1 1
f8 x+ y = x⋅y NOR 1 0 0 0
f9 x: y = x y + x y EXNOR 1 0 0 1
f10 y 1 0 1 0
f11 x+ y 1 0 1 1
f12 x 1 1 0 0
f13 x+y 1 1 0 1
f14 xy = x + y NAND 1 1 1 0
f15 1 Unidad 1 1 1 1
Figura 2. 10: Funciones de conmutación de dos variables

Dado que la tabla anterior es simétrica respecto de sus salidas, las funciones anteriores
cumplen que fi = f15−i con i = 0 ... 15 (por ejemplo f 4 = f11 ).

Revisemos las funciones anteriores más relevantes por grupos.

I) Funciones elementos neutro

Las funciones de conmutación pueden realizar operaciones de suma y producto entre


ellas (de hecho el conjunto de funciones de conmutación es otro ejemplo de álgebra de
Boole).

Dentro de este álgebra de Boole de funciones de conmutación f0(x, y) sería el elemento


neutro de la suma y f15(x, y) el elemento neutro del producto.

II) Funciones producto

Las funciones producto sólo presentan un 1 a su salida para todas las combinaciones de
las entradas. Dentro de ellas tenemos las cuatro siguientes:
Tema 2. Álgebra de Boole 44

a) Función AND

x y f x
0 0 0
x y
y f ( x, y ) = xy 0 1 0
1 0 0
1 1 1 f
Símbolo de la puerta Tabla verdad Cronograma

b) Función NOR

x y f x
0 0 1
x y
y f (x, y) = x + y 0 1 0
1 0 0
1 1 0 f
Símbolo de la puerta Tabla verdad Cronograma

c) Funciones de inhibición

x y f x
0 0 0
x y
y f ( x , y ) = xy 0 1 0
1 0 1
1 1 0 f
Símbolo de la puerta Tabla verdad Cronograma

x y f x
0 0 0
x
y f ( x, y ) = xy 0 1 1 y
1 0 0
1 1 0 f
Símbolo de la puerta Tabla verdad Cronograma
Tema 2. Álgebra de Boole 45

III) Funciones suma

Las funciones suma sólo presentan un 0 a su salida para todas las combinaciones de las
entradas. Dentro de ellas tenemos las cuatro siguientes:

a) Función OR

x y f x
0 0 0
x y
y f ( x, y) = x + y 0 1 1
1 0 1
1 1 1 f
Símbolo de la puerta Tabla verdad Cronograma

b) Función NAND

x y f x
0 0 1
x y
y f ( x , y ) = xy 0 1 1
1 0 1
1 1 0 f
Símbolo de la puerta Tabla verdad Cronograma

c) Funciones de implicación

x y f x
0 0 1
x y
y f ( x, y ) = x + y 0 1 0
1 0 1
1 1 1 f
Símbolo de la puerta Tabla verdad Cronograma

x y f x
0 0 1
x y
y f ( x, y ) = x + y 0 1 1
1 0 0
1 1 1 f
Símbolo de la puerta Tabla verdad Cronograma
Tema 2. Álgebra de Boole 46

IV) Funciones de exclusividad

Las funciones de exclusividad son muy útiles siendo sus principales funciones las
siguientes (PP ≡ paridad par y PI ≡ paridad impar):

- Generadores de bits de paridad (EXOR ≡ PP y EXNOR ≡ PI)


- Comprobadores de paridad
- Comparadores de bits

Estas funciones se verán en un próximo capítulo.

a) Función Exclusive-OR (EXOR o XOR)

x y f x
0 0 0
x y
y f ( x, y ) = x ⊕ y 0 1 1
1 0 1
1 1 0 f
Símbolo de la puerta Tabla verdad Cronograma

b) Función Exclusive-NOR (EXNOR o XNOR)

x y f x
0 0 1
x y
y f ( x, y ) = x : y 0 1 0
1 0 0
1 1 1 f
Símbolo de la puerta Tabla verdad Cronograma

Como puede verse en sus tablas verdad, ambas funciones son mutuamente
complementarias.

Ejercicio 2. 13: Demostrar mediante reglas del álgebra de Boole que x ⊕ y = x : y .

Solución:
x ⊕ y = xy + xy = xy ⋅ xy = ( x + y ) ⋅ ( x + y ) = ( x + y ) ⋅ ( x + y ) = x x + x y + y x + y y =
= x y + x y = x: y
Tema 2. Álgebra de Boole 47
Tema 3. Funciones de conmutación 48

Tema 3
Funciones de conmutación
Funciones de conmutación........................................................................................... 48
3.1 Minterms y maxterms........................................................................................... 48
3.2 Desarrollo de Shannon ......................................................................................... 50
3.3 Adyacencias.......................................................................................................... 52
3.4 Funciones incompletamente especificadas........................................................... 54
3.5 Mapas de Karnaugh .............................................................................................. 55
3.6 Minimización multifuncional ............................................................................... 59

3.1 Minterms y maxterms


Definición: Se define un minterm de n variables { x1,...,xn } como un producto en el que
de dichas variables en el que aparecen todas ellas sin repetirse en forma normal o
complementada.

Ejemplo 3.1: Indicar cuales de las siguientes expresiones sobre las variables {x, y, z}
son minterms y cuales no:

a) x y z b) x y z c) x y z d) x y z z e) x + y + z f) x + y

Los únicos términos que cumplen la definición anterior son a) y c).

Algunas características de los minterms de n variables son:


- existen 2n posibles minterms de n variables
- el cronograma de un minterm de n variables tiene un único uno y 2n-1 ceros

Ejemplo 3.2: Escribir todos los posibles minterms de 3 variables.

Como puede verse en la siguiente tabla, a partir de la representación binaria del


minterm, se obtiene la representación algebraica complementando las variables donde
esté el 0, y dejando en forma normal las variables que correspondan al 1.

Rep. binaria
Rep. algebraica Rep. numérica
xyz
000 xyz m0
001 xyz m1
010 x yz m2
011 x yz m3
100 xyz m4
101 xyz m5
110 xyz m6
111 x y z m7
Tema 3. Funciones de conmutación 49

Ejemplo 3.3: Dibujar el cronograma del minterm de tres variables m6.

m6

Definición: Se define un maxterm de n variables { x1,...,xn } como una suma en la que


de dichas variables en el que aparecen todas ellas sin repetirse en forma normal o
complementada.

Ejemplo 3.4: Indicar cuales de las siguientes expresiones sobre las variables {x, y, z}
son maxterms y cuales no:

a) x y z b) x + y + z c) x + y + z d) x + y + z + z e) x y + z f) x + z

El único término que cumple la definición de maxterm es el c).

Algunas características de los maxterms de n variables son:

- existen 2n posibles maxterms de n variables


- el cronograma de un maxterm de n variables tiene un único cero y 2n-1 unos

Al contrario que en el caso de los minterms, a partir de la representación binaria


(también llamada representación polar) se puede obtener la representación algebraica
dejando el 0 en forma normal y el 1 en forma complementada.

Ejemplo 3.5: Escribir todos los posibles maxterms de 3 variables.

Rep. binaria
Rep. algebraica Rep. numérica
xyz
000 x+ y+z M0
001 x + y + z M1
010 x + y + z M 2
011 x + y + z M 3
100 x + y+z M4
101 x + y+z M5
110 x+y+z M6
111 x+y+z M7
Tema 3. Funciones de conmutación 50

Ejemplo 3.6: Dibujar el cronograma del maxterm de tres variables M6.

M6

Es fácil observar que la relación entre un minterm mi, y un maxterm Mi es mi = M i .

Ejemplo 3.7: Demostrar algebraicamente que m3 = M 3 .


Solución: m3 = x y z = [ DeMorgan] = x + y + z = M 3

3.2 Desarrollo de Shannon


Cualquier función de n variables puede expresarse como suma única de minterms
(también llamada forma SOP ≡ Sum Of Products) o producto único de maxterms
(forma POS ≡ Product Of Sums).

Este resultado quiere decir que para implementar cualquier circuito digital que lleve a
cabo una determinada función de conmutación de n variables, sólo se necesitan dos
niveles de puertas.

En caso de implementar el circuito como suma de m minterms se necesitará un primer


nivel formado por m puertas AND de n entradas y un segundo nivel formado por una
puerta OR de m entradas. En caso de implementar el circuito como producto de m
maxterms se necesitará un primer nivel formado por m puertas OR de n entradas y un
segundo nivel formado por una puerta AND de m entradas.

Figura 3. 1: Formas canónicas: a) Suma de minterms b) Producto de maxterms

Ejemplo 3.8: Expresar la función f ( x, y, z ) = x + y + z como suma de minterms y


producto de maxterms. ¿Cual de las dos soluciones requiere menor número de puertas
lógicas para su implementación como circuito digital? Escribir también la tabla verdad
de la función de conmutación.
Tema 3. Funciones de conmutación 51

Solución:

- como suma de minterms (SOP):

x + y + z = ( x + y ) ⋅ z = xz + yz = x( y + y ) z + ( x + x ) yz = x y z + x y z + x y z + x y z =
x y z + x y z + x y z = Σ m (2, 4, 6)

- como producto de maxterms (POS):

x + y + z = ( x + y ) ⋅ z = ( x + y + zz ) ⋅ ( yy + z ) = ( x + y + z ) ⋅ ( x + y + z ) ⋅ ( y + z ) ⋅ ( y + z ) =
= ( x + y + z ) ⋅ ( x + y + z ) ⋅ ( xx + y + z ) ⋅ ( xx + y + z ) =
= ( x + y + z) ⋅ ( x + y + z ) ⋅ ( x + y + z) ⋅ ( x + y + z) ⋅ ( x + y + z) ⋅ ( x + y + z) =
= Π M (0,1,3,5, 7)

El coste de las dos implementaciones anteriores es:

Forma canónica AND OR Total


SOP 3 (3) 1 (3) 4 (3)
POS 1 (5) 5 (3) 6 (3,3)

Por lo que la implementación de menor coste es la SOP.

La tabla verdad de la función de conmutación es la siguiente:

xyz x+ y+ z
000 0
001 0
010 1
011 0
100 1
101 0
110 1
111 0

Como puede observarse, observando los unos de la tabla verdad se obtiene la expresión
de la función de conmutación como suma de minterms en formato numérico, es decir,
en la forma ∑ m(2, 4, 6). Los ceros dan la expresión numérica como producto de
maxterms, esto es ∏ M(0, 1, 3, 5,7).

Se ha visto en el ejemplo anterior que en el diseño de circuitos digitales no existe una


solución única a un problema dado. De hecho el número de posibles soluciones es
infinito. Sin embargo posteriormente se verán procedimientos de minimización que
darán lugar a implementaciones mínimas de menor coste que las formas canónicas SOP
y POS. Cuando se trabaja con minterms también se dice que se trabaja en el espacio de
los unos, mientras que cuando se trabaja con maxterms se dice que se trabaja en el
espacio de los ceros.
Tema 3. Funciones de conmutación 52

3.3 Adyacencias
Definición: Se define adyacencia a un producto de variables de conmutación en el que
no aparecen todas las variables posibles.

La definición anterior es la de una adyacencia en el espacio de los unos. Se podría dar


una definición totalmente análoga para el espacio de los ceros. El resto de este tema se
centrará en el espacio de los unos, siendo todo lo que se vea análogo si se hiciera
mediante uso de maxterms.

Las adyacencias se pueden formar a partir de minterms haciendo uso de la propiedad del
álgebra de Boole A + A = 1 junto a la ley distributiva.

Una propiedad de las adyacencias es que la representación binaria de los minterms que
forman una adyacencia sólo difieren en un bit.

Para minterms de n variables de conmutación, existirán adyacencias desde orden cero


(que son los propios minterms) hasta adyacencias de orden n-1.

Es importante notar que una adyacencia de orden p sólo estará formada por 2
adyacencias de orden p-1. De este modo una adyacencia siempre estará formada por un
número de minterms potencia de 2 (2 minterms, 4 minterms, 8 minterms, etc.).

Ejemplo 3.9: Sean los minterms de 4 variables m4, m7 y m12.

a) Determinar cuales de ellos pueden formar una adyacencia y de qué tipo.


b) Obtener de forma algebraica la expresión matemática de la adyacencia.
c) Representar la adyacencia vectorialmente.

Solución:
a) Para determinar si los minterms pueden formar una adyacencia, los
representaremos en forma vectorial: m4 = 0100, m7 = 0111, m12 = 1100.

Como vemos los únicos minterms que difieren en un bit y que por tanto pueden formar
una adyacencia son m4 y m12.

b) a4,12 = Σm (4,12) = x y z u + x y z u = ( x + x ) ⋅ y z u = y z u

Esta adyacencia se trata de una adyacencia de primer orden.

c) a4,12 = Σm (4,12) = 0100 + 1100 = −100

A la indeterminación – se la denomina coordenada vacua y debe interpretarse como un


“comodín” para indicar que esa variable tomará valores de cero y uno.

Ejemplo 3.10: Sean los minterms de 4 variables {a b c d , a b c d , a b c d , a b c d } .


a) Determinar cuales de ellos pueden formar una adyacencia y de qué tipo.
b) Representar la adyacencia vectorialmente.
c) Obtener de forma algebraica la expresión matemática de la adyacencia.
Tema 3. Funciones de conmutación 53

Solución:
a) Minterms en forma vectorial:

m4 = 0100, m5 = 0101, m12 = 1100, m13 = 1101

Vemos los minterms 4 y 5 pueden formar una adyacencia de primer orden. Por otro
lado los minterms 12 y 13 también pueden formar otra adyacencia también de primer
orden. Si representamos vectorialmente ambas adyacencias se tiene:

a4,5 = 010–, a12,13 = 110–

b) Si observamos la representación vectorial de ambas adyacencias, éstas difieren en


un único bit, por lo que decimos que las dos adyacencias de primer orden anteriores
forman una adyacencia de segundo orden cuya representación vectorial es a4,5,12,13 = –
10–.

El apartado anterior podría haber sido resuelto mediante las adyacencias de primer
orden a4,12 y a5,13. No obstante en dicho caso se hubiera llegado (aunque por otro
camino) a la misma adyacencia de segundo orden a4,5,12,13.

c) Dado que la representación vectorial es -10-, sabemos de antemano que la forma


algebraica será bc . En efecto:
a4,5,12,13 = Σm (4,5,12,13) = a b c d + a b c d + a b c d + a b c d = a b c ( d + d ) + a b c ( d + d ) =
= a b c + a b c = (a + a) b c = b c

Ejemplo 3.11: Sean los minterms de 4 variables 4, 5, 6, 7, 12, 13, 14 y 15.

a) Determinar cuales de ellos pueden formar una adyacencia y de qué tipo.


b) Representar la adyacencia vectorialmente.

Solución:
a) Minterms en forma vectorial:

m4 = 0100, m5 = 0101, m6 = 0110, m7 = 0111,


m12 = 1100, m13 = 1101, m14 = 1110, m15 = 1111

Para determinar las posibles adyacencias en este caso conviene hacerlo de una manera
gráfica mediante los denominados mapas de Karnaugh. Se verán más adelante los
mapas de Karnaugh, por el momento ser mostrará la disposición de las casillas de un
mapa de Karnaugh de 4 variables:

En dicha tabla cada celda puede formar una adyacencia con su inmediatamente
adyacente (de ahí el nombre de adyacencia), teniendo en cuenta que las filas 1 y 4 son
adyacentes así como las columnas 1 y 4 (tiene forma toroidal).
Tema 3. Funciones de conmutación 54

Observando esta tabla se tiene que es posible formar una adyacencia tercer orden a
partir de 2 adyacencias de segundo orden. No obstante no existe una única forma para
conseguir esta adyacencia de tercer orden a partir de 2 de segundo orden, sino que son
tres las formas de construirla:

De manera genérica la adyacencia de tercer orden se puede representar como la suma


de sus minterms en formato numérico: ∑ m(4, 5, 6, 7, 12, 13, 14, 15).

b) La representación vectorial sería por ejemplo la formada por las dos siguientes
adyacencias de segundo orden:

∑ m(4, 5, 6, 7) = 0 1 – –
∑ m(12, 13, 14, 15) = 1 1 – –

de donde ∑ m(4, 5, 6, 7, 12, 13, 14, 15) = – 1 – –

Si en la representación vectorial –1– – sustituimos las coordenadas vacuas por todas


las posibles combinaciones de 0’s y 1’s se obtienen las representaciones binarias de
todos los minterms que forman la adyacencia.

3.4 Funciones incompletamente especificadas


Definición: Se dice que una función está incompletamente especificada cuando no se
especifica la salida de la función para una o varias combinaciones de las entradas. A las
salidas no especificadas se las denomina indiferencias.

Ejemplo 3.12: Sea la función de conmutación especificada en la tabla verdad de la


siguiente figura:
xyzu f xyzu f
0000 – 1000 1
0001 0 1001 0
0010 1 1010 0
0011 1 1011 0
0100 1 1100 1
0101 0 1101 –
0110 0 1110 1
0111 1 1111 –

a) Expresar dicha función de conmutación en formato numérico como suma de


minterms.
b) Expresar dicha función de conmutación en formato numérico como producto de
maxterms.
c) Determinar cuantas posibles funciones de conmutación pueden implementar la TV
anterior.
Tema 3. Funciones de conmutación 55

Solución:

a) Suma de minterms: f = ∑ m(2, 3, 4, 7, 8, 12, 14) + d(0, 13, 15)

b) Producto de maxterms: f = ∏ M(1, 5, 6, 9, 10, 11, 13, 15) · d(0, 13, 15)

c) Como existen 3 indiferencias, las posibles TV y por consiguiente funciones de


conmutación que pueden concretarse mediante la sustitución de cada indiferencia por
0’s y 1’s es de 23 = 8.

En un próximo apartado se verá como decidir el valor de las indiferencias para construir
el circuito más económico de todos los posibles.

3.5 Mapas de Karnaugh


Los mapas de Karnaugh (MK) son un medio de representación y minimización de
funciones de conmutación de forma gráfica.

La ventaja de este método es su facilidad de uso, aunque como desventaja decir que es
poco sistemático y su uso es sencillo hasta 6 variables como máximo, aunque en este
tema se restringirá su uso para funciones de conmutación de hasta 5 variables.

Algunas características de los MK son las siguientes:

- Cada celda de un MK tiene un índice numérico asociado.


- Dicho índice expresado en binario difiere en sólo bit entre celdas adyacentes (en
decimal la diferencia entre índices de dos celdas adyacentes será por tanto una
potencia de 2).
- La numeración de las celdas se hace mediante una codificación Gray.
- Un MK de n variables estará formado por 2n celdas (el producto cartesiano de las n
variables).
- Los MK se representan en 2 dimensiones, aunque son cíclicos respecto a sus bordes
(y a partir de 5 variables presentan una ciclicidad más compleja).

Existen dos posibilidades de representación de funciones de conmutación:

- En el espacio de los unos, es decir mediante el uso de minterms. En este caso se


escribe un 1 en cada celda asociada al minterm y el resto se dejan vacías.

- En el espacio de los ceros, es decir mediante el uso de maxterms. En este caso se


escribe un 0 en cada celda asociada al maxterm y el resto se dejan vacías.

Ejemplo 3.13: Representar mediante mapas de Karnaugh las siguientes funciones de


conmutación:

a) f ( x, y ) = xy + xy
b) f ( x, y , z ) = x y z + x y z + x y z
c) f ( a, b, c, d ) = Σm(2,3, 4, 6,8,12,14) + d (0,13,15)
d) f ( a, b, c, d , e) = Σm(2, 4, 6,18, 25,30) + d (0,8,16)
Tema 3. Funciones de conmutación 56

Solución:

a) Expresamos la función de conmutación f(x, y) en forma vectorial sustituyendo las


variables complementadas por 0 y las variables sin complementar por 1:

minterm binario decimal


xy 01 1
xy 10 2

El MK (de 2 variables) que representa a la función anterior será:


y
0 1
x

0 1
0 1

1 1
2 3

b) Expresamos la función de conmutación f(x, y, z) en forma vectorial:

minterm binario decimal


xyz 111 7
xyz 101 5
xyz 000 0

El MK (de 3 variables) que representa a la función anterior será:

yz
00 01 11 10
x

0 1
0 1 3 2

1 1 1
4 5 7 6

c) El MK (de 4 variables) que representa a la función de conmutación será:

cd
00 01 11 10
ab

00 1 1
0 1 3 2

01 1 1
4 5 7 6

11 1 1
12 13 15 14

10 1
8 9 11 10

d) El MK (de 5 variables) que representa a la función de conmutación será:


Tema 3. Funciones de conmutación 57

cde
000 001 011 010 110 111 101 100
ab

00 1 1 1
0 1 3 2 6 7 5 4

01
8 9 11 10 14 15 13 12

11 1 1
24 25 27 26 30 31 29 28

10 1
16 17 19 18 22 23 21 20

El proceso de minimización (también llamado simplificación) como suma de minterms


es el siguiente:

a) Consideraciones sobre adyacencias:

- Sólo se consideran celdas adyacentes en sentido horizontal y vertical (no


oblicuamente)
- Una adyacencia de orden cero (minterm) esta formada por una única celda.
- Una adyacencia de orden uno esta formada por 2 celdas adyacentes.
- Una adyacencia de orden dos esta formada por 4 celdas adyacentes
- Una adyacencia de orden tres esta formada por 8 celdas adyacentes, etc.
- Las filas y las columnas de los bordes son adyacentes

b) Pasos para la simplificación:

- Representamos la función de conmutación en el MK junto a las indiferencias si


existen.
- Hay que intentar agrupar los unos en adyacencias de mayor orden posible
- No se deben anidar adyacencias
- Las indiferencias se usarán sólo si proporcionan adyacencias de mayor orden
- Las adyacencias que sólo contienen indiferencias no servirán
- Construir la función como suma de adyacencias

Ejemplo 3.14: Minimizar las siguientes funciones de conmutación:

a) f(a, b, c, d) = ∑ m(3, 5, 6, 7, 9, 13) b) f(a, b, c, d) = ∏ M(3, 5, 6, 7, 9, 13)

Solución:
a) En primer lugar se representa la función de conmutación en un MK de 4 variables:

cd
00 01 11 10
ab

00 1
0 1 3 2

01 1 1 1
4 5 7 6

11 1
12 13 15 14

10 1
8 9 11 10
Tema 3. Funciones de conmutación 58

En segundo lugar se identifican las adyacencias esenciales, es decir aquellas que son
las únicas que pueden contener a un determinado 1. En este caso resultan las tres
siguientes adyacencias esenciales:

cd
00 01 11 10
ab

00 1
0 1 3 2

01 1 1 1
4 5 7 6

11 1
12 13 15 14

10 1
8 9 11 10

Por último se completan los unos restantes mediante adyacencias no esenciales


resultando el MK siguiente (a estas adyacencias conviene darles un nombre para mejor
identificación):
B
cd
00 01 11 10
ab

00 1
0 1 3 2

01 1 1 1 C
4 5 7 6

11 1
12 13 15 14

10 1
8 9 11 10

D
A
Una vez encontradas las adyacencias el paso siguiente es expresar las adyacencias en
formato algebraico. Para ello en primer lugar las expresamos en formato vectorial tras
lo cual sustituimos los 1’s por variables en forma normal y los 0’s por variables
complementadas como puede verse en la siguiente tabla:

abcd abcd
1001
A 1–01 acd
1101
0111
B 0–11 acd
0011
0111
C 011– abc
0110
0101
D 01–1 abd
0111

Finalmente la función de conmutación minimizada es la suma de cada una de las


adyacencias:
Tema 3. Funciones de conmutación 59

f ( a, b, c, d ) = A + B + C + D = acd + acd + abc + abd

b) En este caso toda la primera parte del proceso de minimización es igual que en el
apartado anterior resultando el MK siguiente:

B
cd
00 01 11 10
ab

00 0
0 1 3 2

01 0 0 0 C
4 5 7 6

11 0
12 13 15 14

10 0
8 9 11 10

D
A
Tras lo cual las adyacencias serían los siguientes:

abcd abcd
1001
A 1–01 a +c+d
1101
0111
B 0–11 a+c +d
0011
0111
C 011– a+b +c
0110
0101
D 01–1 a+b +d
0111

Con lo que la función de conmutación expresada en forma producto de adyacencias


sería la siguiente:

f ( a , b, c , d ) = A ⋅ B ⋅ C ⋅ D = ( a + c + d ) ⋅ ( a + c + d ) ⋅ ( a + b + c ) ⋅ ( a + b + d )

3.6 Minimización multifuncional


Hasta ahora se ha visto un procedimiento de minimización de una única función de
conmutación de n variables lo cual se traducirá físicamente en un circuito de n entradas
y 1 salida. Sin embargo los sistemas digitales normalmente poseen varias salidas para
una misma combinación de entradas.

Una primera solución a este problema es tratar por separado cada una de las salidas
minimizándolas como si se trataran de funciones independientes. Esta solución es
aceptable y da lugar a buenas soluciones la mayoría de las veces, aunque en otras
ocasiones una visión conjunta del problema puede hacer que se compartan puertas
lógicas entre los circuitos de cada una de las salidas, dando lugar a una reducción global
del circuito, a pesar de que, individualmente cada uno de los circuitos por separado no
sean implementaciones mínimas. Para llevar a cabo este procedimiento de minimización
Tema 3. Funciones de conmutación 60

conjunta no existe un procedimiento estándar mediante mapas de Karnaugh, pero


básicamente se busca la elección preferente de adyacencias que sean comunes a las
distintas funciones de conmutación tras lo cual se comprueba que el resultado es más
económico que la suma de minimizaciones individuales.

Ejemplo 3.15: Minimizar por separado y de manera conjunta las funciones de


conmutación f y g. Comparar los costes de los circuitos obtenidos con ambos
procedimientos:

f(a, b, c, d) = ∑ m (1, 3, 5, 7, 10, 11, 14, 15)


g(a, b, c, d) = ∑ m (1, 5, 10, 12, 13, 14, 15)

- Minimizando por separado cada función se tiene:


ad acd
cd cd
00 01 11 10 00 01 11 10
ab ab

00 1 1 00 1
0 1 3 2 0 1 3 2

01 1 1 01 1
4 5 7 6
ab
4 5 7 6

11 1 1 11 1 1 1 1
12 13 15 14 12 13 15 14
ac
10 1 1 10 1 acd
8 9 11 10 8 9 11 10

f = a d +ac g = a c d + ab + acd

- Minimizando de manera conjunta:


acd acd
cd cd
00 01 11 10 00 01 11 10
ab ab

00 1 1 00 1
0 1 3 2 0 1 3 2

01 1
01 1 1 cd ab
4 5 7 6 4 5 7 6

11 1 1 11 1 1 1 1
12 13 15 14 12 13 15 14

10 1 1 acd 10 1 acd
8 9 11 10 8 9 11 10

f = a c d +cd + acd g = a c d + ab + acd

Si comparamos los costes en totales de cada una de las dos implementaciones:


Tema 3. Funciones de conmutación 61

Implementación f g f/g Total


2 AND(3)
2 AND(2)
Por separado 1 AND(2) 7 (2,43)
1 OR (2)
1 OR(3)
1 AND(2) 1 AND(2)
En conjunto 2 AND(3) 6 (2,67)
1 OR(3) 1 OR(3)

Por tanto la solución de minimización conjunta precisa de una puerta menos, siendo de
este modo la más económica, aunque el número de conexiones medio por puerta sea
mayor que la otra opción.

Los circuitos minimizados serían finalmente los siguientes:

a b c d a b c d

f
f

g
g

Implementación por separado Implementación conjunta


Tema 4. Minimización 62

Tema 4
Minimización
Minimización................................................................................................................. 62
4.1 Realizaciones mínimas ......................................................................................... 62
4.2 Adyacencias de una función ................................................................................. 64
4.2.1 Método de Quine-McCluskey ................................................................ 64
4.3 Implicantes primos ............................................................................................... 66
4.3.1 Tabla de implicantes............................................................................... 67
4.3.2 Tabla de implicantes reducida ................................................................ 68
4.3.3 Tablas cíclicas y método de Petrick ....................................................... 69
4.4 Síntesis NAND-NOR ........................................................................................... 70
4.4.1 Circuitos con dos niveles........................................................................ 70
4.4.2 Circuitos con más de dos niveles............................................................ 71
4.5 Riesgos en circuitos combinacionales .................................................................. 72
4.5.1 Riesgos lógicos ....................................................................................... 74
4.5.2 Riesgos funcionales ................................................................................ 75

El método de minimización mediante el mapa de Karnaugh es un método cómodo pero


tiene el inconveniente de que no se trata de un procedimiento sistemático y totalmente
objetivo, sobre todo cuando se tratan funciones de conmutación de más de cuatro
variables.

Existe un procedimiento que aunque es arduo de seguir a mano, tiene la ventaja de que
es sistemático y fácilmente programable en una computadora. Se trata del método de
Quine-McCluskey (Q-M en adelante).

El método es apropiado para obtener la realización mínima de circuitos de dos niveles


de puertas. Vamos a estudiarlo para obtener la función minimizada como una suma de
productos (SOP), aunque es fácilmente extrapolable a un producto de sumas (POS).

Existen muchos más métodos de minimización aparte de los del mapa de Karnaugh y de
Q-M que no se van a estudiar aquí, sobre todo métodos computacionales (también
llamados heurísticos) que hacen uso de la capacidad computacional del ordenador.

4.1 Realizaciones mínimas


El objetivo de la minimización es el de sintetizar un circuito de la forma más económica
posible dando lugar a lo que se conoce como realización mínima.

Los factores a tener en cuenta para evaluar la “bondad” un circuito de conmutación son
principalmente dos:

- La velocidad de respuesta
- El coste de las puertas
Tema 4. Minimización 63

La velocidad de respuesta de un circuito de conmutación es menor cuanto mayor


número de niveles de puertas haya, debido al incremento del retardo de propagación de
la señal entre dichos niveles. Desde el punto de vista de la velocidad de respuesta se
tiene por tanto que el mejor circuito es aquél que menos niveles de puertas tenga.

No obstante no siempre es recomendable el uso de circuitos con dos niveles de puertas


ya que el hecho de que una dimensión sea mucho mayor que la otra hace difícil la
disposición del circuito en una superficie dada. Los circuitos con más de dos niveles de
puertas son más fáciles de ubicar en las pastillas de circuitos integrados (chips).

En cuanto al factor coste se tiene que independientemente de si construimos el circuito


con dos o más niveles se sabe que el número de puertas a utilizar va a ser siempre
aproximadamente el mismo, por lo que el coste no va a suponer un criterio para
decantarnos por circuitos de dos o de más de dos niveles.

Por otro lado los procedimientos de simplificación para obtener circuitos con más de
dos niveles de puertas son bastante complejos por lo que nos vamos a concentrar en el
diseño de circuitos de dos niveles de puertas.
Una vez centrados en el diseño de circuitos de dos niveles de puertas volvemos a ver
cual sería la realización mínima de un circuito teniendo en cuenta los dos factores
anteriores: velocidad de respuesta y coste

Velocidad de respuesta: dado que sólo existen dos niveles de puertas en todas nuestras
soluciones el retardo va a ser el mismo en todas ellas, por lo que la velocidad de
respuesta dejará de ser un factor a tener en cuenta en los procedimientos de
minimización.

Coste de implementación: el coste viene determinado por el número de puertas y el


número de entradas a dichas puertas. Este será el criterio a usar para determinar la
realización mínima de una función de conmutación.

El coste de las puertas básicas (AND, OR y NOT) es muy similar o idéntico. Por otro
lado las entradas a las puertas suelen estar en forma normal y complementada por lo que
no hay que incluir en el cálculo del coste de un circuito el coste de complementar las
entradas.

Lo que si hay que tener en cuenta son:

• El coste de la realización de las conexiones en las entradas


• El coste de las conexiones entre las puertas del primer nivel y la de salida

La norma genérica entonces para determinar cual es el menor coste de dos circuitos que
implementen la misma función de conmutación con dos niveles de puertas es (en orden
de importancia):

1º ) El que tenga menor número de puertas


2º ) A igual número de puertas el que necesite menos conexiones
Tema 4. Minimización 64

4.2 Adyacencias de una función


El método de Quine-McCluskey (Q-M) o método tabular consiste en obtener de manera
sistemática adyacencias en orden creciente hasta llegar a las de mayor orden posible, las
cuales llamaremos implicantes primos. Veamos un ejemplo para explicar el
procedimiento: sea la siguiente función de conmutación de 4 variables:

F (x, y, z, u, v) = Σ m (0,2,3,5,7,8,10,11,13,15,22,29,30)

4.2.1 Método de Quine-McCluskey


Para realizar este procedimiento habría que seguir los siguientes pasos (explicados para
la función del ejemplo).

Primer paso: representar los minterms en su forma binaria y especificar su índice


(número de unos):
Minterm (DEC) Minterm (BIN) INDICE
0 00000 0
2 00010 1
3 00011 2
5 00101 2
7 00111 3
8 01000 1
10 01010 2
11 01011 3
13 01101 3
15 01111 4
22 10110 3
29 11101 4
30 11110 4

Segundo paso: agrupar los minterms según el número de unos que contengan (su
índice):
Índice Minterms
0 0 9
1 2 9
8 9
2 3 9
5 9
10 9
3 7 9
11 9
13 9
22 9
4 15 9
29 9
30 9

Tercer paso: para obtener las adyacencias de primer orden hay que realizar los
siguientes pasos y reglas:
Tema 4. Minimización 65

1º ) Comparar cada minterm con sus adyacentes (es decir los de índice
inmediatamente superior)
2º ) Un minterm sólo puede ser adyacente con otro del siguiente grupo siempre
que tenga un valor decimal mayor
3º ) Un minterm sólo puede ser adyacente con otro siempre que su diferencia sea
una potencia de 2.
4º ) Escribimos según esto otra tabla donde además de las parejas de minterms que
forman adyacencias de primer orden, aparezca entre paréntesis la diferencia
entre sus valores decimales. Esta diferencia dará la posición de la coordenada
vacua –. Los dos minterms los escribiremos ordenados (a la izquierda el
menor).
5º ) Los minterms que vayamos usando para obtener adyacencias los marcaremos
en la tabla anterior para saber que han sido cubiertos

Adyacencias primer orden Valor en binario


0-2 (2) 000-0 9
0-8 (8) 0-000 9
2-3 (1) 0001- 9
2-10 (8) 0-010 9
8-10 (2) 010-0 9
3-7 (4) 00-11 9
3-11 (8) 0-011 9
5-7 (2) 001-1 9
5-13 (8) 0-101 9
10-11 (1) 0101- 9
7-15 (8) 0-111 9
11-15 (4) 01-11 9
13-15 (2) 011-1 9
13-29 (16) 011-1
22-30 (8) 1-110

Cuarto paso: hay que seguir los siguientes pasos y reglas:

1º ) Comparamos las adyacencias de un grupo con las de su siguiente


2º ) Para que dos adyacencias de primer orden formen una de segundo orden es
necesario que la posición de su coordenada vacua (que hemos escrito entre
paréntesis) esté en la misma posición.
3º ) Una adyacencia de primer orden A1=(m11-m12) sólo puede ser adyacente con
otra del siguiente grupo A2=(m21-m22) si su primer minterm m11 es menor que
el primer minterm m21 de A2.
4º ) Dos adyacencias de primer orden A1=(m11-m12) y A2=(m21-m22) sólo podrán
formar una de segundo orden si m21-m11 es una potencia de 2.
5º ) Escribimos según esto otra tabla donde además de las parejas de adyacencias
de primer orden que forman adyacencias de segundo orden, aparezcan entre
paréntesis y separados por coma la diferencia anterior y nueva entre los
valores decimales de los minterms iniciales. Estas diferencias darán la
posición de las dos coordenadas vacuas –. Los cuatro minterms los
escribiremos ordenados (a la izquierda el menor).
Tema 4. Minimización 66

6º ) Podremos formar una adyacencia de segundo orden a través de dos parejas


diferentes de adyacencias de primer orden aunque sólo las escribiremos una
vez
7º ) Los adyacencias que vayamos usando para obtener adyacencias mayores las
marcaremos en la tabla anterior para saber que han sido cubiertas

Adyacencias segundo orden Valor en binario


0-2-8-10 (2,8) 0-0-0
2-3-10-11 (1,8) 0-01-
3-7-11-15 (4,8) 0--11
5-7-13-15 (2,8) 0-1-1

Quinto paso: seguiríamos con las adyacencias de tercer orden y superior con el mismo
procedimiento anterior hasta que ya no se obtengan más adyacencias.

Sexto paso: nombramos las adyacencias no cubiertas empezando por las del final
(mayor orden) hacia las del principio (menor orden)

De este modo obtendríamos finalmente la siguiente lista de adyacencias:

Orden Adyacencia
2 5-7-13-15 a
2 3-7-11-15 b
2 2-3-10-11 c
2 0-2-8-10 d
1 22-30 e
1 13-29 f

4.3 Implicantes primos


Definición: Dadas dos funciones f y g de las mismas variables se dice que f incluye a g (
se representa como f > g ) si para cualquier carácter del alfabeto de entrada cuando g sea
uno, f también sea uno.

Es decir, si la tabla verdad de f tiene al menos todos los “1” de la tabla verdad de g.

Sabemos que una función de conmutación se puede expresar como una suma de
minterms; en caso de que dos minterms formen una adyacencia de primer orden las
expresiones de los dos minterms se transformarían un una única expresión (de una
variable menos). Así seguiríamos sucesivamente hasta llegar a las adyacencias de mayor
orden posible.

Todas estas expresiones (minterms, adyacencias de 1er orden adyacencias de 2º orden,


etc.) se llaman implicantes ya que el que una de ellas valga uno, implica que la función
de conmutación valga también uno (independientemente del valor del resto de
términos).

Cuando tenemos una adyacencia (implicante) que ya no puede ser incluida en otra de
orden superior decimos que tenemos un implicante primo.
Tema 4. Minimización 67

La lista de adyacencias obtenida en el apartado anterior está formada por los implicantes
primos de la función de conmutación del ejemplo.

Teorema: Cualquier realización mínima en la forma de suma de productos ha de incluir


sólo implicantes primos. La demostración de este teorema es trivial.

4.3.1 Tabla de implicantes


Según el teorema anterior cualquier realización mínima ha de estar formada sólo por
implicantes primos. Sin embargo cualquier realización que incluya sólo implicantes
primos no quiere decir que sea mínima.

Veremos a partir de la siguiente tabla como eliminar los implicantes primos no


necesarios y quedarnos con los implicantes primos esenciales.

9 9 9 9 9 9 9 9 9 9 9
0 2 3 5 7 8 10 11 13 15 22 29 30
9 a x x x x
b x x x x
c x x x x
9 d x x x x
9 e x x
9 f x x

En las filas colocamos los implicantes primos encontrados y en las columnas los
minterm de la función. En las intersecciones ponemos una “x” en caso de que el
implicante contenga al minterm en cuestión.

En primer lugar obtendremos los implicantes primos esenciales examinando la tabla


por columnas. Aquella columna que tenga una única “x” convertirá al implicante que la
contenga en esencial. En nuestro caso obtenemos los implicantes primos esenciales que
obtenemos son { a, d, e, f }

En segundo lugar, una vez determinados los implicantes primos esenciales marcamos
(9) los minterms cubiertos por ellos así como los implicantes primos esenciales. En
nuestro caso quedan todos los minterms marcados excepto { 3, 11 }

En tercer lugar hay que escoger implicantes primos que cubran los minterms no
cubiertos. Este paso suele ser sencillo y normalmente puede hacerse por simple
inspección. En nuestro caso cualquiera de los dos implicantes b y c cubre los minterms
por cubrir (3 y 11) por lo que dado que ambos son del mismo coste (mismo número de
entradas) elegiremos cualquiera de los dos indistintamente.

Se tiene por tanto que la función de conmutación simplificada puede expresarse del
siguiente modo:

F=a+b+d+e+f ó F=a+c+d+e+f

donde a, b, c, d, e, f son (en funciones de las variables de conmutación x,y,z,u,v:


Tema 4. Minimización 68

x y z u v
a = 0 – 1 – 1 = x’z v
b = 0 - - 1 1 = x’u v
c = 0 – 0 1 - = x’z’u
d = 0 – 0 – 0 = x’z’v’
e = 1 – 1 1 0 = x z u v’
f = - 1 1 0 1 = y z u’v

4.3.2 Tabla de implicantes reducida


En caso de que el tercer paso anterior no se pueda resolver a simple vista hay que
construir una nueva tabla denominada tabla de implicantes reducida.

En ella sólo representaremos los minterms no cubiertos y los implicantes primos no


esenciales.

Por ejemplo supongamos que tenemos la siguiente tabla de implicantes obtenida de la


función de conmutación (se deja como ejercicio el llegar a esta tabla):

F (x, y, z, u, v) = Σ m (0,1,4,7,9,11,12,13,16,20,21,25,27,28,29,31)

9 9 9 9 9 9 9 9 9 9 9 9 9
0 1 4 7 9 11 12 13 16 20 21 25 27 28 29 31
9 a x x x x
9 b x x x x
c x x x x
d x x x x
9 e x x x x
f x x x x
9 g x x x x
h x x
i x x
9 j x

La tabla de implicantes reducida quedaría como sigue:

1 12 13
c x x
d x
f x
h x
i x

El procedimiento para obtener los implicantes primos que cubran los minterms
pendientes es el de ir eliminando filas basándonos en los conceptos de equivalencia y
dominancia.

Definición: Decimos que dos filas de una tabla de implicantes reducida son
equivalentes si cubren los mismos minterms (tienen las mismas marcas).
Tema 4. Minimización 69

Definición: Decimos que una fila de una tabla de implicantes reducida domina a otra si
cubre todos sus minterms y algunos más.

En este último ejemplo las filas h e i son equivalentes ya que ambas cubren únicamente
al mismo minterm (el 1). Si volvemos a la tabla de implicantes de la que proceden
vemos que además ambos implicantes primos son del mismo coste (mismo número de
puertas), por lo que escogeremos cualquiera de ellos.

Por otro lado vemos que el implicante primo d está dominado por el c, por lo que el d
puede descartarse. Igualmente el implicante f está también dominado por el c, por lo que
para cubrir los minterms 12 y 13 utilizamos el implicante primo dominante c.

Las dos posibles combinaciones de implicantes primos no esenciales para cubrir los
minterms no cubiertos 1, 12 y 13 son entonces c + h ó c + i.

4.3.3 Tablas cíclicas y método de Petrick


Normalmente las tablas de implicantes reducidas dan lugar a la solución final sin
ambigüedades mediante la eliminación de filas por dominancia y equivalencia, tal y
como ha ocurrido en el ejemplo último.

No obstante existen ciertos casos en los que se llega a una tabla reducida en la que no
existen implicantes esenciales ni relaciones de dominancia ni equivalencia, dando lugar
a tablas cíclicas como la del ejemplo siguiente:

0 1 4 9 12 13
a x x
b x x
c x x
d x x
e x x
f x x

Para ver la cobertura mínima de minterms en estos casos hay que aplicar el método de
Petrick. Lo que se busca es cubrir todos los minterms con la realización de menor coste
posible. Para cubrir el minterm 0 hay que escoger entre el implicante a o el b. Para el
minterm 1 entre el implicante a O c. Se sigue este razonamiento sucesivamente y se
tiene que la cobertura final (la llamaremos G) debe cumplir:

G = (a OR b)AND(a OR c)AND(b OR d)AND(c OR e)AND(d OR f)AND(e OR f)

Esto expresado algebraicamente como función de conmutación es:

G = (a + b)(a + c)(b + d)(c + e)(d + f)(e + f)

Si se desarrolla dicha función como suma de productos llegamos a:

G = ade + bcf + adcf + abef + bcde


Tema 4. Minimización 70

Para que la función de conmutación valga 1 basta con que lo sea cualquiera de los
productos que la forman. Como lo que queremos es una realización mínima en este
ejemplo podremos escoger entre ade y bcf, ya que con sólo tres implicantes cubrimos
todos los minterms. Una vez hecho esto habría que ver volviendo a la tabla “padre” de
la reducida cual de los dos grupos de implicantes tiene un menor coste escogiéndose la
solución más ventajosa.

4.4 Síntesis NAND-NOR


Hasta ahora las realizaciones en dos niveles que hemos sintetizado estaban formadas
varias puertas AND más una puerta OR a la salida (circuitos AND–OR) o varias OR
más una AND a la salida (circuitos OR–AND).

Por otro lado, se tiene que las puertas NAND (o NOR) constituyen por separado un
conjunto suficiente de operadores, es decir, que todas las funciones de conmutación
podrán expresarse con sólo puertas NAND (o NOR) y complementadores. La ventaja de
esto es que sólo utilizaríamos un mismo tipo de puertas que serían del mismo o menor
coste que las AND y OR.

4.4.1 Circuitos con dos niveles


Teorema: Dado un circuito AND–OR en el que todas las entradas externas actúen sobre
las puertas AND, si cada una de las puertas del circuito se sustituyen por una puerta
NAND del mismo número de entradas, la función realizada por el circuito no cambia.

Demostración:

Teorema: Dado un circuito de dos niveles OR–AND en el que todas las entradas
externas actúen sobre las puertas OR, si cada una de las puertas del circuito se sustituye
por una puerta NOR del mismo número de entradas, la función realizada por el circuito
no cambia.

Demostración:
Tema 4. Minimización 71

4.4.2 Circuitos con más de dos niveles


En primer lugar supongamos un circuito AND–OR donde existen entradas externas a la
puerta de salida. Se puede comprobar que se puede hacer la sustitución NAND si las
entradas externas a la puerta de salida se complementan.

Demostración:

En segundo lugar supongamos circuitos con puertas AND y OR más de dos niveles:

1. En circuitos con niveles alternados de puertas AND–OR se puede pasar a un circuito


con puertas NAND complementando únicamente las entradas a las puertas OR ya
que podemos ir sustituyendo el circuito global por subcircuitos de dos niveles
AND–OR y sustituir al igual que hemos hecho en el punto anterior.

Si el circuito no se puede estructurar en niveles alternados de puertas AND y OR


entonces se descompone el circuito en subcircuitos que puedan estructurarse en niveles
AND–OR. Luego se transforma cada uno de estos circuitos en puertas NAND y a
continuación se ensamblan.
Tema 4. Minimización 72

Quedando por tanto el siguiente circuito:

4.5 Riesgos en circuitos combinacionales


Sea la función de conmutación f(x, y, z) representada en el siguiente mapa de Karnaugh:

yz
00 01 11 10
x

0 1
000 001 011 010

1 1 1 1
100 101 111 110

que corresponde al siguiente circuito:


Tema 4. Minimización 73

x y z P1 P2 P1 + P2 f
101 0 1 0+1=1 1
100 1 0 1+0=1 1

Se observa que el valor que la función de conmutación es 1 para los valores de las
entradas xyz = { 100 y 101 } (celdas 100 y 101). Por tanto si las entradas varían desde
por ejemplo xyz=101 a xyz=100 no deberíamos ver cambio en la salida de la función de
conmutación. Sin embargo un estudio detallado del comportamiento del circuito nos
demostrará que en esa transición la función de conmutación realiza una breve excursión
al 0. Estas excursiones no deseadas reciben el nombre de riesgos. Si analizamos por
separado el valor en los puntos P1=y’z’ y P2=xz para las entradas 100 y 101 vemos que:

- xyz=101 → f(xyz) = f(101) = 1 ( ya que P1(101)=0 y P2(101)=1 → f = 0 + 1 = 1)


- xyz=100 → f(xyz) = f(100) = 1 ( ya que P1(100)=1 y P2(100)=0 → f = 1 + 0 = 1)

Por tanto aunque la salida siempre debería valer finalmente 1, tanto la salida de la puerta
AND1 como la puerta AND2 varían de 0 → 1 y de 1 → 0 respectivamente en la
transición:

- AND1: 0 → 1
- AND2: 1 → 0

El problema es que la puerta AND2 obtiene el valor 0 en su salida (P2) antes de que la
puerta AND1 obtenga el 1 en su salida (P1) debido a que la señal de entrada que varía (la
entrada z) se aplica por un lado directamente a la puerta AND2 mientras que por otro
antes de aplicarse a la puerta AND1 dicha señal debe pasar por un inversor previo, por lo
que se introduce un pequeño retardo adicional en este camino. Esto provocará que en un
pequeño periodo de tiempo P1 y P2 valgan 0, por lo que la función de conmutación en
ese breve periodo de tiempo valdrá también 0. Todo ello ha sido debido como puede
verse a que la señal z ha viajado por dos caminos diferentes con retardos desiguales.
Este comportamiento no deseado puede verse en el siguiente cronograma general de las
entradas, valores intermedios y salida, donde además pueden observarse los retardos en
la transmisión de la señal al atravesar las puertas AND.

1 1
x x
0 0

1 1
y y
0 0

1 1
y' y'
0 0

1 1
z z
0 0

1 1
z' z'
0 0

1 1
P2 P2
0 0

1 1
P1 P1
0 0

1 1
f f
0 0
Tema 4. Minimización 74

Definición: Se dice que en un circuito hay un riesgo estático si en una transición en la


que la salida deba permanecer al valor v, momentáneamente toma el valor v’.

→ Si v = 1 decimos que tenemos un riesgo estático a los unos.


→ Si v = 0 decimos que tenemos un riesgo estático a los ceros.

Por ejemplo en f(x,y,z) = (x + z’)(y’ + z) existe un riesgo estático a los ceros en la


transición 010 → 011 (se deja como ejercicio para el alumno el comprobarlo).

Existe otro tipo de riesgo donde la función de conmutación tiene que cambiar de valor,
pero en el cambio vuelve momentáneamente a su valor anterior. A estos riesgos se les
conoce como riesgos dinámicos.

• Para pasar de 0 → 1 la señal haría el recorrido 0 → 1 → 0 → 1


• Para pasar de 1 → 0 la señal haría el recorrido 1 → 0 → 1 → 0

1 1

x x

0 0

1 1

y y

0 0

Se verá en el siguiente apartado porqué se producen los riesgos dinámicos.

4.5.1 Riesgos lógicos


Definición: Se llama riesgo lógico a un riesgo (estático o dinámico) que ocurre en una
transición de las entradas en la que sólo cambia una de ellas.

Los riesgos lógicos son debidos al retardo en la propagación de la señal en un circuito


dado. Es el caso del circuito anterior donde la señal de entrada z viajaba por dos
caminos diferentes con diferente retardo se daba lugar al riesgo visto anteriormente en
donde z y z’ tomaban por un breve periodo de tiempo el mismo valor en diferentes
puntos del circuito.

Volviendo de nuevo al caso anterior en más detalle se ve que el riesgo se produce


porque el 1 de la función de conmutación lo proporcionan diferentes productos (o bien
P1 o bien P2) para cada combinación de las entradas. Es claro que si el 1 lo diera
siempre un mismo producto no habría riesgos pues no se daría pié a la posibilidad de
transición al 0.
Tema 4. Minimización 75

Se puede demostrar que los riesgos dinámicos son consecuencia de los riesgos estáticos
internos al circuito por lo que si se eliminan los riesgos estáticos habremos eliminado
también los riesgos dinámicos del circuito. Para solucionar esto, se tiene un
procedimiento inmediato consistente en incluir todos los implicantes primos (tanto los
esenciales como los no esenciales) en la realización de la función de conmutación. Para
ello no realizaríamos la última etapa de elección de implicantes primos esenciales del
método de Quine-McCluskey. En el ejemplo de la función anterior f(x, y,
z)=∑m(0,4,5,7) si simplificamos con el método de Q-M (se deja como ejercicio para el
alumno) se llega a que la función quedaría como suma de los siguientes implicantes
primos:

f(x, y, z) = xz + /y/z + x/y

Se puede demostrar también que esta función es equivalente a su forma reducida:

f(x, y, z) = xz + /y/z

De este modo el circuito resultante incluiría una puerta más y una entrada más en la
puerta OR de salida, pero estaría libre de riesgos ya que la puerta P3 proporciona
siempre un 1 a la entrada de la puerta OR de salida

x y z: 101  100
Se deja para el alumno la construcción del cronograma de este circuito y la
comprobación con él de que ya no se produce la excursión al 0 en la transición 101 →
100.

4.5.2 Riesgos funcionales


Definición: Se llama riesgo funcional a un riesgo (estático o dinámico) que ocurre en
una transición de las entradas en la que cambia más de una entrada. Sea por ejemplo la
siguiente función de conmutación representada en el siguiente mapa de Karnaugh:

zu
xy
00 01 11 10

00 1

01 1 1

11 1

10 1 1

Riesgo estático a los unos


Tema 4. Minimización 76

En la transición 0000 → 0101 se produce un cambio en dos variables, y dado que es


imposible el cambio simultáneo en esas dos variables, se alcanzará la casilla 0101 a
través de uno de los dos siguientes posibles caminos:

0000 → 0001 → 0101


0000 → 0100 → 0101

En ambos casos la función adquiere momentáneamente el valor 0, por lo que se trata de


un riesgo estático a los unos. Por otro lado si la transición fuera desde 0001 → 0100:

zu
xy
00 01 11 10

00 1

01 1 1

11 1

10 1 1

Riesgo estático a los ceros

la función adquiriría momentáneamente el valor de 1 en cualquiera de los dos posibles


caminos, por lo que existiría en dicha transición un riesgo estático a los ceros. Por
último lugar en la transición 0101 → 1110:

zu
xy
00 01 11 10

00 1

01 1 1

11 1

10 1 1

Riesgo dinámico

se produce un riesgo dinámico en cualquiera de los dos posibles caminos que la función
siga entre ambas combinaciones de entradas:

x y z u: 0101 → 0111 → 0110 → 1110


f(x, y, z, u): 1 → 0 → 1 → 0

x y z u: 0101 → 1101 → 1111 → 1110


f(x, y, z, u): 1 → 0 → 1 → 0

Los riesgos funcionales no dependen de la forma de realización ni del circuito en


concreto y son por tanto inevitables. La única posible solución es evitar que las entradas
varíen simultáneamente en más de una variable.
Tema 4. Minimización 77

De todos modos lo normal es que pulsos erróneos sean de muy corta duración (espurios)
y su duración dependa de los parámetros del circuito, tipos de puertas utilizadas, etc…

Como hemos visto los riesgos sólo aparecen en las transiciones por lo que en las
respuestas estacionarias (de larga duración en el tiempo) no tienen efecto. Este es el
caso de los circuitos combinacionales en donde lo que nos interesa son las respuestas
estacionarias por lo que los riesgos no suelen afectar demasiado a los circuitos
combinacionales.
Tema 5. Circuitos combinacionales 78

Tema 5
Circuitos combinacionales
Circuitos combinacionales ........................................................................................... 78
5.1 Puertas combinacionales........................................................................................ 78
5.1.1 Niveles de integración ................................................................................. 79
5.2 Circuitos aritméticos.............................................................................................. 80
5.2.1 Sumadores ................................................................................................... 80
5.2.2 Sumador BCD.............................................................................................. 83
5.2.3 Restadores ................................................................................................... 86
5.2.4 Comparadores ............................................................................................. 89
5.3 Codificadores......................................................................................................... 91
5.3.1 Conversores de código ................................................................................ 94
5.3.2 Generación y comprobación de la paridad................................................. 94
5.4 Decodificadores ..................................................................................................... 95
5.5 Demultiplexores..................................................................................................... 99
5.6 Multiplexores....................................................................................................... 102
5.6.1 Los MUX como módulos lógicos universales............................................ 106
5.6.2 El MUX como selector de datos ................................................................ 106
5.7 Acceso a buses..................................................................................................... 107
5.8 Memorias ROM ................................................................................................... 108
5.8.1 ROM programables ................................................................................... 111
5.8.2 La ROM como módulo lógico universal.................................................... 111
5.9 PLA y PAL .......................................................................................................... 112
5.10 Resumen ............................................................................................................ 114

En este tema vamos a ver los siguientes tipos de circuitos combinacionales:


- Circuitos integrados con sólo puertas combinacionales individualizadas
- Circuitos aritméticos (sumadores, restadores, comparadores,…)
- Circuitos para la codificación y decodificación de la información
- Circuitos programables (memorias ROM, PAL y PLA)

5.1 Puertas combinacionales


Existen disponibles comercialmente circuitos integrados (o chips) formados por
diversas combinaciones de puertas de modo que a la hora de construir sistemas digitales
utilizando puertas combinacionales individuales se recurre a estas pastillas. Existen
varios tipos de posibles combinaciones de CI estándar que están formados por:

- Seis inversores
- Cuatro puertas ( AND, OR, NAND, NOR, EXOR ) de dos entradas
- Tres puertas de tres entradas
- Dos puertas de cuatro entradas
- Una puerta de 8 entradas
- Una puerta de 13 entradas
- Dos combinaciones AND-OR de 4 entradas, etc...
Tema 5. Circuitos combinacionales 79

La limitación en cuanto al número de puertas a incluir en el CI viene por el número de


entradas y salidas que haya que incluir en la pastilla no por el hecho de que en el silicio
no quepan más transistores (componente base para fabricación de las puertas básicas).

Sea como ejemplo el siguiente circuito integrado formado por 4 puertas OR:

- 12 terminales (8 de entrada y 4 de salida)


- 1 entrada de alimentación
- 1 entrada de tierra

La forma de encapsulado más frecuente es el encapsulado dual-in-line que permite la


cómoda inserción del las pastillas en las placas:

Los materiales de construcción suelen ser el plástico y la cerámica, siendo el primero


más barato y el segundo más fiable soportando mayores temperaturas. Otro tipo de
encapsulado es el plano en el cual las patas del circuito están en el mismo plano de la
pastilla.

5.1.1 Niveles de integración


Según el número de puertas incluidas en una pastilla de un CI tenemos los siguientes
niveles de integración:

a) SSI (Small Scale Integration): NP < 10


b) MSI (Medium Scale Integration): 10 < NP < 100
c) LSI (Large Scale Integration): 100 < NP < 10.000
d) VLSI (Very Large Scale Integration): NP > 10.000
Tema 5. Circuitos combinacionales 80

En este tema vamos a tratar al principio CI de tipo SSI y MSI. Las memorias ROM,
RAM las PLA y los microprocesadores pertenecen al nivel VLSI.

5.2 Circuitos aritméticos


Sabemos que la única operación aritmética imprescindible es la suma ya que todas las
demás pueden llegar a implementarse mediante sumas y una codificación de la
información adecuada. No obstante el realizar todas las operaciones a través de circuitos
sumadores ralentiza la velocidad de respuesta del circuito, por lo que si lo que se quiere
es incrementar ésta es imprescindible realizar por hardware la mayor cantidad de
operaciones posible. Vamos a ver en este apartado circuitos:

- Sumadores
- Restadores
- Comparadores

5.2.1 Sumadores
Intentaremos sintetizar la función de conmutación y el circuito correspondiente de la
suma de dos números binarios positivos. Para ello fijémonos en el siguiente ejemplo:

1 1 1 1 1
0 0
1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1
+ + + +
0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1

Paso 1
0 Paso 2
0 0 Paso 5
1 1 0 Paso 8
1 0 1 0
0 1 1
1 1 0 1 0 1
1 0 1 1 1 0 1 1 1 0 1 1
+ + +
0 1 1 1 0 1 1 1 0 1 1 1

0 0 1 1 0 1 1 1 0

1 0 0 1 0 0 0 1 0
Paso 3 Paso 6 Paso 9

1 1

0 1 1
1 0 0

1 0 1 1 1 0 1 1 1 0 1 1
+ + +
0 1 1 1 0 1 1 1 0 1 1 1

1 0 0 1 0 1 0 0 1 0
Paso 4 Paso 7 Paso 10
Tema 5. Circuitos combinacionales 81

De manera genérica para dos sumandos X (x3x2x1x0) e Y (y3y2y1y0) tendríamos que el


resultado final de la suma S (s4s3s2s1s0) respondería a las siguientes operaciones:

( x0 + y0 ) → ( s0, a0)
( x1 + y1 + a0) → ( s1, a1)
( x2 + y2 + a1) → ( s2, a2)
( x3 + y3 + a2) → ( s3, a3)
( x4 + y4 + a3) → ( s4, a4)
( a4 ) → ( s5 )

Donde la tabla verdad de si y ai (i = 0,1,2,3,4) sería la siguiente:

xi yi si ai
00 00
01 10
10 10
11 01

A partir de dicha tabla sabemos que las funciones de conmutación que las sintetizan
serían las siguientes:
si = xi yi + xi yi = xi ⊕ yi
ai = xi yi

Y los circuitos que sintetizarían dichas funciones de conmutación los siguientes:

Esquemáticamente dicho circuito se conoce como semisumador y su símbolo es el


siguiente:

A partir de dicho componente básico podríamos construir un circuito para sumar


palabras de n bits a base de conectar varios semisumadores en cascada:
Tema 5. Circuitos combinacionales 82

Aplicándolo al ejemplo de antes las entradas y salidas a lo largo el circuito serian las
siguientes:

Otro circuito combinacional que permite el cálculo de la suma y el acarreo es el


sumador completo. Este circuito combinacional tiene las siguientes entradas y salidas:

La tabla verdad para las dos salidas en función de las tres entradas sería la siguiente:

x y a- s a+
000 00
001 10
010 10
011 01
100 10
101 01
110 01
111 11
De donde se obtiene que:

s = x ya− + x ya− + xya− + xya− = m1 + m2 + m4 + m7 = x ⊕ y ⊕ a−


a+ = x ya− + xya− + xya− + xya− = m3 + m5 + m6 + m7 = [Mapa de Karnaugh ] = xa− + ya− + xy

Este sumador completo puede usarse para sumar palabras de n bits uniéndolos en
cascada tal y como se muestra en la siguiente figura:

Este sumador paralelo de n bits es conocido como sumador con acarreo en cascada. El
inconveniente del mismo es el retardo introducido por la propagación del acarreo en las
sucesivas etapas, ya que para obtener el resultado final es necesario que el acarreo
inicial y de las sucesivas etapas llegue al SC final. Cuando el número de bits a sumar es
Tema 5. Circuitos combinacionales 83

pequeño (de 4 a 16 bits) o no es relevante la velocidad de funcionamiento puede


utilizarse este tipo de sumador. Cuando si es importante la velocidad hay que acelerar la
propagación del acarreo dando lugar a otros tipos de sumadores con anticipación del
acarreo.

5.2.2 Sumador BCD


Recordemos que para sumar dos números BCD había que realizar los siguientes pasos:

1) Suma binaria ordinaria


2) Comprobar el resultado obtenido:

- Si el resultado es <= 9 no se hace nada


- Si el resultado es > 9 hay que sumar 6 (en binario 0110) y el acarreo se suma a la
siguiente posición decimal

Veámoslo con un par de ejemplos:

Un circuito sumador BCD debe por tanto ser capaz de de realizar lo siguiente:

- Sumar dos grupos de código BCD utilizando la adición binaria directa.


- Determinar si la suma de esta adición es mayor que 1001 (9 en decimal); si lo es tiene
que sumar 0110 (6 en decimal) a la suma y generar un acarreo para la siguiente posición
decimal.

El primer requisito se cumple utilizando un sumador paralelo binario de 4 bits:

Que podemos simplificar como sigue:


Tema 5. Circuitos combinacionales 84

Las salidas s4s3s2s1s0 pueden variar desde 00000 (cuando A=0000 (0) y B=0000 (0))
hasta 10010 (cuando A=1001 (9) y B=1001 (9)).

El segundo requisito es incluir circuitería para agregar la corrección de la suma de 0110


cuando el resultado sea mayor que 9 (s4s3s2s1s0 > 01001). Los casos posibles de sumas
mayores que 9 vienen dados en la siguiente tabla:
s4 s3 s2 s1 s0
0 1 0 1 0 (10)
0 1 0 1 1 (11)
0 1 1 0 0 (12)
0 1 1 0 1 (13)
0 1 1 1 0 (14)
0 1 1 1 1 (15)
1 0 0 0 0 (16)
1 0 0 0 1 (17)
1 0 0 1 0 (18)

Podemos obtener una función de conmutación que valga 1 solamente en los casos
anteriores si:

s4 = 1 (≥ 16)
s3 = 1 (≥ 8) y { s1=1 o s2 = 1 o s2 = s1 = 1 }

Por tanto la función de conmutación queda como sigue:

x = s4 + s3(s1 + s2)

Y el circuito sería:

Por tanto siempre que x=1 habrá que sumar 0110 a los bits de la suma s3s2s1s0 y generar
un acarreo.

Para realizar la suma utilizaremos otra vez un sumador en paralelo de 4 bits


Tema 5. Circuitos combinacionales 85

Examinemos las señales del circuito para un par de ejemplo de sumas:

- A = 0101 y B = 0011

- A = 0111 y B = 0110

Podemos simplificar el dibujo del circuito sumador en BCD de forma genérica como
sigue:

Se pueden sumar números de varios dígitos codificados en BCD encadenando varios


circuitos de los anteriores en cascada.

Si queremos por ejemplo sumar dos números decimales de 3 cifras codificados en BCD
podríamos hacer:
Tema 5. Circuitos combinacionales 86

Ejemplo: determinar las entradas y las salidas del circuito anterior si sumamos los
números codificados en BCD: 247 + 538

5.2.3 Restadores
Vamos a sintetizar la función de conmutación y el circuito correspondiente a la resta de
dos números binarios positivos. Las tablas verdad de la resta de dos bits y su adeudo
correspondiente es la siguiente:
xy rd
00 00
01 11
10 10
11 00

Las funciones de conmutación para r y d son las siguientes:

r = x y + xy = x ⊕ y
d = xy
Tema 5. Circuitos combinacionales 87

Observamos que la función de conmutación de la resta de dos bits es la misma que la de


la suma de 2 bits, por lo que el circuito sería prácticamente el mismo:

Podríamos diseñar un circuito que sirviera tanto para sumar como para restar 2 bits
controlando la operación por una señal de control:

Que esquemáticamente podría ponerse como:

Se podría construir un circuito de suma/resta de n bits a partir del semisumador-restador


anterior de manera análoga al caso de la suma (dejar para el alumno su diseño y
comprobación de funcionamiento).

Podemos diseñar también restadores completos (RC) formados por tres entradas y dos
salidas. La tabla verdad sería como sigue:

x y d- r d+
0 0 0 0 0 (0 – 0)
0 0 1 1 1 (0 – 01)
0 1 0 1 1 (0 – 1)
0 1 1 0 1 (0 – 11)
1 0 0 1 0 (1 – 0)
1 0 1 0 0 (1 – 01)
1 1 0 0 0 (1 – 1)
1 1 1 1 1 (1 – 11)
Tema 5. Circuitos combinacionales 88

Las funciones de conmutación de r y d+ serían como sigue:

Con ellas se podría construir un restador con adeudo en cascada de manera análoga a
como se hizo con el sumador con acarreo en cascada.

Recordemos que la representación en complemento a 2 nos permitía realizar una resta


sumando al minuendo el C2 del sustraendo. Por otra parte la complementación C2
consiste en complementar todos los bits y sumar 1 al resultado. Por ello podríamos
realizar un circuito sumador-restador con una señal de control s / r para determinar si la
operación debe ser la suma o la resta y basándonos en el sumador binario de n bits visto
anteriormente:

Análisis del circuito:


Tema 5. Circuitos combinacionales 89

5.2.4 Comparadores
En el procesamiento de la información es frecuente tener que comparar dos palabras o
datos en general. Por ejemplo al ordenar de menor a mayor una tabla de números o al
ordenar alfabéticamente una serie de palabras se van comparando los elementos de dos
en dos y se ordenan en consecuencia.

Sean X e Y los elementos a ordenar; para esta funcionalidad pueden utilizarse los
comparadores que son circuitos combinacionales disponibles en forma integrada.

Un comparador de n bits tiene las siguientes entradas y salidas:

El comparador más simple es el de palabras de 1 bit (n=1). Veamos las tablas verdad de
las tres funciones a sintetizar:

x y x>y x=y x<y


0 0 0 1 0
0 1 0 0 1
1 0 1 0 0
1 1 0 1 0
de donde obtenemos:

Un valor frecuente de palabras a comparar es n=4. En este caso obtengamos las


funciones de conmutación del comparador:

1º) X = Y
Tema 5. Circuitos combinacionales 90

2º) X > Y

3º) X < Y

Los comparadores comercialmente disponibles están preparados para su posible


conexión en cascada, para lo cual se incluyen 3 entradas más por las que se introducen
las salidas de la etapa anterior permitiendo construir comparadores para palabras de
cualquier número de bits.

Un circuito comparador de palabras de 4 bits sería como sigue:

Obviamente las entradas en cascada del comparador precedente sólo se utilizan en caso
de que en el comparador actual X=Y. En ese caso se transmite a la salida la misma
combinación de entradas recibida del comparador precedente.
Tema 5. Circuitos combinacionales 91

5.3 Codificadores

Un codificador es un bloque combinacional con las siguientes características:

Un codificador funciona de manera que a la salida se tiene el código con q bits de uno
de los caracteres que se están codificando.

Los codificadores más frecuentes son los binarios, en los que cada entrada corresponde
a un número decimal y la salida es la representación binaria de ese número decimal.

Así por ejemplo el codificador decimal-BCD es como sigue:

Se trata de un codificador de 10 líneas a 4 líneas. Veamos la tabla verdad de dicho


codificador:

DEC A3 A2 A1 A0
0 0 0 0 0
1 0 0 0 1
2 0 0 1 0
3 0 0 1 1
4 0 1 0 0
5 0 1 0 1
6 0 1 1 0
7 0 1 1 1
8 1 0 0 0

De donde tenemos que:

A3 = 8 + 9
A2 = 4 + 5 + 6 + 7
A1 = 2 + 3 + 6 + 7
A0 = 1 + 3 + 5 + 7 + 9
Tema 5. Circuitos combinacionales 92

El circuito necesario sería como sigue:

Se define un codificador sin prioridad a aquel en el que se presupone que no puede


haber más de una entrada activa a la vez. Es decir, sólo podrá existir una entrada a valor
1 y el resto deberá estar al valor 0. A su salida se obtendrá el código correspondiente a
la única entrada activa.

Ejemplo: Construir un codificador sin prioridad que codifique los 10 dígitos decimales
en el código 2 a 5.

El codificador pedido es pues un codificador con 10 entradas y 5 salidas:

La tabla verdad es la siguiente:

Entrada activa z4 z3 z2 z1 z0
Ninguna 0 0 0 0 0
0 0 0 0 1 1
1 0 0 1 0 1
2 0 0 1 1 0
3 0 1 0 0 1
4 0 1 0 1 0
5 0 1 1 0 0
6 1 0 0 0 1
7 1 0 0 1 0
8 1 0 1 0 0
9 1 1 0 0 0
De modo que:

z4 = 6 + 7 + 8 + 9
z3 = 3 + 4 + 5 + 9
z2 = 1 + 2 + 5 + 8
z1 = 0 + 2 + 4 + 7
z0 = 0 + 1 + 3 + 6
Tema 5. Circuitos combinacionales 93

Por tanto finalmente el circuito quedaría como sigue:

Se define un codificador con prioridad como aquel en el que ya no existe restricción en


cuanto al número de entradas que puedan estar activas simultáneamente. Por ello las
entradas estarán ordenadas por un determinado orden de prioridad. A la salida se
obtendrá el código correspondiente a la entrada activa de mayor prioridad.

Ejemplo: Diseñar un codificador binario con prioridad de 4 a 2 con la ordenación 3-2-1-


0.

La tabla que sintetiza el comportamiento buscado es:

Entradas
Salidas
activas
3210 z1 z0
0000 0 0
0001 0 0
0010 0 1
0011 0 1
0100 1 0
0101 1 0
0110 1 0
0111 1 0
1000 1 1
1001 1 1
1010 1 1
1011 1 1
1100 1 1
1101 1 1
1110 1 1
1111 1 1

De donde podemos obtener fácilmente:


Tema 5. Circuitos combinacionales 94

5.3.1 Conversores de código


Recordemos el proceso de conversión binario a Gray y de Gray a binario:

De donde son inmediatos los circuitos conversores de código de 4 bits Gray ↔ binario:

Ejercicio propuesto: Dibujar el diagrama lógico de un circuito conversor de código Gray


a código binario de 8 bits.

5.3.2 Generación y comprobación de la paridad.


Para poder comprobar o generar la paridad adecuada dentro de un código se puede
utilizar como puerta base para ello la puerta EXOR:

x y ⊕ Paridad
0 0 0 Par
0 1 1 Impar
1 0 1 Impar
1 1 0 Par
Tema 5. Circuitos combinacionales 95

Si quisiéramos comprobar la paridad de un código de dos bits utilizaríamos una puerta


EXOR:

En el caso de un código de 4 bits de entrada:

Con este tipo de circuitos podríamos tanto comprobar como generar paridad par. Con
circuitos con puertas EXNOR construiríamos análogamente generadores y
comprobadores de paridad impar.

5.4 Decodificadores
Un decodificador es un bloque combinacional cuya función es la inversa a la realizada
por un codificador:

Un decodificador funciona de manera que cada combinación de entradas particulariza


una y sólo una de las salidas.
Los decodificadores binarios son aquellos en los que q = 2 . En ellos cada combinación
p

de entradas se particulariza en la salida cuyo orden coincide con el valor en binario de


las entradas.

El decodificador binario más básico es el que únicamente detecta la presencia de una


determinada combinación de las entradas. Para implementarlo basta con usar puertas
AND y NOT.

Ejemplo: Diseñar un decodificador que detecte la presencia del número binario 1011 en
la entrada, de modo que en dicho caso la salida sea 1.

Para ello tendríamos que hacer:


Tema 5. Circuitos combinacionales 96

Un decodificador muy usual es el decodificador BCD a decimal, también llamado


codificador 4 a 10 o decodificador 1 de 10. La tabla verdad de dicho decodificador será
la siguiente:

Entradas Salidas
x3 x2 x1 x0 z9 z8 z7 z6 z5 z4 z3 z2 z1 z0
0 0 0 0 0 0 0 0 0 0 0 0 0 1
0 0 0 1 0 0 0 0 0 0 0 0 1 0
0 0 1 0 0 0 0 0 0 0 0 1 0 0
0 0 1 1 0 0 0 0 0 0 1 0 0 0
0 1 0 0 0 0 0 0 0 1 0 0 0 0
0 1 0 1 0 0 0 0 1 0 0 0 0 0
0 1 1 0 0 0 0 1 0 0 0 0 0 0
0 1 1 1 0 0 1 0 0 0 0 0 0 0
1 0 0 0 0 1 0 0 0 0 0 0 0 0

Por tanto:

O de forma esquemática:
Tema 5. Circuitos combinacionales 97

Comparando los codificadores con los decodificadores observamos que la puerta básica
de los primeros es de puerta OR, mientras que en los segundos es la puerta AND.

Otro circuito decodificador interesante es el decodificador BCD a display de 7


segmentos:

Un display de 7 segmentos permite representar los dígitos decimales mediante un


display formado por diodos emisores de luz (LED) o de cristal líquido (LCD). Así por
ejemplo para representar al número BCD 0010 (2 en decimal) sería necesario poner a 1
los segmentos a, b, g, e y d.

La lógica de codificación de los segmentos viene dada por la siguiente tabla:

BCD Segmentos activos


x3 x2 x1 x0 Dígito a b c d e f g
0 0 0 0 0 1 1 1 1 1 1 0
0 0 0 1 1 0 1 1 0 0 0 0
0 0 1 0 2 1 1 0 1 1 0 1
0 0 1 1 3 1 1 1 1 0 0 1
0 1 0 0 4 0 1 1 0 0 1 1
0 1 0 1 5 1 0 1 1 0 1 1
0 1 1 0 6 1 0 1 1 1 1 1
0 1 1 1 7 1 1 1 0 0 1 0
1 0 0 0 8 1 1 1 1 1 1 1
1 0 0 1 9 1 1 1 1 0 1 1

Esquemáticamente el decodificador quedaría como sigue:


Tema 5. Circuitos combinacionales 98

Implementemos por ejemplo el circuito para el segmento a:

a = ∑ m (0,2,3,5,6,7,8,9)
o más sencillo:

a = π M (1,4) = ( x3 + x2 + x1 + x0 )( x3 + x2 + x1 + x0 )

Minimizando con el MK:

De donde el circuito físicamente quedaría como sigue:

Se puede comprobar que en la forma SOP hubiéramos tenido:

a = x3 + x1 + x2 x0 + x2 x0 = x3 + x1 + x0 ⊗ x2
Tema 5. Circuitos combinacionales 99

Cualquiera de las dos implementaciones habría sido válida y podría esquematizarse


como sigue:

Implementando el resto de los 6 circuitos para los segmentos restantes obtendríamos el


decodificador BCD – 7 segmentos buscado.

5.5 Demultiplexores

Un demultiplexor (DEMUX) es un bloque combinacional para la conducción de la


información que tiene la siguiente estructura:

La acción del demultiplexor es conectar la única entrada de datos con una y sólo una de
las salidas. La salida elegida dependerá del valor de las entradas de control. Veamos un
ejemplo de demultiplexor de 1 a 4 líneas:

La tabla de funcionamiento de dicho demultiplexor sería:

Entradas de control Salidas


y1 y0 z3 z2 z1 z0
0 0 0 0 0 x
0 1 0 0 x 0
1 0 0 x 0 0
1 1 x 0 0 0
Tema 5. Circuitos combinacionales 100

y el circuito resultante el siguiente:

Observamos que la diferencia entre el circuito demultiplexor y el decodificador reside


en una nueva entrada x. Por ello este circuito demultiplexor se puede transformar en un
decodificador si hacemos x=1.

Supongamos que queremos construir un demultiplexor de 1 a 8, pero sólo disponemos


de demultiplexores de 1 a 2 como el siguiente:

Podríamos construir el demultiplexor de 1 a 8 conectando en cascada varios de estos


demultiplexores 1 a 2 en forma de árbol. Sería como sigue:

Como vemos hemos creado 3 niveles controlados cada uno de ellos por la misma
entrada de control. La señal x se irá encaminando a través de los distintos
demultiplexores dependiendo de dichas entradas de control.

Ejemplo: ¿Cuáles serían los demultiplexores que conducirían la entrada de datos x en


caso de que las señales de control fueran y2y1y0 = 110?
Tema 5. Circuitos combinacionales 101

Esta idea de conexión en cascada puede ser utilizada para ampliar el abanico de salida
de los decodificadores.

Ejemplo: Construir un decodificador 5 a 32 suponiendo que sólo disponemos de 1


decodificador 1 a 2 y 2 demultiplexores 1 a 16.

Podríamos construirlo del siguiente modo:

Hasta ahora hemos construido demultiplexores donde la información conducida era de 1


bit. Lo usual es tener que conducir más de 1 bit, por lo que aparecen los demultiplexores
de palabras de n bits:

Se pueden construir este tipo de demultiplexores de n bits utilizando n demultiplexores


de 1 bit. Cada uno de ellos estaría controlado por las mismas señales de control. Las
entradas serían los n bits xn-1···x0. Las salidas serían los bits de entrada pero
reconducidos en la posición indicada por los bits de control.
Tema 5. Circuitos combinacionales 102

Ejemplo: Construir un demultiplexor de palabras de 4 bits a partir de un demultiplexor


de 1 bit.

Por ejemplo si X=1101 e Y=01 tendríamos:

5.6 Multiplexores
Un multiplexor es un boque combinacional para la conducción de la información que
tiene p entradas de control, 2P entradas de datos y una salida de datos:
Tema 5. Circuitos combinacionales 103

La función del multiplexor es conectar a la única salida de datos una y sólo una de las
entradas, viniendo decidida esa entrada de datos por los valores que tomen las entradas
de control.

Como ejemplo construyamos un multiplexor 8 a 1:

La tabla de funcionamiento sería:

Entradas
Salida
de control
y2 y1 y0 z
000 x0
001 x1
010 x2
011 x3
100 x4
101 x5
110 x6
111 x7

Y a partir de esta tabla obtenemos el circuito:

Al igual que con los demultiplexores podemos construir multiplexores de mayor


número de bits encadenando multiplexores más sencillos en forma de árbol.
Tema 5. Circuitos combinacionales 104

Ejemplo: Construir un multiplexor 8 a 1 a partir de un multiplexor 2 a 1 y 4 a 1.

1ª Solución: Construir todo con MUX 2 a 1 en tres niveles:

Ejemplo: Y = 1 0 0 = Y2 Y1 Y0

2ª Solución: Construirlo con 4 MUX 2 a 1 y 1 MUX 4 a 1 en dos niveles:


Tema 5. Circuitos combinacionales 105

3ª Solución: Construirlo con 2 MUX 4 a 1 y 1 MUX 2 a 1 en dos niveles:

Al igual que con los demultiplexores, es usual la existencia de multiplexores de palabra


frente a los multiplexores de 1 bit. El símbolo de un multiplexor de n bits sería el
siguiente:

Se pueden construir multiplexores de n bits utilizando n multiplexores de 1 bit. Todos


los multiplexores estarán controlados por las mismas señales de control. Las entradas de
datos serían todos los bits del mismo orden de cada una de las palabras de entrada. La
salida sería el conjunto de bits que forman la palabra seleccionada por los bits de
control.

Ejemplo: Construir un MUX de 4 bits a partir de MUX de 1 bit:


Tema 5. Circuitos combinacionales 106

5.6.1 Los MUX como módulos lógicos universales


Los multiplexores se pueden utilizar como módulos lógicos universales que permiten la
síntesis de cualquier función de conmutación de hasta un determinado número de
variables.

Para sintetizar una determinada función de conmutación se consideran las variables de


control como las variables de la función de conmutación y en función del valor de ellas
conducimos a la salida un 0 o un 1.

Ejemplo: Sintetizar con un MUX 8 a 1 la siguiente función de conmutación:

xyz F
000 1
001 0
010 0
011 0
100 1
101 0
110 1
111 1

El MUX sería entonces el siguiente, el cual realiza la función de conmutación como es


fácil comprobar:

5.6.2 El MUX como selector de datos


Un MUX utilizado como selector de datos sirve para convertir información paralela en
información serie.

Ejemplo: Multiplexor 4 a 1.
Tema 5. Circuitos combinacionales 107

Hemos aplicado por tanto las 2n palabras de control a intervalos regulares sobre la
entrada de datos.

De manera análoga podríamos utilizar los DEMUX para transformar información serie
en información paralela, aunque en realidad esto se realiza con otros procedimientos
que veremos más adelante.

5.7 Acceso a buses


Todos los componentes de un sistema digital dado, tal como una computadora se
interconectan mediante buses que sirven como rutas de comunicación.

Físicamente un bus es un conjunto de conductores que sirven para interconectar dos o


más componentes funcionales de un sistema o varios sistemas.

Eléctricamente un bus es una colección de señales y niveles de tensión que permiten a


los distintos dispositivos conectados al bus trabajar juntos correctamente.

A la hora de diseñar un sistema digital de cierta complejidad es necesario decidir


cuantos buses se van a incluir, tratando siempre de que haya el mínimo número posible
dentro de los requerimientos de velocidad de funcionamiento.

Un bus cualquiera, en general estará conectado a varias fuentes de información, que


tratarán de enviar la misma a través del bus. Es claro que en un determinado instante
sólo una de las fuentes puede enviar información a través del bus, pues dos o mas
fuentes actuando simultáneamente interferirían.

El número mínimo de buses de un sistema será como mínimo igual al número máximo
de fuentes que deben enviar información simultáneamente.

El control de acceso al bus para enviar información puede hacerse mediante un


multiplexor a través del cual pasen todas las entradas tal y como puede verse en la
siguiente figura:
Tema 5. Circuitos combinacionales 108

Por tanto en un bus habrá también varios destinos de la información o subsistemas a los
que deberá llegar la misma.

En un determinado instante pueden haber varios destinos recibiendo información


simultáneamente. El hecho de que la información sea leída por un destino suele
controlarse mediante señales de control aplicadas individualmente a cada uno de dichos
destinos.

5.8 Memorias ROM


Una memoria es un dispositivo electrónico que está organizada según la siguiente
estructura de forma esquemática

Cada celda de memoria contiene un bit de información, que a través de las salidas de
datos puede ser leído cuando se desee.

Si la información contenida en cada celda se puede modificar la memoria se denomina


de lectura y escritura. Si no se puede modificar de manera normal entonces se denomina
memoria de sólo lectura. A cada palabra de memoria le corresponde una dirección
única, accedida a través de las n entradas (n bits) de dirección.

Para leer una palabra dada, primero se direcciona dicha palabra con los n bits, y después
se extraen los m bits que forman la palabra contenida en dicha dirección.
Tema 5. Circuitos combinacionales 109

Ejemplo: ¿Que señales de dirección habría que suministrar a una memoria de palabra de
32 bits para acceder al contenido de la posición de memoria 1024? ¿Cuantas señales
necesitaríamos si la memoria tiene una máximo de 16GB?

Cualquier red lógica combinacional con n entradas y m salidas puede considerarse como
una memoria de sólo lectura con 2n palabras de m bits, donde las entradas a la red
serían las entradas de dirección y las salidas de la red serían las salidas de datos. La
información escrita en esa memoria sería la correspondiente a las funciones de
conmutación sintetizadas por la red combinacional.

Por ejemplo, el multiplexor 8 a 1 visto anteriormente:

puede ser considerado como una memoria de sólo lectura con 3 entradas (x,y,z), 1 salida
(F) y 8 palabras de 1 bit almacenadas (1,0,0,0,1,0,1,1).
Aunque cualquier red lógica combinacional puede ser vista como una memoria de sólo
lectura, esta denominación suele reservarse a las memorias ROM (Read Only Memory).

Una ROM es un bloque combinacional con:

- n entradas (xn-1 ··· x0)


- m salidas (zm-1 ··· z0)

donde a cada carácter de entrada de n bits le corresponde un carácter de salida de m bits.


Por tanto desde este punto de vista una ROM no es más que un conversor de códigos.
Para construirla basta utilizar un decodificador n a 2n seguido de un codificador 2n a m.
Tema 5. Circuitos combinacionales 110

Ejemplo: Construir una memoria ROM de 8 direcciones de memoria de palabras de 4


bits que almacene la siguiente información:

1 0 0 1
0 1 1 1
0 1 0 1
1 0 0 1
1 1 1 0
1 0 1 0
1 1 1 1
0 0 0 1

Como tenemos 8 direcciones de memoria, necesitamos 3 bits para direccionarlos. Como


las palabras son de 4 bits tendremos 4 salidas (de 1 bit).

Por tanto tendremos de manera esquemática:

Por ejemplo para recuperar la palabra de la dirección de memoria 4 (100 en binario)


tendríamos las siguientes entradas y salidas:
Tema 5. Circuitos combinacionales 111

5.8.1 ROM programables


Como hemos visto las conexiones de las entradas con las puertas AND son las
correspondientes a un decodificador binario de manera que las 2n puertas AND generan
todos los minterms de las n variables de entrada. Por otro lado según hemos visto las
conexiones entra las puertas AND y las puertas OR varían de una ROM a otra, en
función del código de salida que se quiera generar. Estas conexiones entre las puertas
AND y las puertas OR pueden ser de distinto tipo dando lugar a distintos tipos de
memorias ROM. Estos tipos son los siguientes:

- Programables por máscara (mask programmable): son memorias en las que las
conexiones entre las puertas AND y OR se establecen durante el proceso de
fabricación por el propio fabricante.

- Programables en campo (field programmable): son pastillas preparadas para que le


usuario establezca a voluntad las conexiones. Son conocidas PROM (Programmable
ROM). En estas pastillas es el propio usuario el que elimina las conexiones no
deseadas. Normalmente se hace destruyendo fusibles aplicando una sobretensión en
puntos adecuados. Una vez destruida una conexión ya no se puede volver atrás. Son
por tanto programables una sola vez.

- Borrables (EPROM – Erasable Programmable ROM): estas memorias pueden


eliminar y crear conexiones más de una vez. Para ello se crean las conexiones
mediante almacenamientos espaciales de cargas que podrían eliminarse mediante la
aplicación de luz ultravioleta o aplicando un campo eléctrico adecuado. Son por tanto
reprogramables. No obstante la reprogramación o el borrado se harían fuera del uso
normal de la memoria.

Desde el punto de vista funcional los 3 tipos de memorias ROM anteriores son
exactamente iguales.

5.8.2 La ROM como módulo lógico universal.


Sabemos que cualquier función de conmutación puede expresarse como suma de
minterms. Por tanto como en una ROM tenemos a nuestra disposición internamente
todos los minterms podremos construir cualquier función de conmutación usando una
ROM. Otra representación alternativa de las ROM sería como sigue para el ejemplo de
la memoria anterior:
Tema 5. Circuitos combinacionales 112

Ejercicio: Diseñar una memoria ROM que permita sintetizar simultáneamente las
siguientes funciones de conmutación de 3 variables:

z5 = ∑ m (3,4,5,7)
z4 = ∑ m (0,2,5,7)
z3 = ∑ m (0,1,2,3,4,5)
z2 = ∑ m (0,6)
z1 = ∑ m (1,4,5,7)
z0 = ∑ m (0,2,3,6)

Las aplicaciones de las memorias ROM en los sistemas digitales sin muy variadas.
Además de usarlas para la conversión de códigos o para la síntesis simultánea de varias
funciones de conmutación, se utilizan para grabar tablas de uso frecuente, para la
grabación de secuencias específicas de caracteres, y sobre todo para la grabación
permanente de las rutinas más usadas en el sistema digital de que se trate.

5.9 PLA y PAL


Como hemos visto anteriormente en las memorias ROM se generan internamente todos
los minterms de las variables de entrada. Por otro lado sabemos que una función de
conmutación no solo puede expresarse como suma de minterms, sino que también
puede ponerse como suma de adyacencias en su forma minimizada.

Para sacar provecho de esta circunstancia habría que modificar la matriz de puertas
AND para hacerla programable, ya que recordemos que en el caso de las ROM esta
matriz es fija. Además el hecho de que dicha matriz sea fija implica que un aumento en
una variable de entrada de lugar a una duplicación en el número de puertas AND de
dicha matriz.

Para soluciona esta ligazón entre el número de entradas y el número de puertas AND se
han desarrollado estructuras programables (PAL y PLA) con la misma tipología que las
ROM, es decir:

- entradas
- matriz de puertas AND
- matriz de puertas OR
- salidas

En estas estructuras programables el número de puertas AND ya no es función del


número de entradas y a la salida de las puertas AND se tienen sintetizadas determinadas
adyacencias en vez de todos los minterms.

Una PAL (Programmable Array Logic) es un circuito combinacional que tiene la


siguiente tipología:
Tema 5. Circuitos combinacionales 113

Una PLA (Programmable Logic Array) se diferencia de una PAL en que en ella no solo
es programable la matriz de puertas AND, sino también la matriz de puertas OR.

Como ocurre con las memorias ROM, tanto las PAL como las PLA pueden utilizarse
para sintetizar simultáneamente varias funciones de conmutación, pero dada la
programabilidad de las conexiones entre las puertas AND y las entradas en las PLA y
PLA podríamos utilizar dichos circuitos para sintetizar varias funciones de conmutación
de varias variables.

Al conjunto de los 3 tipos de dispositivos anteriores (ROM, PLA y PAL) se les


denomina PLD (Programmable Logic Device), es decir dispositivos lógicos
programables. El interés del uso de los PLD frente a la utilización de pastillas de puertas
individuales es el siguiente:

Con PLD se pueden reducir el número de CI así como el número de soldaduras


exteriores. Ello da lugar a un menor precio y mayor fiabilidad del diseño final.
Si hay que realizar modificaciones sobre el circuito original normalmente se harán más
fácilmente cuando se utilizan PLD.

No obstante el uso de PLD es muy aconsejable cuando se van a construir varios


ejemplares del mismo diseño de modo que la programación de los PLD se haga durante
su fabricación. Para construir un prototipo puede ser más rápido y conveniente hacerlo
mediante puertas individuales.
Tema 5. Circuitos combinacionales 114

5.10 Resumen
Tema 5. Circuitos combinacionales 115
Tema 6. Elementos de memoria 116

Tema 6
Elementos de memoria
Elementos de memoria ............................................................................................... 116
6.1 Sistemas secuenciales ......................................................................................... 116
6.1.1 Señal de reloj ........................................................................................ 116
6.2 El elemento básico de memoria.......................................................................... 117
6.3 Biestable SR (Set-Reset) .................................................................................... 119
6.3.1 Captación de los ceros y los unos......................................................... 122
6.4 Biestable JK........................................................................................................ 123
6.4.1 Biestables dueño-esclavo...................................................................... 124
6.5 Biestable D ......................................................................................................... 125
6.6 Biestable T.......................................................................................................... 126
6.7 Tablas de excitación para los diferentes biestables: ........................................... 127
6.8 Biestables disparados por flanco ........................................................................ 127
6.9 Estructura de los sistemas secuenciales síncronos ............................................. 129
6.10 Análisis de un sistema secuencial síncrono...................................................... 131
6.11 Diagramas de estados ....................................................................................... 133

6.1 Sistemas secuenciales


Los sistemas combinacionales vistos hasta ahora son sistemas cuya respuesta no
depende del tiempo. Las salidas en un instante determinado sólo dependen del valor de
las entradas en ese instante determinado. Por tanto a mismas entradas obtenemos
siempre las mismas salidas.

En los sistemas secuenciales la salida en un instante determinado depende no sólo de las


entradas en ese instante, sino también de la historia del sistema. La historia del sistema
depende de:

- El estado inicial
- Valor inicial de las entradas

Un sistema secuencial pasa por tanto por diferentes estados de modo que la misma
combinación de entradas puede dar lugar a diferentes salidas si estas se aplican estando
el sistema en estados diferentes.

Por todo esto a los sistemas combinacionales se les llama también sistemas sin
memoria, y a los secuenciales sistemas con memoria. La necesidad de almacenar el
estado del sistema da lugar a la necesidad de nuevos elementos: los biestables.

6.1.1 Señal de reloj


La señal de reloj es una señal periódica para controlar la actuación del sistema:
Tema 6. Elementos de memoria 117

- Flanco de subida: es la transición del 0 al 1 de la señal de reloj. Se representa como ↑


- Flanco de bajada: es la transición del 1 al 0 de la señal de reloj. Se representa como ↓

En los sistemas secuenciales el tiempo se presenta cuantificado: t = n T. De modo que


xn, xn+2 y xn-3 representan los valores de una variable x en un instante n, 2 pulsos
después y tres pulsos antes respectivamente. Los sistemas secuenciales síncronos son
aquellos sistemas secuenciales controlados por una señal de reloj.

6.2 El elemento básico de memoria


Se denomina biestable elemental a la siguiente construcción:

También se le suele llamar cerrojo o latch. Para introducir un valor en este elemento de
memoria hay que introducir el valor a almacenar en una de las salidas directamente.
Este proceso puede resultar costoso por lo que otra posibilidad más fiable podría ser la
siguiente (basada en puertas NAND):

Veamos el funcionamiento de dicho circuito: en primer lugar veamos que si aplicamos


una entrada AB=10:
Tema 6. Elementos de memoria 118

Por tanto siempre que AB=10 independientemente del estado del biestable el estado
final es Q=0. En segundo lugar veamos que cuando la entrada es AB=0:

Representando lo visto hasta ahora en forma de tabla de funcionamiento:

AB Q n Qn Q n +1 Qn +1
10 10 01
10 01 01
01 10 10
01 01 10

En tercer lugar veamos que ocurre cuando AB=11 para cualquier estado Q del biestable:

Es decir que cuando AB=11 el estado del biestable no cambia. A esta combinación se la
llama combinación de reposo o almacenamiento.

Por último veamos qué ocurre cuando AB=00:


Tema 6. Elementos de memoria 119

Por tanto con AB=00 las salidas dejan de ser complementarias, por lo que esta
combinación debe evitarse. La tabla de este biestable es entonces finalmente:

AB Q n +1 Qn +1
00 11 A evitar
01 10
AB
10 01
11 Q n Qn Reposo

Otra posible combinación es utilizando puertas NOR:

Puede comprobarse (se deja como ejercicio) que:

MN Q n +1 Qn +1
00 Q n Qn Reposo
01 10
MN
10 01
11 00 A evitar

Estas dos estructuras son el núcleo de todos los biestables que veremos más adelante.

Los biestables (también llamados flip-flops) que vamos a estudiar son: SR, JK, D y T.

6.3 Biestable SR (Set-Reset)


Tiene la siguiente estructura:

La señal de reloj Rl controla la actuación del biestable del siguiente modo:


Tema 6. Elementos de memoria 120

• Si Rl = 0 ⇒ AB = 11  Combinación de reposo (entradas aisladas)


• Si Rl = 1 ⇒ Funcionamiento normal

Cuando Rl=1 y SR=01 o SR=10 el funcionamiento es casi idéntico al visto en los


biestables de dos puertas anteriores:

Por otro lado cuando SR=00 (independientemente de la señal de reloj Rl) tenemos la
combinación de reposo o almacenamiento:

Por último si aplicamos la combinación de entrada SR=11 tendríamos el siguiente


comportamiento: si Rl=1:

Pero además si estando ambas salidas a 1 la señal de reloj pasa a 0 (Rl=0) el biestable
comenzará a oscilar:

Visto en forma de cronograma:


Tema 6. Elementos de memoria 121

La tabla que determina el comportamiento del circuito en función de las entradas y del
estado anterior del biestable es:

Con las entradas SR se controla totalmente el estado del biestable situándolo en el


estado que deseemos independientemente del estado anterior del mismo.

Todo ello se hace siempre en sincronía con la señal de reloj. Por ello a estas entradas se
les llama en ocasiones entradas síncronas.

Para controlar el estado del biestable sin depender de la señal de reloj (es decir con
Rl=0) podemos incluir en el circuito entradas asíncronas. Con ellas se puede establecer
el valor del biestable a inicial.

cuyo símbolo es:


Tema 6. Elementos de memoria 122

Las señales asíncronas deben aplicarse con Rl=0, permaneciendo en si estado estable
(PrCl=11) cuando Rl=1.

- Si PrCl=01 escribimos un 1 en el biestable (Q=1)


- Si PrCl=10 escribimos un 0 en el biestable (Q=0)

La combinación PrCl=00 debe evitarse ya que pone ambas salidas a 1 y genera la


situación de indeterminación vista anteriormente.

6.3.1 Captación de los ceros y los unos


Biestables disparados por nivel: son aquellos que responden a cualquier cambio de las
entradas mientras la señal de reloj esté a nivel 1.

Los anteriores biestables SR eran disparados por nivel.

Este tipo de biestables pueden dar lugar a valores erróneos si de manera indeseada las
entradas cambian mientras Rl=1. A este fenómeno se le llama de captación de los ceros
y captación de los unos:

Para solucionar este problema se hace que las entradas al biestable sean significativas
únicamente en un breve periodo de tiempo conocido como flanco de subida o flanco de
bajada.

Se puede transformar cualquier biestable disparado por nivel en biestable disparado por
flanco del siguiente modo:
Tema 6. Elementos de memoria 123

Análogamente a partir del siguiente circuito se puede obtener el cronograma para el


disparo por flanco de bajada:

6.4 Biestable JK
El biestable SR tiene el inconveniente de que debe evitar una de las combinaciones de
entrada (SR=11) para que no aparezcan indefiniciones en las salidas. Para evitar esta
dificultad se puede utilizar el biestable JK que tiene 2 entradas síncronas JK y en el que
se resuelven las entradas problemáticas haciendo Q n +1 = Qn y en el resto de los casos
actúa como el biestable SR. Las tablas de transición de ambos biestables son entonces:

SR JK
QnSR Qn+1 QnJK Qn+1
000 0 000 0
001 0 001 0
010 1 010 1
011 * 011 1
100 1 100 1
101 0 101 0
110 1 110 1
111 * 111 0

Se puede demostrar que la ecuación que gobierna la salida de dicho circuito es:
Q n +1 = Qn J + Q n K

Se puede construir un biestable JK a partir de un biestable SR haciendo:


Tema 6. Elementos de memoria 124

Que podemos representar como sigue:

O sintetizándolo de manera más simplificada:

Cuyo símbolo es:

6.4.1 Biestables dueño-esclavo


Los biestables descritos están disparados por nivel, de modo que siguen teniendo el
problema de captación de ceros y unos. La solución a este problema sigue siendo la
misma que para los biestables SR, es decir, biestables JK disparados por flanco de
subida o de bajada. Además en los biestables JK puede presentarse el problema de
carreras:
JK
QnJK Qn+1
000 0
001 0
010 1
011 1
100 1
101 0
110 1
111 0
Tema 6. Elementos de memoria 125

Como vemos en las filas -11 de la tabla de transición del biestable JK:

Si QnJK = 011  Qn+1 = 1 ⇒ QnJK = 111  Qn+1 = 0 ⇒ QnJK = 011 !!!

De modo que cuando JK=11 la salida oscila entre 0 y 1 si el retardo de propagación de


la señal es menor que la anchura del pulso (lo que es lo usual). Una posible solución a
esto es introducir un retardo en el camino de realimentación mayor que la anchura del
pulso. No obstante esta es una solución costosa que debe evitarse. Otra posible solución
es la implementación de los biestables dueño-esclavo:

Cuyo funcionamiento es el siguiente:

- Cuando Rl=1: el dueño se sitúa en el valor marcado por las entradas JK


- Cuando Rl=0: el valor escrito en el dueño se copia en el esclavo

Al aislar la parte “dueño” de la parte “esclavo” al funcionar ambas sobre diferentes


pulsos de la señal de reloj, se evita la realimentación de salida a entrada que provoca la
presencia de carreras en el circuito. Una de las características más importantes de los
biestables dueño-esclavo es que se permiten escritura y lectura simultánea, ya que
mientras se escribe en el dueño, se puede leer el valor previo en el esclavo.

6.5 Biestable D
Un tipo de biestable muy sencillo y muy útil es el biestable D (de Delay):

Actúa reteniendo la información durante un pulso de reloj, de manera que: Qn+1 = Dn

La tabla de transiciones es:


Dn Qn+1
0 0
1 1
Tema 6. Elementos de memoria 126

En forma de cronograma:

Se puede construir un biestable D a partir de biestables SR (o JK). Recordemos la tabla


de transiciones del biestable SR:

6.6 Biestable T
Tiene la siguiente estructura:

Funcionamiento:

- Cuando T=0 la salida no cambia


- Cuando T=1 la salida cambia (en sincronismo con la señal de reloj)

La tabla de transiciones de este biestable es la siguiente:


Tema 6. Elementos de memoria 127

Se puede construir un biestable T a partir de un biestable JK:

6.7 Tablas de excitación para los diferentes biestables:


Cualquier biestable de utilidad debe poder llegar a tener cualquiera de las cuatro
posibles transiciones de sus salidas imponiendo las entradas adecuadas. Las tablas de
excitación de los 4 tipos de biestables vistos son las siguientes (pueden ser obtenidas a
partir de las tablas de transiciones):

6.8 Biestables disparados por flanco


Hemos visto como construir cualquier biestable disparado por nivel en biestable
disparado por flanco. Veamos algunos ejemplos de biestables disparados por flanco
diseñados expresamente como tales.

Ejemplo: Biestable tipo D disparado por flanco de subida


Tema 6. Elementos de memoria 128

El funcionamiento del mismo es el siguiente:


Tema 6. Elementos de memoria 129

6.9 Estructura de los sistemas secuenciales síncronos


Como ya hemos visto, en los sistemas secuenciales la salida no depende únicamente de
las entradas, sino también del estado en el que se encuentre el sistema. La estructura
general de un sistema secuencial síncrono sería la siguiente:
Tema 6. Elementos de memoria 130

Todos los biestables están controlados por la misma señal de reloj. Cuando llega una
señal de reloj los p biestables harán una transición a un nuevo estado. Un estado está
compuesto por el valor almacenado por los p biestables.

Las salidas se obtendrán a partir de relaciones de la forma:


Tema 6. Elementos de memoria 131

6.10 Análisis de un sistema secuencial síncrono


Sea el siguiente sistema secuencial:

Se obtiene que:
Tema 6. Elementos de memoria 132

Como sabemos que para los biestables D se tiene yn+1 = Dn obtenemos la tabla de
transiciones:

Y de las ecuaciones de las salidas obtenemos la tabla de salidas:

Ambas tablas se suelen dibujar juntas llamándose tabla de transiciones y salidas. Para
simplificar se suelen dar nombres simbólicos a cada uno de los estados obteniéndose la
tabla de estados:
Tema 6. Elementos de memoria 133

Y finalmente de forma más gráfica se hace el diagrama de estados:

En el proceso de síntesis utilizaremos las mismas herramientas que han aparecido en el


análisis pero en sentido inverso.

6.11 Diagramas de estados


Ejemplo: En un sistema digital se transmite información serie en el código 4 4 1 -2 en
sincronismo con una señal de reloj, y se desea diseñar un circuito secuencial síncrono
que detecte si el carácter recibido es del código. Se supone que el primer bit en
transmitirse es el menos significativo. Recordemos el código 4 4 2 -1:

El circuito tendrá entonces las siguientes entradas y salidas:

Partiremos de un estado inicial A en el que todavía no haya llegado ningún bit y


construimos partiendo de él el diagrama de estados:
Tema 6. Elementos de memoria 134

A partir de este diagrama obtenemos la tabla de estados:

Tenemos 15 estados, por lo que necesitamos 4 variables de estado para codificarlos, por
tanto necesitamos 4 biestables. Codificaremos los 15 estados como sigue:

La tabla de transiciones y salidas es entonces inmediata:


Tema 6. Elementos de memoria 135

Podemos ya escribir la expresión de la salida z:

Por último elegiríamos el biestable a utilizar y obtendríamos las ecuaciones de las


excitaciones de los biestables. Por ejemplo con biestables T cuya tabla de excitaciones
es la siguiente:
QnQn+1 T
00 0
01 1
10 1
11 0
De donde obtenemos:
Tema 6. Elementos de memoria 136

Desarrollando y minimizando obtenemos finalmente las ecuaciones:


Tema 6. Elementos de memoria 137
Tema 7. Registros, Contadores y Memorias 138

Tema 7
Registros, contadores y memorias
Registros, contadores y memorias............................................................................. 138
7.1 Registros .............................................................................................................. 138
7.2 Registros de desplazamiento................................................................................ 139
7.3 Contadores ........................................................................................................... 141
7.3.1 Contadores síncronos ................................................................................ 142
7.3.2 Contadores asíncronos .............................................................................. 147
7.4 Contadores obtenidos con registros de desplazamiento ...................................... 148
7.4.1 Contadores en anillo ................................................................................. 148
7.4.2 Contadores Johnson .................................................................................. 149
7.4.3 Generadores de secuencias ....................................................................... 151
7.5 Memorias RAM ................................................................................................... 154
7.5.1 Celda elemental de memoria ..................................................................... 155
7.5.2 Expansión de memorias RAM.................................................................... 157
7.5.3 Decodificación bidimensional ................................................................... 159
7.6 Memorias LIFO (Pila) ......................................................................................... 160
7.6.1 Memorias LIFO con registros de desplazamiento .................................... 161
7.6.2 Memorias LIFO con memoria RAM .......................................................... 161
7.7 Memorias FIFO (Cola) ........................................................................................ 162
7.7.1 Memorias FIFO con registros de desplazamiento .................................... 163
7.7.2 Memorias FIFO con memoria RAM.......................................................... 164

Biestables:
- Elementos básicos para el almacenamiento de información
- Almacenan un bit (cantidad mínima de información)

Registros y contadores:
- Almacenan y procesan bloques de bits (palabras)

Memorias:
- Almacenan bloques de bits (palabras)
- Permite escritura y lectura

7.1 Registros
Definición: son sistemas secuenciales síncronos formados por agrupaciones de
biestables que incorporan señales de control y entradas asíncronas comunes son
activados por la misma señal de reloj y almacenan (y pueden procesar) información.

En la figura 7.1 puede verse un símbolo esquemático de un registro formado por 4


biestables:
Tema 7. Registros, Contadores y Memorias 139

Señales de control

Entradas
(síncronas y B0 B1 B2 B3 Salidas
asíncronas) (síncronas)

Señal de reloj

Figura 1: Símbolo de un registro formado por 4 biestables

Cuando se habla simplemente de “registros” se hace referencia a su capacidad de


almacenamiento simultáneo de varios bits. Existen registros con capacidad de
procesamiento de los bits que contienen, tal y como se verá con los registros de
desplazamiento.

7.2 Registros de desplazamiento


Definición: un registro de desplazamiento de m bits con desplazamiento a la derecha es
una agrupación de m biestables tipo D (ver figura 2) donde la salida de un biestable en
un instante n, es la entrada del siguiente biestable en el instante n+1.

x Dm-1 Dm-2 ... D1 D0

Qm-1 Qm-2 Q1 Q0
Figura 2: Registro de desplazamiento a la derecha de m bits

Ejemplo: Registro de desplazamiento a la derecha de 4 bits

PR3 PR2 PR1 PR0

Pr Pr Pr Pr
x D3 Q3 D2 Q2 D1 Q1 D0 Q0 z

Rl Rl Rl Rl
Cl Cl Cl Cl

Clear

Rl

Figura 3: Registro de desplazamiento a la derecha de 4 bits

En este circuito tenemos las siguientes señales:


Tema 7. Registros, Contadores y Memorias 140

- Entrada de datos (entrada síncrona): x


- Entradas de control:
o PRi: Entradas Set (individuales de cada biestable)
o Cl: Entrada Clear (común a todos los biestables)
- Señal de reloj (común): Rl
- Salida serie: z

Suponiendo que todos los biestables inicialmente a cero, y que son activados por flanco
de bajada, ante la secuencia de entrada x = 01010 obtendríamos el siguiente
cronograma:

Rl

Q3

Q2

Q1

Q0

Figura 4: Cronograma del registro de desplazamiento de 4 bits


Como puede verse cuanto las salidas de todos los biestables siguen la señal de entrada
x, pero con diferentes retardos (más retardo cuanto más alejado esté el biestable de la
entrada x). En el caso del biestable D0 el retardo es de 4 pulsos de reloj. Se puede
generalizar este resultado y decir que un registro de desplazamiento de m bits se puede
utilizar como retardo temporal de m pulsos de reloj.

Dependiendo de la posibilidad de inicialización de las entradas y de la accesibilidad de


las salidas nos encontramos con 4 tipos de registros:

- SISO (Series Input / Series Output): una entrada y una salida (ambas en serie).
Provoca un retardo temporal en la salida de m pulsos de reloj respecto de la entrada.

E ... S

Figura 5: Registro de desplazamiento SISO

- SIPO (Series Input / Parallel Output): entrada serie y m salidas en paralelo. Puede
verse como un convertidor serie-paralelo.

E ...

Sm-1 Sm-2 S1 S0

Figura 6: Registro de desplazamiento SIPO


Tema 7. Registros, Contadores y Memorias 141

- PISO (Parallel Input / Series Output): m entradas en paralelo y una salida serie.
Puede verse como un convertidor paralelo-serie.

Em-1 Em-2 E1 E0

... S

Figura 7: Registro de desplazamiento PISO

- PIPO (Parallel Input / Parallel Output): m entradas en paralelo y m salidas en


paralelo. En este caso se utiliza únicamente como elemento de almacenamiento y no
se utilizan sus capacidades de desplazamiento.

Em-1 Em-2 E1 E0

...

Sm-1 Sm-2 S1 S0

Figura 8: Registro de desplazamiento PIPO

7.3 Contadores
Definición: un contador es un sistema secuencial con una entrada de pulsos x (que en
particular puede ser una señal de reloj) y m señales de salida zm-1,...,z0, las cuales, en
respuesta a cada pulso de entrada, toman un valor determinado de una serie de posibles
configuraciones cíclicas preestablecidas.

Pueden tener además:


- Señales de control: para situarlo por ejemplo en un estado determinado
- Entradas de datos: para carga de datos en paralelo.

Señales de control

x Biestables + Lógica Combinacional Salidas

Entradas de datos

Figura 9: Esquema de un contador


Tema 7. Registros, Contadores y Memorias 142

Se denominan contadores porque las salidas suelen ser una cuenta cíclica de los pulsos
de entrada en una base determinada. Por ejemplo en la siguiente figura se tiene el
diagrama de estados de un contador modulo 8.

B H

C G

D F

Figura 10: Diagrama de estados de un contador módulo 8.

Se pueden distinguir dos tipos de contadores:


- Síncronos: la entrada de pulsos actúa sobre todos los biestables del contador
- Asíncronos: la entrada de pulsos actúa sólo sobre uno de los biestables del contador

7.3.1 Contadores síncronos


Definición: un contador síncrono es un contador en el que la señal de pulsos se trata de
una señal de reloj, que actúa simultáneamente sobre todos los biestables del contador.

En este tipo de contadores las excitaciones de los biestables son función de sus propias
salidas, por lo que además de los biestables existe una lógica combinacional (figura 11).
Para su síntesis se sigue el procedimiento estándar de diseño de sistemas secuenciales
síncronos.
y0
... ... ...
ym-1
... ... ... ...

LCBm-1 ... LCB0 LCSn-1 ... LCS0

Em-1 E0 zn-1 z0
...
Bm-1 B0
Sm-1 S0

Rl

Figura 11: Esquema de un contador síncrono


Tema 7. Registros, Contadores y Memorias 143

Ejemplo: Diseñar un contador síncrono ascendente módulo 8 utilizando biestables JK.

Tenemos pues que diseñar un circuito que ante la llegada pulsos de reloj presente las
configuraciones 000, 001, 010, ... , 110, 111, 000, ..., de manera indefinida. Tenemos 8
estados diferentes, de modo que el diagrama de estados correspondería al de la figura
10. Para representar los 8 estados necesitamos 3 biestables obteniendo la asignación de
estados y tabla de transiciones siguiente:

Asignación de estados Tabla de transiciones


Estado y2y1y0 Estado Inicial Estado Siguiente
A 000 A B
B 001 B C
C 010 C D
D 011 D E
E 100 E F
F 101 F G
G 110 G H
H 111 H A
Figura 12: Asignación de estados y Tabla de transiciones
Dada la asignación de estados que hemos hecho, podemos hacer que las salidas de los
biestables (y2y1y0) sean las salidas del circuito total, con lo que obtendríamos la
siguiente tabla de excitaciones:

Tabla de excitaciones
y2y1y0 (n) y2y1y0 (n+1) J2K2 J1K1 J0K0
000 001 0- 0- 1-
001 010 0- 1- -1
010 011 0- -0 1-
011 100 1- -1 -1
100 101 -0 0- 1-
101 110 -0 1- -1
110 111 -0 -0 1-
111 000 -1 -1 -1
Figura 13: Tabla de excitaciones

Minimizando a partir de la tabla anterior se obtienen las siguientes ecuaciones para las
entradas de los biestables:

J2 = K2 = y1y0 J1 = K1 = y0 J0 = K0 = 1

Con lo que el circuito correspondiente al contador buscado sería el de la figura 14.


Tema 7. Registros, Contadores y Memorias 144

y0
y1
y2

J2 K2 J1 K1 J0 K0

y2 y1 y0

Rl

Figura 14: Circuito correspondiente a un contador ascendente módulo 8

Ejemplo: Diseñar un contador síncrono con biestables D que de a la salida y en binario


la secuencia de caracteres 5, 2, 3, 5, 0, 4, ... de forma continua en respuesta a los pulsos
de entrada.

Como vemos en este caso tenemos 6 estados, aunque como vemos sólo existen cinco
valores distintos de las salidas. Dado que existe una combinación de las salidas (la 5)
que se repite, la cual corresponde a dos estados diferentes, en este caso ya no podemos
hacer que las salidas del sistema sean igual a las salidas de los biestables.

La tabla de asignación de estados propuesta es la siguiente:

Asignación de estados
Estado y2y1y0
A 000
B 001
C 010
D 011
E 100
F 101
Figura 15: Tabla de asignación de estados

La tabla de transiciones y salidas (en decimal) quedaría:


Tema 7. Registros, Contadores y Memorias 145

Tabla de transiciones y salidas


y2y1y0
y2y1y0 (n) y2y1y0 (n+1)
(x = 1)
A B 5
B C 2
C D 3
D E 5
E F 0
F A 4
Figura 16: Tabla de transiciones y salidas (decimal)
Dicha tabla expresada en binario quedaría como sigue:

Tabla de transiciones y salidas


y2y1y0
y2y1y0 (n) y2y1y0 (n+1)
(x = 1)
000 001 101
001 010 010
010 011 011
011 100 101
100 101 000
101 000 100
110 000 ---
111 000 ---
Figura 17: Tabla de transiciones y salidas (binario)
En la tabla anterior se han añadido dos filas correspondientes a dos estados inexistentes
(el 110 y el 111). No obstante no está de más incluirlos por si la presencia de ruido
electrónico sitúa a los biestables en dicho estado. En caso de que eso ocurra y para
evitar ciclos erróneos (ver figura 18) se propone como salida de ellos el estado inicial
(el 000).

110 111 110

111

Figura 18: Posibles ciclos erróneos

Con esto el diagrama de estado del circuito quedaría como sigue:


Tema 7. Registros, Contadores y Memorias 146

110 111

000

001 101

010 100

011

Figura 19: Diagrama de estados del contador

Utilizamos biestables tipo D, de los cuales necesitaremos 3 al existir 6 estados, y tras


realizar la minimización por las técnicas que conocemos obtenemos las siguientes
ecuaciones para las salidas y las excitaciones de los biestables:

D2 = y2 y1 y0 + y2 y1 y0 D1 = y2 y1 y0 + y2 y1 y0 D0 = y2 y0 + y2 y1 y0
z2 = y2 y1 y0 + y1 y0 + y2 y0 z1 = y2 y1 y0 + y1 y0 z0 = y2 y0 + y1

El circuito resultante es el de la figura 20.

y0
y0
y1
y1
y2
y2

D2 D1 D0 z2 z1 z0

y2 y2 y1 y1 y0 y0

Rl

Figura 20: Circuito resultante


Tema 7. Registros, Contadores y Memorias 147

7.3.2 Contadores asíncronos


Definición: un contador asíncrono es un contador en el que la señal de pulsos se aplica
únicamente a uno de los biestables, mientras que sobre el resto actúan las salidas de los
otros biestables del circuito. Su lógica combinacional suele ser muy reducida.

Ejemplo: Analizar el siguiente contador asíncrono formado por 3 biestables tipo T


disparados por flanco de bajada:

T0 Q0 T1 Q1 T2 Q2

x Rl Rl Rl

Q0 Q0
Q1
(LSB) (MSB)

Figura 21: Contador asíncrono a analizar


Como vemos las tres entradas de excitación de los biestables están siempre a 1, por lo
que, dado que la ecuación del biestable T es yn +1 = yn ⊕ T se tiene que cada uno de los
biestables van a oscilar ( yn +1 = yn ⊕ 1 = yn ) controlándose dicha oscilación por la señal de
reloj correspondiente, que no es más que la salida del biestable anterior.
Con esto, y suponiendo inicialmente todos los biestables a 0, tenemos que si aplicamos
en x una señal de reloj obtenemos el cronograma de la figura 22.
000 001 010 011 100 101 110 111 000

Q0

Q1

Q2

Figura 22: Cronograma del contador asíncrono a analizar

Observamos que se trata por tanto de un contador ascendente módulo 8.

Aunque en el cronograma anterior se supone que no existe retardo en la propagación de


las señales a través de los biestables, en la realidad el cambio de estado de cada uno no
se produce de manera simultánea por lo que hay que leer la salida en conjunto tras el
producirse el cambio en el último de ellos, ya que en caso contrario puede leerse un
carácter erróneo.

Ejemplo: Analizar el siguiente contador asíncrono formado por 3 biestables tipo T


disparados por flanco de bajada:
Tema 7. Registros, Contadores y Memorias 148

T0 Q0 T1 Q1 T2 Q2

x Rl Rl Rl

(LSB) Q0 Q1 (MSB) Q 2

Figura 23: Contador asíncrono a analizar

Se deja como ejercicio el comprobar que se trata de un contador módulo 8 descendente.

7.4 Contadores obtenidos con registros de desplazamiento


Se van a utilizar los registros de desplazamiento como base para los tres siguientes tipos
de contadores:

- Contadores en anillo
- Contador Johnson
- Generadores de secuencias

7.4.1 Contadores en anillo


Definición: Un contador en anillo de longitud m es un registro de desplazamiento tipo
SISO en donde la señal del último biestable es conectada a la entrada del primero.
Contiene m-1 ceros y un 1 tal y como puede verse en la figura 24 para un contador en
anillo de longitud 5:

0 1 0 0 0 Q0

Figura 24: Contador en anillo de longitud 5 (m = 5)


Si cargamos inicialmente al contador anterior con la configuración inicial
Q4Q3Q2Q1Q0 = 10000 , tendremos que por cada pulso de reloj la información contenida
variará del siguiente modo:

t Q4Q3Q2Q1Q0
0 10000
1 01000
2 00100
3 00010
4 00001
Figura 25: Tabla de posibles configuraciones
Tema 7. Registros, Contadores y Memorias 149

Se denomina contador a este tipo de circuito, porque observando el biestable que


contiene el 1 sabremos cuantos pulsos de reloj han transcurrido (en módulo m).

Si expresamos la evolución de señal Q0 de la tabla anterior en forma de cronograma tal


y como puede verse en la figura 26, comprobamos que la frecuencia de la señal Q0 es 5
veces menor que la de la señal de reloj.

t0 t1 t2 t3 t4

Rl

Q0

Figura 26: Cronograma de la señal Q0

De manera general un contador en anillo de longitud m, puede verse como un divisor


por m de la frecuencia de una señal periódica:

f C = f Rl / m

con fc la frecuencia generada por el contador en anillo, y fRl la frecuencia de la señal de


reloj.
Se deja como ejercicio el escribir la tabla de posibles configuraciones y el cronograma
de la señal Q0 cuando se carga inicialmente el contador en anillo anterior con la
configuración Q4Q3Q2Q1Q0 = 01101 .

Es obvio que si las configuraciones iniciales hubieran sido 00000 o 11111 el contador
quedaría atrapado en ellas indefinidamente.

Comparando este tipo de contador en anillo con los vistos anteriormente ([a]síncronos)
observamos (suponemos que están formados por m biestables):

contador en anillo contadores [a]síncronos


contador módulo m contador módulo 2m
no necesita decodificador probablemente necesite un
a su salida decodificador a su salida
sencillo complejo
Figura 27: Comparación contadores en anillo con contadores [a]síncronos

7.4.2 Contadores Johnson


Definición: Se trata de un contador en anillo con salida invertida.

En la siguiente figura puede verse un contador Johnson de longitud 5.


Tema 7. Registros, Contadores y Memorias 150

Q0

Figura 28: Contador Johnson de longitud 5


Dada una configuración inicial del anillo, conforme llegan pulsos de reloj se pueden
generar 2m configuraciones diferentes. Si por ejemplo el anillo es cargado inicialmente
con 00000, la tabla de posibles configuraciones sería la siguiente:

t Q4Q3Q2Q1Q0
0 00000
1 10000
2 11000
3 11100
4 11110
5 11111
6 01111
7 00111
8 00011
9 00001
Figura 29: Tabla de configuraciones del contador Johnson del ejemplo
Esta misma tabla, pero leyendo los bits al revés da lugar al código Johnson, que se trata
de un código decimal progresivo.

Código Código
Decimal Johnson
0 00000
1 00001
2 00011
3 00111
4 01111
5 11111
6 11110
7 11100
8 11000
9 10000

Suponiendo que inicialmente el contador es cargado a 00000, el cronograma de la señal


Q0 sería como sigue:

t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10

Rl

Q0

Figura 30: Cronograma de la señal Q0


Tema 7. Registros, Contadores y Memorias 151

Como vemos, se trata de una onda que se repite cada 2m pulsos de reloj (al contrario del
contador en anillo que lo hacía cada m pulsos) por lo que se pueden utilizar este tipo de
circuitos como contadores módulo 2m.

7.4.3 Generadores de secuencias


Se ha obtenido en los apartados anteriores que, en el contador en anillo y en el contador
Johnson, la entrada x al registro de desplazamiento era una función de conmutación de
la salida. En concreto las funciones eran la función identidad para el caso del contador
en anillo y el complemento para el contador Johnson:

- Contador en anillo: x = f (Q0 ) = Q0


- Contador Johnson: x = f (Q0 ) = Q0

Una generalización de esto son los generadores de secuencias, en donde la función de


conmutación depende de todas las salidas de los biestables del registro de
desplazamiento.

Definición: Un generador de secuencias de longitud m es un registro de desplazamiento


tipo SISO donde la entrada serie es función de las salidas de todos los biestables que lo
componen. En la siguiente figura puede verse un esquema de un generador de
secuencias de longitud 5:

Q0

Q4 Q3 Q2 Q1 Q0

L.C.

Figura 31: Esquema de un generador de secuencias de longitud 5

Este tipo de circuitos sirven para generar una secuencia de bits predeterminada en
sincronía con una señal de reloj.

Los pasos para diseñar un generador de secuencias son los dos siguientes:

- Determinar la longitud m del registro de desplazamiento


- Obtener la función de conmutación f que proporcione la entrada: x = f(Q0,..., Qm-1)

Ejemplo: Diseñar un generador de secuencias que proporcione la secuencia de bits


0001.

Como tenemos cuatro estados (0, 00, 000, 0001), necesitaremos como mínimo 2
biestables. Dado que la base de nuestro circuito es un registro de desplazamiento y la
secuencia a generar (0001) se obtendrá de la salida Q0 del último biestable durante
cuatro pulsos de reloj, la tabla de configuraciones será la siguiente:
Tema 7. Registros, Contadores y Memorias 152

t Q0Q1
0 00
1 00
2 01
3 10

Como se ve se tienen cuatro estados distintos, y sólo tres configuraciones distintas, de


modo que en este caso no es posible representar cuatro estados distintos con sólo dos
biestables. Añadiendo un tercer biestable obtenemos el circuito siguiente:

f (Q 0 , Q1 , Q 2 ) Q0

Q2 Q1 Q0

f (Q0 , Q1 , Q 2 )

De modo que la tabla ampliada de configuraciones sería la siguiente:


t Q0Q1Q2 f
0 000 1
1 001 0
2 010 0
3 100 0

Gráficamente corresponderían a las siguientes 4 situaciones:

1 0 0 0 0 0 1 0 0 0

t=0 t=1

f (Q0 , Q1 , Q 2 ) f (Q0 , Q1 , Q 2 )

0 0 1 0 0 0 0 0 1 1

t=2 t=3
f (Q0 , Q1 , Q 2 ) f (Q0 , Q1 , Q 2 )

Hasta ahora sabemos los valores que debe tomar f en los casos conocidos. Para terminar
hay que dar valores adecuados a f para los estados erróneos con el fin de evitar los
ciclos erróneos.

Q0Q1Q2 f
000 1
Tema 7. Registros, Contadores y Memorias 153

001 0
010 0
011 -
100 0
101 -
110 -
111 -
Figura 32: Tabla verdad de la función f

El valor más sencillo de determinar es f(1,1,1), que debe ser 0, ya que un valor
f(1,1,1)=1 metería al circuito en un ciclo erróneo.

Los otros tres hay que determinarlos uno a uno eligiendo salidas que lleven
directamente (si es posible) a un estado correcto, o en su defecto indirectamente a través
de otro estado erróneo. En el caso del ejemplo se tiene:

- Si el estado es Q0Q1Q2=011 entonces tenemos dos posibilidades f=0 y f=1:


o si f=0 el estado siguiente es el 110 (figura 33)
o si f=1 el estado siguiente es el 111 (figura 34)

Estado: 011 Estado: 110

0 1 1 0 0 1 1

Q2 Q1 Q0

f (Q0 , Q1 , Q 2 )

Figura 33: Transición del estado 011 al 110 si f=0

Estado: 011 Estado: 111

1 1 1 0 1 1 1

Q2 Q1 Q0

f (Q 0 , Q1 , Q 2 )

Figura 34: Transición del estado 011 al 111 si f=1

- Si el estado es Q0Q1Q2=101:
o si f=0 el estado siguiente es el 010 (estado correcto)
o si f=1 el estado siguiente es el 011

- Si el estado es Q0Q1Q2=110:
o si f=0 el estado siguiente es el 100 (estado correcto)
o si f=1 el estado siguiente es el 101
Tema 7. Registros, Contadores y Memorias 154

De estas dos últimas posibilidades elegimos f=0 por llevar a estados correctos
directamente. De la primera elegimos la salida f=0 por llevar a un estado correcto en
menos pasos (011110100) que con f=1 (011111110100).

La tabla verdad de la figura 32 quedará explicitada concretada en la siguiente:

Q0Q1Q2 f
000 1
001 0
010 0
011 0
100 0
101 0
110 0
111 0
Figura 35: Tabla verdad final

La función de conmutación del generador de secuencias es entones: f = Q0Q1Q2


El circuito final es el siguiente:

x
Q2 Q2 Q1 Q1 Q0 Q0

Figura 36: Circuito generador de la secuencia 0001

7.5 Memorias RAM


Definición: Una memoria RAM se trata de una memoria de acceso aleatorio (directo, no
secuencial) que permite lectura y escritura.

Está formada por los siguientes elementos (figura 37):


- 2n · m celdas elementales de almacenamiento
- n entradas de dirección: d0 ... dn-1
- m entradas de datos: x0 ... xm-1
- p entradas de control: c0 ... cp-1
- m salidas de datos: z0 ... zm-1
Tema 7. Registros, Contadores y Memorias 155

c
p

d n

2n · m
z
celdas m

x m

Figura 37: Esquema general de una memoria ROM

Se denomina de “acceso aleatorio” en el sentido de que cualquier palabra de la memoria


puede ser accedida en cualquier momento, independientemente de la palabra a la que se
haya accedido anteriormente. Las memorias ROM (memorias de sólo lectura) son en
este sentido también memorias de acceso aleatorio, por lo que quizás sería más
conveniente la denominación “memorias de lectura y escritura”.

En este tipo de memorias la lectura de los datos es no destructiva, es decir, los datos se
pueden leer tantas veces como se desee.

Otro tipo de memorias son las memorias de acceso secuencial, que son aquellas en las
que sólo se puede acceder a una posición determinada de la memoria en un momento
dado. Dicha posición puede además variar dependiendo de si la operación va a ser de
lectura o escritura.

7.5.1 Celda elemental de memoria


Una celda elemental de una memoria RAM estará formada por los siguientes 4
terminales (ver figura 38):

- Un terminal E para la entrada de información


- Un terminal L para la lectura de información
- Un terminal SP para la selección de la celda
- Un terminal LE para indicar si la operación es de lectura o escritura ( LE =1 para
indicar que es una operación de escritura y LE = 0 para operación de lectura)
Tema 7. Registros, Contadores y Memorias 156

SP

Celda básica
E de memoria L
(1 bit)

LE
Figura 38: Esquema de una celda elemental de memoria RAM

Cuando SP=1 se activa la celda de memoria para habilitar operaciones de lectura o


escritura sobre ellas. Una vez activa mediante LE se indica si se trata de una operación
de lectura ( LE =0) o escritura ( LE =1).

A partir de estos elementos de memoria elementales se pueden construir las memorias


de mayor tamaño, con el procedimiento seguido en el siguiente ejemplo.

Ejemplo: Construir una memoria RAM de 4 palabras de 3 bits (4x3).

Necesitaremos los siguientes componentes:

- Un decodificador 2 a 4 para seleccionar la palabra de memoria a leer/escribir


- 22 · 3 = 12 celdas elementales de memoria

En la figura 39 puede verse que la señal de lectura/escritura LE se aplica a todas las


celdas de modo que no puede leerse y escribirse a la vez en distintas zonas de memoria.
Por otro lado la señal de habilitación de las celdas SP actúa sobre buffers triestado, que
son componentes de memoria que transmiten la señal cuando están activos (SP=1).

El funcionamiento es como sigue: a través del decodificador de direcciones se


selecciona una de las palabras de la memoria, según el valor de las señales de dirección.
En segundo lugar se activan las celdas de dicha palabra mediante la señal SP, que hace
que si estamos en una operación de escritura se graben los datos e2e1e0 en la dirección
de memoria seleccionada, o si se trata de una operación de lectura, que se vuelque la
información almacenada en dicha palabra a las salidas s2s1s0.
Tema 7. Registros, Contadores y Memorias 157

s0 s1 s2

SP

0,0 0,1 0,2

1,0 1,1 1,2


d0
d1
2,0 2,1 2,2

3,0 3,1 3,2

SP LE

e0 e1 e2
Figura 39: Memoria RAM de 4 palabras de 3 bits

La memoria anterior puede esquematizarse como sigue:

SP LE

d0
d1
s0
RAM (4x3) s1
e0 s2
e1
e2

Figura 40: Esquema de una memoria RAM 4x3

7.5.2 Expansión de memorias RAM


Es posible construir memorias RAM mayores a partir de otras de menor tamaño,
existiendo las siguientes posibilidades de ampliación:

- Aumentar el número de bits por palabra


- Aumentar el número de palabras (o lo que es lo mismo, aumentar el número de bits
de dirección)
- Ambas cosas
Tema 7. Registros, Contadores y Memorias 158

Ejemplo: Construir una memoria RAM de 4 palabras de 3 bits a partir de pastillas de


memoria de 4 palabras de 1 bit.

En primer lugar se necesitan como es obvio tres pastillas de palabras de 1 bit. Para
construir la memoria pedida no hay más que hacer comunes a las tres pastillas las
señales de control y las de dirección. Las entradas para escritura y lectura de datos serán
individuales de cada pastilla. Con estas directrices se obtiene la memoria buscada, tal y
como puede verse en la figura 41:

SP
LE

e0 RAM (4x1) s0 e1 RAM (4x1) s1 e2 RAM (4x1) s2

d0
d1

Figura 41: Memoria RAM 4x3 construida a partir de pastillas RAM 4x1

Ejemplo: Construir una memoria RAM de 16 palabras de 3 bits a partir de pastillas de


memoria RAM de 4 palabras de 3 bits.

En este caso lo que estamos es, ya no cambiando la arquitectura (cambiar el tamaño de


la palabra de memoria), sino aumentando el tamaño total de memoria, es decir, añadir
nuevos bits de dirección para poder direccionar la nueva memoria. En este caso se ha de
pasar de 4 palabras (2 bits de dirección) a 16 palabras (4 bits de dirección) por lo que se
necesita añadir dos nuevos bits de direccionamiento. Además estamos cuadriplicando el
número de palabras, por lo que necesitaremos 4 pastillas de 4x3.

El procedimiento para este tipo de aumento de memoria es el siguiente:

- Utilizar un decodificador para seleccionar una de las cuatro pastillas de memoria de


4x3. La entrada al decodificador serán las nuevas señales de dirección, y las salidas
irán a la entrada de control SP de cada una de las pastillas.
- El resto de señales será común a las cuatro pastillas.

Con este procedimiento se obtiene la memoria ampliada que puede verse en la figura
42.
Tema 7. Registros, Contadores y Memorias 159

d2 d3

SP SP
SP SP

LE

RAM (4x3) RAM (4x3) RAM (4x3) RAM (4x3)

d0 d1
e0 e1 e2
s0 s1 s2

Figura 42: Memoria RAM de 16x3 construida a partir de pastillas RAM 4x3

Por último señalar que combinando las dos técnicas anteriores se puede aumentar tanto
la arquitectura de la memoria RAM como su tamaño.

7.5.3 Decodificación bidimensional


Con el esquema de memoria de la figura 39, es decir con el uso de un único
decodificador para las direcciones de memoria se obtienen circuitos en lo que
predomina una dimensión sobre la otra, siendo por tanto más complejos de construir en
el silicio (figura 43).

d0
d1
d2
d3

Figura 43: Memoria de 16 bits (16x1) con decodificación unidimensional


Por ello suelen disponerse las celdas de memoria en filas y columnas accedidas a través
de dos decodificadores (decodificador de fila y decodificador de columna). Con esto se
Tema 7. Registros, Contadores y Memorias 160

obtienen circuitos mucho más simétricos y por tanto fáciles de implementar en las
pastillas de silicio.

Ejemplo: Diseñar la memoria 16x1 de la figura 43 con dos decodificadores 2 a 4.

La solución sería por tanto la de la figura 44. En ella con los bits de dirección d0 yd1 se
selecciona una de las 4 filas de la matriz de celdas, y con d2 y d3 la celda
correspondiente dentro de esa fila.
d2 d3

d0
d1

Figura 44: Memoria de 16 bits (16x1) con decodificación bidimensional

No debe olvidarse que aunque las celdas estén dispuestas en formato de filas y
columnas, en realidad sigue siendo una memoria de 16 palabras de 1 bit (no 4 palabras
de 4 bits).

Por otro lado desde el punto de vista funcional no hay ninguna diferencia entre
memorias que usen uno u otro tipo de decodificación.

7.6 Memorias LIFO (Pila)


Definición: Una memoria LIFO (Last Input First Output) es una memoria de acceso
secuencial con un único punto de acceso tanto para lectura como para escritura.

Una memoria LIFO de longitud m esta formada por (figura 45):

- m palabras de n bits
- n entradas de datos
- p entradas de control
- n salidas de datos

Funcionamiento: El funcionamiento de una memoria LIFO es el de una estructura de


datos tipo pila, es decir, un estructura en la que el último dato en entrar es el primero en
salir. Es por ello por lo que a este tipo de memoria se le denomina también “memorias
pila”.

La lectura de datos en las memorias LIFO es destructiva, de modo que una vez leído un
dato, éste desaparece.
Tema 7. Registros, Contadores y Memorias 161

e s

n n

· m palabras
c ·
p ·

n bits

Figura 45: Esquema de una memoria LIFO

Existen dos formas de implementar este tipo de memorias:


a) con registros de desplazamiento
b) con memoria RAM

7.6.1 Memorias LIFO con registros de desplazamiento


Utilizando n registros de desplazamiento de longitud m con desplazamiento a izquierda
y derecha (controlado a través de una señal de control) se puede construir una memoria
LIFO de m palabras de n bits.

La escritura se hace sobre la palabra 0 y antes de introducir un dato hay que desplazar
todas las palabras a la derecha. A esta operación se la denomina “apilamiento”. Para
indicar que el desplazamiento sea hacia la derecha se activa la señal de control D I = 1 .

La lectura se hace de manera análoga sobre la palabra 0. Tras leer la palabra hay que
desplazar todas las demás palabras hacia la izquierda (haciendo D I = 0 ) en la
operación que denominada “desapilamiento”.

En caso de que se introduzcan más de m palabras se producirá desbordamiento, es decir,


las primeras palabras introducidas se perderán. El desbordamiento hay que controlarlo
externamente a la pila impidiendo que se introduzcan más palabras una vez llena la pila.

7.6.2 Memorias LIFO con memoria RAM


Otra posible implementación de una memoria LIFO es mediante el uso de una memoria
RAM junto a un contador ascendente-descendente para acceder a la dirección de
memoria a leer o escribir. Para controlar que el contador cuente ascendente o
descendentemente deberá existir una señal de control AD .
Tema 7. Registros, Contadores y Memorias 162

e0 e1 e2
s0 s1 s2

DI
Figura 46: Memoria LIFO de 8 palabras de 3 bits construida con registros de desplazamiento

El funcionamiento de esta memoria sería el siguiente:

- Operación de escritura:
1º) Incrementar el contador ( AD = 1 )
2º) Escribir en la dirección de memoria a la que apunta el contador

- Operación de lectura:
1º) Leer el dato apuntado por el contador
2º) Decrementar el contador ( AD = 0 )

Memoria RAM

AD

·
Contador ·
·

Figura 47: Memoria LIFO construida a partir de una memoria RAM

7.7 Memorias FIFO (Cola)


Definición: Una memoria FIFO (First Input First Output) es una memoria de acceso
secuencial con dos puntos de acceso, uno para lectura y otro para escritura.
Tema 7. Registros, Contadores y Memorias 163

Una memoria FIFO de longitud m esta formada por (figura 48):

- m palabras de n bits
- n entradas de datos
- p entradas de control
- n salidas de datos
e

· m palabras
c ·
p ·

s
n bits

Figura 48: Esquema de una memoria FIFO

Funcionamiento: El funcionamiento de una memoria FIFO es el de una estructura de


datos tipo cola, es decir, un estructura en la que el primer dato que entró es el primero
en salir. Es por ello por lo que a este tipo de memoria se le denomina también
“memorias cola”.

La lectura de datos en las memorias FIFO es, al igual que en las LIFO, destructiva.

Al igual que con las memorias LIFO existen dos formas de implementar este tipo de
memorias:
a) con registros de desplazamiento
b) con memoria RAM

7.7.1 Memorias FIFO con registros de desplazamiento


Utilizando n registros de desplazamiento de longitud m con desplazamiento a la derecha
(controlado a través de una señal de control) se puede construir una memoria FIFO de m
palabras de n bits.

La escritura es igual que en la memoria LIFO, sobre la palabra 0 y también antes de


introducir un dato hay que desplazar todas las palabras a la derecha.

La lectura se hace sobre la cabecera de la cola, la cual dependerá del número de


palabras insertadas, y por tanto se trata de una posición variable. Para conocer esta
cabecera es necesario un contador que se incremente con cada operación de escritura y
se decremente con cada lectura. La selección de la palabra a leer puede hacerse
Tema 7. Registros, Contadores y Memorias 164

mediante multiplexores con tantas entradas como longitud tengan los registros de
desplazamiento (figura 49).
e0 e1 e2

Contador

s0 s1 s2

Figura 49: Memoria FIFO de 8 palabras de 3 bits construida con registros de desplazamiento

7.7.2 Memorias FIFO con memoria RAM


Otra posible implementación de una memoria FIFO es mediante el uso de una memoria
RAM junto a dos contadores ascendentes:

- Un contador CE para generar la dirección de memoria de la palabra a escribir


- Un contador CL para generar la dirección de memoria de la palabra a leer

El funcionamiento sería como sigue:

- Operación de escritura:
1º) Incrementar el contador CE
2º) Escribir el dato en la posición indicada por CE

- Operación de lectura:
1º) Leer el dato apuntado por el contador CL
2º) Decrementar el contador CL

Destacar que cuando CL=CE la memoria estará vacía y cuando exista algún dato se
tendrá que CE>CL.
Tema 7. Registros, Contadores y Memorias 165

Memoria RAM
Escritura

CE

·
·
·

Lectura

CL

Figura 50: Memoria FIFO construida a partir de una memoria RAM

You might also like