Circuitos y Sistemas Digitales by olliegoblue26

VIEWS: 5,324 PAGES: 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.

                  V




                                                                                  t

                                      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+xy            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+xy=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            xyz              m7
                                                         Tema 3. Funciones de conmutación   49

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

                  x


                  y


                  z


                 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            M2
                         011          x+ y +z            M3
                         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.

                           x


                           y


                           z


                           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
                              1         2
                                        8
                              2         3
                                        5
                                       10
                              3         7
                                       11
                                       13
                                       22
                              4        15
                                       29
                                       30

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
                         0-8 (8)              0-000
                         2-3 (1)              0001-
                        2-10 (8)              0-010
                        8-10 (2)              010-0
                         3-7 (4)              00-11
                        3-11 (8)              0-011
                         5-7 (2)              001-1
                        5-13 (8)              0-101
                       10-11 (1)              0101-
                        7-15 (8)              0-111
                       11-15 (4)              01-11
                       13-15 (2)              011-1
                      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.


             0      2     3     5     7       8   10    11     13    15    22     29        30
       a                        x     x                         x     x
       b                  x           x                  x            x
       c            x     x                        x     x
       d     x      x                         x    x
       e                                                                    x               x
       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
( ) 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)


            0    1       4       7   9       11       12       13   16   20   21   25     27   28    29       31
     a                                                                              x      x          x        x
     b                                                                   x    x                 x    x
     c                                                x        x                                x     x
     d                               x                         x                   x                 x
     e                               x       x                                     x      x
     f                   x                            x                  x                      x
     g      x            x                                           x   x
     h           x                   x
     i      x    x
     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



                  x



                  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.

                                                    A


                                        B                          H




                                   C                                    G




                                         D                        F

                                                    E

                      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




                                                                         1




                   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

x



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 (011 110 100) que con f=1 (011 111 110 100).

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

                                                  n




                                              ·           m palabras
                             c                ·
                                  p           ·




                                                  n

                                             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




                              D

                              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

								
To top