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 0 1 2 3 4 5 6 7 8 9 10 2n 1 2 4 8 16 32 64 128 256 512 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 0 1 2 3 4 5 6 7 binario 000 001 010 011 100 101 110 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 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 1 2 3 4 5 6 7 8 9 A B C D E F 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 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 0-0=0 0-1=1 1-0=1 1-1=0

Adeudo 0 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 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 SM C2 +0 +1 +2 +3 +4 +5 +6 +7 -8 -7 -6 -5 -4 -3 -2 -1 C1

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

-7 -6 -5 -4 -3 -2 -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 0 Signo Bits en binario natural Módulo Números negativos

1 Signo

Bits en binario natural

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 0 Signo Bits como en SM Módulo
1 Signo

Números negativos
Bits invertidos + 1 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 0 Signo Bits como en SM Módulo Números negativos

1 Signo

Bits invertidos 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 0 NUL DLE SP 0 @ P ` p 1 SOH DC1 ! 1 A Q a q 2 STX DC2 " 2 B R b r 3 ETX DC3 # 3 C S c s 4 EOT DC4 $ 4 D T d t 5 ENQ NAK % 5 E U e u 6 ACK SYN & 6 F V f v 7 BEL ETB ' 7 G W g w 8 BS CAN ( 8 H X h x 9 HT EM ) 9 I Y i y A LF SUB * : J Z j z B VT ESC + ; K [ k { C FF FS , < L \ l | D CR GS = M ] m } E SO RS . > N ^ n ~ F SI US / ? O _ o 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.

0 1 2 3 4 5 6 7 8 9 DEC 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 BCD 10 11 12 13 14 15 DEC 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 La solución es la siguiente: a) b) b) 5 + 6 c) 8 + 9

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 0 1 2 3 4 5 6 7 Decimal 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 1

1 1 0

0 1 1 0

BIN BIN>>1

1

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

1

0

1

Gray

1
1

0

1

1

0

Binario

1⊕ 0 0 ⊕ 1 1 ⊕ 1 1⊕ 0

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: 0 1 2 3 4 5 6 7 8 9 DEC 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 P1 P2 P4 P8 Bits de datos D3, D5, D7, D9, D11, D13, D15 D3, D6, D7 D10, D11, D14, D15 D5, D6, D7 D12, D13, D14, D15 D9, D10, D11 D12, D13, D14, D15 Valores 0, 1, 0, 0, 1, 0, 0 0, 1, 0, 1, 1, 0, 0 1, 1, 0, 0, 0, 0, 0 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 0 0 1 0 1 Producto Lógico + 0 1 0 0 1 1 1 1 Suma Lógica A A 0 1 1 0 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 + * A

1 0 * + A

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

2.2 Leyes del Álgebra de Boole
Regla I) Leyes conmutativas II) Leyes asociativas III) Leyes distributivas IV) Elementos neutros V) Leyes de anulación VI) Leyes tautológicas VII) Leyes de complementación VIII) Leyes de absorción A+ AB = A+ B IX) Teoremas de DeMorgan
A+ B = A·B

Forma normal A+B = B+A (A+B) + C = A + (B+C)

Forma dual AB = BA (A · B) · C = A · (B · C)

A (B+C) = (AB) + (AC) A + (BC) = (A+B)(A+C) A+0=A A+1=1 A+A=A A+ A = 1 A + AB = A A·1=A A·0=0 A·A=A
A·A = 0

A (A + B) = A A(A + B) = AB
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 . . . Xn
. . .

z1 Circuito de conmutación
. . .

n

. . . zm

m

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 y Circuito de conmutación z2 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 00 01 10 11 z1 0 1 1 1 z2 0 0 0 1 z3 0 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
1 0

x
x
Cronograma

x
Símbolo

x

0 1

Tabla verdad

Tema 2. Álgebra de Boole

39

b) Puerta AND. Características:

x y xy
x
y
0 0 0 0 0 1

x
y
xy
Cronograma

xy

0 1 1 0 1 1

Símbolo

Tabla verdad

b) Puerta OR. Características:

x y x+ y
x
y
0 0 0 1 1 1

x
y

x+ y

0 1 1 0 1 1

x+ y
Cronograma

Símbolo

Tabla verdad

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 Combinaciones de apagado

AB = 11

A

B

A

B

AB = 01 Combinaciones de encendido

AB = 11

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 00 01 10 11 z1 0 1 1 1 z2 0 0 0 1 z3 0 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 y z1
z2
z3
a) Cronograma

xy z1
z2
z3
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: Función f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 f13 f14 f15 Ecuación 0 xy xy x xy y x ⊕ y = xy + xy x+ y
x+ y = x⋅y x y=x y+xy y x+ y x x+y

Nombre

xy = x + y 1

00 Nula 0 AND 0 0 0 0 0 EXOR 0 OR 0 NOR 1 EXNOR 1 1 1 1 1 NAND 1 Unidad 1

Salida 01 10 0 0 0 0 0 1 0 1 1 0 1 0 1 1 1 1 0 0 0 0 0 1 0 1 1 0 1 0 1 1 1 1

11 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 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
y
0 0 0 0 0 1

x
y
f
Cronograma

f ( x, y ) = xy

0 1 1 0 1 1

Símbolo de la puerta

Tabla verdad

b) Función NOR

x y f
x
y
0 0 1 0 0 0

x
y
f
Cronograma

f (x, y) = x + y

0 1 1 0 1 1

Símbolo de la puerta

Tabla verdad

c) Funciones de inhibición

x y f
x
y
0 0 0 0 1 0

x
y
f
Cronograma

f ( x , y ) = xy

0 1 1 0 1 1

Símbolo de la puerta

Tabla verdad

x y f
x
y

x
y
f
Cronograma

f ( x, y ) = xy

0 0 0 1 1 0 1 1

0 1 0 0

Símbolo de la puerta

Tabla verdad

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
y
0 0 0 1 1 1

x
y
f
Cronograma

f ( x, y) = x + y

0 1 1 0 1 1

Símbolo de la puerta
b) Función NAND

Tabla verdad

x y f
x
y
0 0 1 1 1 0

x
y
f
Cronograma

f ( x , y ) = xy

0 1 1 0 1 1

Símbolo de la puerta
c) Funciones de implicación

Tabla verdad

x y f
x
y
0 0 1 0 1 1

x
y
f
Cronograma

f ( x, y ) = x + y

0 1 1 0 1 1

Símbolo de la puerta

Tabla verdad

x y f
x
y
0 0 1 1 0 1

x
y
f
Cronograma

f ( x, y ) = x + y

0 1 1 0 1 1

Símbolo de la puerta

Tabla verdad

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
y
0 0 0 1 1 0

x
y
f
Cronograma

f ( x, y ) = x ⊕ y

0 1 1 0 1 1

Símbolo de la puerta

Tabla verdad

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

x y f
x
y
0 0 1 0 0 1

x
y
f
Cronograma

f ( x, y ) = x

y

0 1 1 0 1 1

Símbolo de la puerta

Tabla verdad

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 xyz m0 000 xyz m1 001 x yz m2 010 x yz m3 011 xyz m4 100 xyz m5 101 xyz m6 110 xyz 111 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 x+ y+z M0 000 x+ y+z M1 001 x+ y +z M2 010 x+ y +z M3 011 x + y+z M4 100 x + y+z M5 101 x+y+z M6 110 x+y+z M7 111

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 000 001 010 011 100 101 110 111 x+ y+ z 0 0 1 0 1 0 1 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) b) c) d)
f ( x, y ) = xy + xy f ( x, y , z ) = x y z + x y z + x y z f ( a, b, c, d ) = Σm(2,3, 4, 6,8,12,14) + d (0,13,15) 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 x 0
0

0

1

1
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 x 0 00 01 11 10

1
0 1 3 2

1
4

1
5

1
7 6

c) El MK (de 4 variables) que representa a la función de conmutación será:
cd ab 00
0 1

00

01

11

10

1
3

1
2

01

1
4 5 7

1
6

11

1
12 13 15

1
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 ab 00
0 1 3

000

001

011

010 1
2

110 1
6

111

101

100 1

7

5

4

01
8 9 11 10 14 15 13 12

11
24

1
25 27 26

1
30 31 29 28

10
16 17 19

1
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 ab 00
0 1

00

01

11

10

1
3 2

01
4

1
5

1
7

1
6

11
12

1
13 15 14

10
8

1
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 ab 00
0 1

00

01

11

10

1
3 2

01
4

1
5

1
7

1
6

11
12

1
13 15 14

10
8

1
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 ab 00
0 1

00

01

11

10

1
3 2

01
4

1
5

1
7

1
6

C

11
12

1
13 15 14

10
8

1
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 1001 1101 0111 0011 0111 0110 0101 0111 abcd 1–01 0–11 011–
acd acd

A B C

abc

D

01–1

abd

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 ab 00
0 1

00

01

11

10

0
3 2

01
4

0
5

0
7

0
6

C

11
12

0
13 15 14

10
8

0
9 11 10

D A

Tras lo cual las adyacencias serían los siguientes: abcd 1001 1101 0111 0011 0111 0110 0101 0111 abcd 1–01 0–11 011– 01–1
a +c+d a+c +d a+b +c a+b +d

A B C D

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
cd ab 00
0

acd
00 01 11 10

cd 00 01 11 10 ab 00
3 2 0

1
1

1

1
1 3 2

01
4

1
5

1
7 6

01
4

1
5 7 6

ab

11
12 13

1
15

1
14

11

1
12

1
13

1
15

1
14

10
8 9

1
11

1
10

ac

10
8 9 11

1
10

acd

f = a d +ac

g = a c d + ab + acd

- Minimizando de manera conjunta:
acd
cd ab 00
0

acd
cd 10 ab 00 00 01 11 10

00

01

11

1
1

1
3 2

1
0 1 3 2

01
4

1
5

1
7 6

cd
1
15 14

01
4

1
5 7 6

ab

11
12 13

1

11

1
12

1
13

1
15

1
14

10
8 9

1
11

1
10

acd

10
8 9 11

1
10

acd

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 Por separado En conjunto

g f/g Total 2 AND(3) 2 AND(2) 1 AND(2) 7 (2,43) 1 OR (2) 1 OR(3) 1 AND(2) 1 AND(2) 2 AND(3) 6 (2,67) 1 OR(3) 1 OR(3)

f

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 2 1 8 3 2 5 10 7 3 11 13 22 15 4 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) 00012-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) 01017-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-013-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 2 2 2 2 1 1 Adyacencia 5-7-13-15 3-7-11-15 2-3-10-11 0-2-8-10 22-30 13-29

a b c d e 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 a b c d e f

2

3 x x

5 x

7 x x

8

10

11 x x

13 x

15 x x

22

29

30

x

x x

x

x x

x x 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

a b c d e f

= = = = = =

x 0 0 0 0 1 -

y – – – – 1

z 1 0 0 1 1

u – 1 1 – 1 0

v 1 1 0 0 1

= = = = = =

x’z v x’u v x’z’u x’z’v’ x z u v’ 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 a b c d e f g h i j

1

4

7

9

11

12

13

16

20 x

21 x

25 x

27 x

28 x x

x x x x x x x x x x x x x

x x x x

x x x

29 x x x x

31 x

x x

La tabla de implicantes reducida quedaría como sigue: 1 c d f h i 12 x x x x 13 x 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 x x 1 x x x x x 4 x x x x x 9 12 13

a b c d e f

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 x 0 00 01 11 10

1
000 001 011 010

1

1
100

1
101

1
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 x 0 1 y 0 1 y' 0 1 z 0 1 z' 0 1 P2 0 1 P1 0 1 f 0 f 0 P1 0 1 P2 0 1 z' 0 1 z 0 1 y' 0 1 y 0 1 x 0 1 1

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 1

01

11

10

00 01 11 10

1 1 1 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 1

01

11

10

00 01 11 10

1 1 1 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 1

01

11

10

00 01 11 10

1 1 1 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

0

1

0

1

1 0 1 1 + 0 1 1 1
Paso 1

1 0 1 1 + 0 1 1 1
Paso 2

1 0 1 1
+
+

1 0 1 1 0 1 1 1
Paso 8

0 1 1 1
Paso 5

0

0 0
0

1 1 0
1 0

1 0 1 0
1

1

1

1

1 0

1 0 1 1 + 0 1 1 1
0 0
1 0
Paso 3

1 0 1 1
+

1 0 1 1
+

0 1 1 1
1 1 0
0 1 0
Paso 6

0 1 1 1
1 1 1 0
0 0 1 0

Paso 9

1

1

0 1

1 0

1 0

1 0 1 1 + 0 1 1 1
1 0
Paso 4

+

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

1 0 1 1 0 1 1 1
1 0 0 1 0
Paso 10

Paso 7

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 00 01 10 11 si ai 00 10 10 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 a000 001 010 011 100 101 110 111 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: s a+ 00 10 10 01 10 01 01 11

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 0 1 0 1 1 0 1 1 0 0 0 1 1 0 1 0 1 1 1 0 0 1 1 1 1 1 0 0 0 0 1 0 0 0 1 1 0 0 1 0 (10) (11) (12) (13) (14) (15) (16) (17) (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 0 0 0 0 1 1 1 1 y 0 0 1 1 0 0 1 1 d0 1 0 1 0 1 0 1 r 0 1 1 0 1 0 0 1 d+ 0 1 1 1 0 0 0 1 (0 – 0) (0 – 01) (0 – 1) (0 – 11) (1 – 0) (1 – 01) (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 0 0 1 1 de donde obtenemos: y 0 1 0 1 x>y 0 0 1 0 x=y 1 0 0 1 x<y 0 1 0 0

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-10. 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 0 0 1 1 y ⊕ Paridad 0 0 Par 1 1 Impar 0 1 Impar 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. p Los decodificadores binarios son aquellos en los que q = 2 . En ellos cada combinación 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 x2 x1 0 0 0 0 0 1 0 1 1 0 1 0 1 1 1 1 0 0 Salidas z5 z4 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0

x3 0 0 0 0 0 0 0 0 1

x0 0 1 0 1 0 1 0 1 0

z9 0 0 0 0 0 0 0 0 0

z8 0 0 0 0 0 0 0 0 1

z7 0 0 0 0 0 0 0 1 0

z6 0 0 0 0 0 0 1 0 0

z3 0 0 0 1 0 0 0 0 0

z2 0 0 1 0 0 0 0 0 0

z1 0 1 0 0 0 0 0 0 0

z0 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 x2 x1 x0 Dígito a b c d e f g 0 0 0 0 1 1 1 1 1 1 0 0 0 1 1 0 1 1 0 0 0 0 0 1 0 2 1 1 0 1 1 0 1 0 1 1 3 1 1 1 1 0 0 1 1 0 0 4 0 1 1 0 0 1 1 1 0 1 5 1 0 1 1 0 1 1 1 1 0 6 1 0 1 1 1 1 1 1 1 1 7 1 1 1 0 0 1 0 0 0 0 8 1 1 1 1 1 1 1 0 0 1 9 1 1 1 1 0 1 1

x3 0 0 0 0 0 0 0 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 000 001 010 011 100 101 110 111 F 1 0 0 0 1 0 1 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 1 1 1 0 0 1 1 0 1 0 1 0 0 1 0 0 1 1 1 0 1 1 1 1 0 0 1 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 10 10 01 01 Q n Qn 10 01 10 01 Q n +1 Qn +1 01 01 10 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 00 01 10 11 Q n +1 Qn +1 11 10 01 Q n Qn

A evitar AB Reposo

Otra posible combinación es utilizando puertas NOR:

Puede comprobarse (se deja como ejercicio) que: MN 00 01 10 11 Q n +1 Qn +1 Q n Qn 10 01 00 Reposo MN 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 QnSR 000 001 010 011 100 101 110 111 Qn+1 0 0 1 * 1 0 1 * QnJK 000 001 010 011 100 101 110 111 JK Qn+1 0 0 1 1 1 0 1 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 0 1 Qn+1 0 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 asíncronas)

B0

B1

B2

B3

Salidas (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 Qm-1

Dm-2 Qm-2

...

D1 Q1

D0 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 x D3 Q3 D2

Pr Q2 D1

Pr Q1 D0

Pr Q0 z

Rl Cl

Rl Cl

Rl Cl

Rl 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 E

F

Figura 10: Diagrama de estados de un contador módulo 8.

Se pueden distinguir dos tipos de contadores: - Síncronos: la entrada de pulsos actúa sobre todos los biestables del contador - Asíncronos: la entrada de pulsos actúa sólo sobre uno de los biestables del contador

7.3.1 Contadores síncronos
Definición: un contador síncrono es un contador en el que la señal de pulsos se trata de una señal de reloj, que actúa simultáneamente sobre todos los biestables del contador. En este tipo de contadores las excitaciones de los biestables son función de sus propias salidas, por lo que además de los biestables existe una lógica combinacional (figura 11). Para su síntesis se sigue el procedimiento estándar de diseño de sistemas secuenciales síncronos.
... ... ... ... ... ... ... y0 ym-1

LCBm-1

...

LCB0

LCSn-1

...

LCS0

Em-1

...

E0

zn-1

z0

Bm-1
Sm-1

B0
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 001001 010 01-1 010 011 0-0 1011 100 1-1 -1 100 101 -0 01101 110 -0 1-1 110 111 -0 -0 1111 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 000

111

001

101

010 011

100

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 z2 = y2 y1 y0 + y1 y0 + y2 y0 D1 = y2 y1 y0 + y2 y1 y0 z1 = y2 y1 y0 + y1 y0 D0 = y2 y0 + y2 y1 y0 z0 = y2 y0 + y1

El circuito resultante es el de la figura 20.
y0
y0 y1 y1 y2 y2

D2

D1
y1 y1

D0
y0 y0

z2

z1

z0

y2 y2

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 (LSB)

Q1

Q0 (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 x 001 010 011 100 101 110 111 000

Q0

Q1

Q2

Figura 22: Cronograma del contador asíncrono a analizar

Observamos que se trata por tanto de un contador ascendente módulo 8. Aunque en el cronograma anterior se supone que no existe retardo en la propagación de las señales a través de los biestables, en la realidad el cambio de estado de cada uno no se produce de manera simultánea por lo que hay que leer la salida en conjunto tras el producirse el cambio en el último de ellos, ya que en caso contrario puede leerse un carácter erróneo. Ejemplo: Analizar el siguiente contador asíncrono formado por 3 biestables tipo T disparados por flanco de bajada:

Tema 7. Registros, Contadores y Memorias

148

T0
x Rl

Q0

T1
Rl

Q1

T2
Rl

Q2

(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 Rl t1 t2 t3 t4

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 Decimal 0 1 2 3 4 5 6 7 8 9 Código Johnson 00000 00001 00011 00111 01111 11111 11110 11100 11000 10000

Suponiendo que inicialmente el contador es cargado a 00000, el cronograma de la señal Q0 sería como sigue:
t0 Rl t1 t2 t3 t4 t5 t6 t7 t8 t9 t10

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 t=0
f (Q0 , Q1 , Q 2 ) f (Q0 , Q1 , Q 2 )

0

1

0

0

0 t=1

0

0

1

0

0

0

0

0

1

1

t=2
f (Q0 , Q1 , Q 2 ) f (Q0 , Q1 , Q 2 )

t=3

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 010 011 100 101 110 111

0 0 0 -

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 0 1
Q2

Estado: 110 0 0 1 1

1
Q1 Q0

f (Q0 , Q1 , Q 2 )

Figura 33: Transición del estado 011 al 110 si f=0

Estado: 011 1 1
Q2

Estado: 111 0 1 1 1

1
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 000 001 010 011 100 101 110 111 f 1 0 0 0 0 0 0 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 celdas x
m

m

z

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

E

Celda básica de memoria (1 bit)

L

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 SP

s1

s2

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 e0 e1 e2

LE

Figura 39: Memoria RAM de 4 palabras de 3 bits

La memoria anterior puede esquematizarse como sigue:
SP LE

d0 d1 RAM (4x3) e0 e1 e2

s0 s1 s2

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
LE

SP SP

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
n

s
n

c

p

· · ·

m palabras

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 s0

e1 s1

e2 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

c

p

· · ·

m palabras

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

Sign up to vote on this title
UsefulNot useful