Está en la página 1de 41

7: Tpicos Especiales

Este captulo est dedicado tanto al estudio de ciertos temas selectos que ocurren con bastante frecuencia en las aplicaciones cotidianas de los circuitos lgicos como a ciertos temas cuya discusin haba sido postpuesta mientras el lector se familiarizaba con el contenido de los captulos anteriores. Dada la gran variedad de aplicaciones que encuentra la lgica digital en la prctica, es imposible cubrir todas ellas en una obra limitada como la presente. Posiblemente la aplicacin ms importante de esta rama de la electrnica sea la computadora digital. Un estudio a fondo sobre este tema queda fuera del alcance de este libro, aunque de cualquier manera se ha includo informacin introductoria en los Suplementos puestos al final de esta obra. Se hace hincapi, sin embargo, en el hecho de que podemos construr una computadora digital usando los elementos estudiados en los captulos anteriores. De cualquier manera, se deja el estudio de dicho tema a obras ms especializadas. Idealmente, en lgica positiva, un "0" lgico equivale exactamente a cero volts, y un "1" lgico equivale exactamente al mximo nivel de voltaje proporcionado por la fuente de poder, y la transicin de "0" a "1" de "1" a "0" se lleva a cabo de una manera instantnea. En la prctica, sin embargo, esto no es posible. Conforme las seales digitales van siendo procesadas y van pasando de un circuito a otro, ni el "0" lgico se puede mantener exactamente en cero volts, ni el "1" lgico alcanza a llegar hasta el mximo nivel de volta dado por la fuente de poder que alimenta al sistema. Esto se hace ms notorio conforme la velocidad de las seales va aumentando y estas tienen que salir inclusive fuera de la computadora hacia un mundo hostil en donde las interferencias elctricas y los ruidos generados por motores pesados o aparatos electrodomsticos degradan a la seal agregndole un componente de "ruido" que antes no tena. Para que las seales digitales del mundo real puedan ser de utilidad, es necesario establecer lmites arriba de los cuales un "0" lgico no puede ser considerado ya como tal y debajo de los cuales tampoco un "1" lgico puede ser considerado as. En la siguiente figura en donde podemos distinguir pulso digital, vemos definidas dos bandas amarillas dentro de las cuales el "0" se puede considerar como una seal til y el "1" tambin puede ser considerado como una seal til:

La regin intermedia entre estas dos bandas, determinada por el tipo de electrnica que se est utilizando, es considerada como la "tierra de nadie", y para evitar indefiniciones es necesario incorporar dentro del arsenal de funciones lgicas bsicas componentes que sean capaces de "limpiar" una seal ruidosa extrayendo los verdaderos "unos" y los verdaderos "ceros" de todo el ruido circundante, componentes tales como el gatillo Schmitt que ser explorado ms a fondo en los problemas resueltos. Frecuentemente, quiz con demasiada frecuencia, al transmitir seales digitales de un punto a otro la seal de cualquier modo pese a los mecanismos compensadores usados para intentar distinguir claramente entre un "0" y un "1" fallan, y en vez de recibirse lo que debera ser un "0" se recibe errneamente un "1", o en vez de recibirse lo que debera ser un "1" se recibe errneamente un "0". Es por ello que, adems de la electrnica correctora implementada por medio del hardware para tratar de reafirmar un "0" como un "0" y un "1" como un "1", se llevan a cabo procedimientos de deteccin de errores agregando informacin adicional a la seal digital. El mecanismo ms frecuentemente utilizado para la deteccin de errores quiz lo sea la adicin del bit de paridad. Esta tcnica empez a tener aplicaciones amplias al utilizarse el cdigo ASCII para transmitir caracteres alfanumricos de byte en byte. Como el cdigo ASCII no utiliza ms de 7 bits para la transmisin de cada caracter ASCII, se puede utilizar como bit adicional el octavo bit de cada byte que normalmente no se utilizara, una informacin extra que se considera una redundancia pero que nos permite determinar si ocurri un error durante el proceso de transmisin. Existen dos variantes del bit de paridad: el bit de paridad par y el bit de paridad impar. El bit de paridad par es puesto como "1" si la cantidad de "unos" en un conjunto dado de bits es impar, haciendo de este modo a la cantidad total de "unos" par. Y el bit de paridad impar es puesto en "1" si la cantidad de "unos" en un subconjunto dado de bits es par, haciendo de este modo al total de "unos" impar. Usando el bit de paridad par, si un caracter ASCII de siete bits que est siendo transmitido tiene un nmero impar de "unos" como en la palabra 1100001 que contiene tres "unos", entonces se le aade un bit de "1" adicional tranformando a la palabra en 11100001 para que el total de los "unos" en la palabra binaria sea par:

y si la palabra tiene un nmero par de "unos" entonces se le agrega un "0" para que el total de "unos" de la palabra siga siendo par, como en el caso de la palabra 01100011. De este modo, todos los bytes que estn siendo enviados contendrn un nmero par de bits. Esta adicin del "bit de paridad" se hace desde el punto de la transmisin de la seal (que puede ser de una computadora a otra a travs de una red o inclusive dentro de la misma electrnica de cada computadora, como cuando se est enviando informacin del disco duro a la memoria RAM). Al ir llegando cada byte, lo primero que hace el sistema es checar la paridad del byte. Si el nmero de bits es par, entonces se sabe que la informacin lleg correctamente, pero si el nmero de bits es impar, entonces se sabe que ocurri un error durante el proceso de transmisin del byte, y en tal caso el receptor le pidira al transmisor envar de nuevo esa palabra binaria o el paquete completo de palabras binarias dentro del cual est includo el caracter que lleg errneo. La deteccin de la paridad en el punto receptor se puede llevar a cabo de una manera extremadamente sencilla con un circuito construdo a base de un bloque con el cual ya debemos estar familiarizados: el bloque OR-EXCLUSIVO. Por su Tabla de Verdad, sabemos que un OR-EXCLUSIVO de dos entradas A y B d un "1" cuando ambas entradas son iguales, y d un "0" cuando ambas entradas son diferentes. Pero ahora veremos al OR-EXCLUSIVO desde otra perspectiva. Cuando ambas dos entradas A y B son iguales, la salida del OR-EXCLUSIVO es "1", o sea cuando las dos entradas son ambas "0" cuando las dos entradas son ambas "1", o sea cuando la paridad de la palaba de entrada AB es par. El OREXCLUSIVO es capaz de detectar la paridad en una palabra de dos bits, o sea un nmero par de "unos" cuando hay "unos" en la palabra. Podemos extender este concepto a una palabra binaria de tres bits? La respuesta es afirmativa, y para ello podemos seguir utilizando el mismo OR-EXCLUSIVO de la siguiente manera:

La construccin de la Tabla de Verdad para este circuito, que es la siguiente:

es extremadamente sencilla. Tomamos las entradas combinadas A y B cuando ambas solo estn produciendo un "1" a la salida del OR-EXCLUSIVO del cual son entradas (o sea, cuando ambas A y B son iguales). Esta salida de "1" del OREXCLUSIVO de arriba es la entrada al OR-EXCLUSIVO de abajo. Y cuando ambas entradas al OR-EXCLUSIVO inferior son iguales, la salida del OREXCLUSIVO que es a su vez la salida del circuito ser "1", y en caso contrario la salida ser "0". Un efecto curioso es que este circuito, el cual tiene una cantidad impar de entradas (tres entradas: A, B y C), produce un "1" a su salida cuando la palabra binaria de entrada ABC es impar (o sea, cuando hay un nmero impar de "unos" a la entrada), y produce un "0" cuando la palabra binaria de entrada ABC es par. Contrstese esto con el funcionamiento del OREXCLUSIVO de dos entradas, cuyo comportamiento es el reverso de esto. Si queremos que se produzca un "1" cuando la paridad de la palabra de entrada sea par (como ocurre con el OR-EXCLUSIVO de dos entradas), todo lo que tenemos que hacer es agregar un inversor lgico NOT a la salida del circuito. As como construmos el circuito anterior usando tres bloques OR-EXCLUSIVO, podemos construr otro circuito que incorpore cuatro bloques OR-EXCLUSIVO:

Empleando el mismo razonamiento que el que utilizamos arriba para construr la Tabla de Verdad para el circuito de 3 bits, encontramos que la Tabla de Verdad para el circuito con cuatro bloques OR-EXCLUSIVO es la siguiente:

En este caso, con una cantidad par de entradas, encontramos que el circuito produce un "1" cuando la palabra binaria de entrada ABC es impar, y produce un "0" cuando la palabra binaria de entrada ABC es par. Este circuito recibe el nombre de rbol de paridad. Podemos extender el mismo concepto con toda facilidad para construr un rbol de paridad de seis bits, o de ocho bits como el rbol de paridad que se muestra a continuacin, al cual le hemos dado una salida convencional X y el inverso de la salida, X, con el fin de utilizar la salida "par" como productora de una seal que podemos interpretar y usar en un diseo simplemente como PAR y la salida impar como

productora de una seal que podamos interpretar y usar en un diseo simplemente como IMPAR:

Como una cortesa de la Universidad de Hamburgo en Alemania, se encuentra disponible en Internet en el siguiente domicilio un rbol de paridad de ocho bits completamente interactivo, en el que haciendo "clic" con el mouse podemos ir "encendiendo" o "apagando" cada una de las entradas en los puntos marcados como d0, d1, d2, d3, etc.: http://tams-www.informatik.uni-hamburg.de/applets/hades _______/webdemos/10-gates/12-parity/parity8.html Para que la demostracin intercativa pueda funcionar, es necesario que la computadora en la cual se corra la simulacin tenga instalada la plataforma Java (la cual se puede descargar sin costo alguno de Internet). En esta simulacin, podemos comprobar cmo al ir encendiendo alternadamente una cantidad par o impar de "unos" en las entradas la salida del rbol en la terminal "o" se va "apagando" (esto lo tomamos como indicativo de un "0") o se va "encendiendo" (esto lo tomamos como indicativo de un "1") dependiendo en que el total de las entradas "encendidas" sea una cantidad impar o par (podemos invertir el sentido de la paridad en este rbol de paridad simulado con slo "activar" la entrada en el extremo inferior izquierdo que dice "odd"). Con la misma facilidad con la cual se construye un rbol de paridad de ocho bits podemos, si queremos, construr un rbol de paridad de doce bits. Pero en este ltimo caso, podemos ahorrarnos una buena cantidad de tiempo y esfuerzo adquiriendo comercialmente algn circuito integrado cuya funcin sea precisamente la misma que la de un rbol de paridad, un circuito integrado como el 4531, el cual es un rbol de paridad de 12 bits:

Este circuito integrado trabaja de la manera siguiente: Las entradas al circuito son puestas desde la terminal identificada como Input 0 hasta la terminal identificada como Input 11. En operacin normal, la terminal "pin" 10 (Odd/Even Select) tiene puesto un "0". Si una cantidad par de entradas est en el estado de paridad "cero" el circuito pone un "0" en la terminal de salida identificada como Output (terminal "pin" 9), y si un nmero impar de entradas estn en el estado de paridad "cero" entonces el circuito pone un "1" en la terminal de salida Output. Poniendo un "1" en la terminal 10 invierte el sentido de la salida Output. En general, el rbol de paridad puede ser utilizado de dos maneras: para generar el "bit" de paridad en la palabra que ser transmitida, y para detectar la paridad de la palabra recibida. Otra tcnica que ha sido ampliamente utilizada para la deteccin de errores es la tcnica del chequeo-de-suma (sumcheck). Esta consiste en generar un nmero checksum, que es enviado junto con un "paquete" de datos, a partir de los mismos datos. Al recibirse el "paquete" de datos, el nmero checksum puede ser generado nuevamente por el receptor sumando los nmeros que corresponden al paquete recibido, y comparado con el nmero checksum enviado. Si los dos checksum resultan ser diferentes, entonces se sabr que hubo un error. Con una ligera variante, podemos hacer un poco ms eficiente el proceso en la forma que se describir a continuacin. Supngase que vamos a enviar cuatro palabras: la palabra 00100101 (equivalente al nmero hexadecimal 25h), la palabra 01100010 (equivalente al nmero 62h), la palabra 00111111 (equivalente al nmero 3Fh) y la palabra 01010010 (equivalente al nmero 52h), junto con su checksum. El primer paso consiste en sumar (en suma binaria) las cuatro palabras como si fueran nmeros (pueden serlo, pero tambin podran ser caracteres alfabticos ASCII). Esto dar como resultado una palabra de nueve bits en vez de ocho, la palabra 100011000 (cuyo equivalente hexadecimal es 118h). El siguiente paso consiste en ignorar el bit excedente resultante de la operacin aritmtica de "llevar", lo cual nos deja con la palabra 00011000 (cuyo equivalente hexadecimal es 18h).

El tercer paso consiste en obtener el 2-complemento (vase el Captulo 3: El lgebra Boleana) de la palabra obtenida, el cual resulta ser 11101000 (cuyo equivalente hexadecimal es E8). Este es el byte del chequeo-de-suma que es enviado hacia afuera junto con los datos. El receptor todo lo que tiene que hacer de su lado es sumar el checksum recibido a la suma total que obtenga del grupo recibido de cuatro bytes, sabiendo que el resultado debe ser siempre cero (recurdese que la suma de un nmero al nmero 2-complemento derivado de ella es cero). En este caso, si sumamos 11101000 a 100011000 (la palabra de nueve bits resultante de la suma de los cuatro bytes), obtenemos 1000000000, o sea el nmero hexadecimal 200h, y como en el procedimiento ignoramos los bits generados por la operacin aritmtica de "llevar", ignoramos los dos bits "10", lo cual nos deja con la palabra 00000000, lo cual nos indica que hubo una generacin de cero errores. Otra tcnica potente muy utilizada para la deteccin de errores es el chequeo de redundancia cclica (Cyclic Redundancy Check CRC). Su modo de empleo se muestra a continuacin (ampliar imagen):

Como lo muestra el diagrama, el proceso comienza con la palabra binaria a3a2a1a0 que va a ser transmitida. Se toma la palabra binaria que en este caso es de cuatro bits y se le aaden tres ceros. Hecho esto, se lleva a cabo un proceso de divisin binaria entre esta palabra y un divisor de cuatro bits identificado como d3d2d1d0 (tanto el transmisor como el receptor deben tener disponible en todo momento el mismo valor binario para el divisor d3d2d1d0). El resultado de este proceso aritmtico se lleva a cabo en un "generador" (el cual puede ser un circuito lgico especializado o un secuenciador programable capaz de poder llevar a cabo el proceso de divisin), en el cual despus de haberse llevado a cabo la divisin binaria se produce el residuo resultante de la divisin, identificado como r3r2r1r0, el cual es frecuentemente conocido como el CRC. Este residuo (CRC) es anexado a la palabra-dato original a3a2a1a0 formando la palabra-cdigo a3a2a1a0r3r2r1r0. Esta palabra de siete bits es la palabra que es enviada por el "transmisor" mediante un canal de comunicaciones poco fiable, el cual puede ser una lnea telefnica ruidosa. La palabra que llega al "receptor" es la palabra cdigo de siete bits b3b2b1b0q2q1q0. Si el canal de comunicaciones fuera altamente confiable y no hubiera ocurrido ningn error durante el proceso

de transmisin, la palabra cdigo recibida b3b2b1b0q2q1q0 sera idntica en todo respecto a la palabra cdigo enviada a3a2a1a0r3r2r1r0. Una vez recibida la palabra cdigo, el receptor utilizando como punto de referencia el mismo divisor d3d2d1d0 lleva a cabo el mismo proceso aritmtico de divisin (dividiendo el mensaje entre el divisor d3d2d1d0) en un bloque "checador" obteniendo una palabra "sndrome" de tres bits s2s1s0. Si la palabra sndrome resulta estar constituda de puros "ceros", ello significa que no hubo error alguno durante el proceso de transmisin de la palabra, con lo cual se abre una compuerta dejando pasar los bits b3b2b1b0 aceptndolos como la palabra-dato original a3a2a1a0. Pero si la palabra sndrome tiene un valor diferente de cero binario, entonces la compuerta no se abrir y por el contrario ser descartada como defectuosa. Como ya se dijo, esta tcnica se puede implementar con electrnica digital, con circuitos usando funciones lgicas bsicas y flip-flops, como lo muestra la siguiente "tabla de secuencias" representativa del comportamiento de una "mquina CRC":

En esta "mquina" que esencialmente est hecha a base de un registro de desplazamiento del tipo entrada serial y salida serial de 5 bits (usando cinco flip-flops) con los bits desplazndose dentro de ella de derecha a izquierda en cada "pulso de reloj", se utiliza como generador del CRC la palabra binaria "1011" para obtener el CRC a partir de la palabra-dato o "mensaje" a ser transmitido que en este caso es "01100111". En la implementacin de la mquina, puesto que se van a estar llevando a cabo operaciones aritmticas en el sistema binario (base-2), ser inevitable en cualquier diseo de este tipo de mquina la inclusin de una funcin lgica que encontramos previamente tanto en la construccin del Medio-Sumador como del Medio-Substractor: el bloque

OR-EXCLUSIVO o XOR. Desde el punto de vista de la mquina (del lado del transmisor), el procesamiento se lleva a cabo bit por bit, resultando en una serie de dgitos binarios (los bits del CRC) que sern anexados posteriormente al mensaje original. El proceso comienza con todos los flip-flops de la mquina puestos en "ceros", tras lo cual el mensaje va siendo desplazado hacia la izquierda siendo introducido bit por bit dentro del registro de desplazamiento (esto est simbolizado con una letra "M" que tiene anexada una flecha a la misma apuntando hacia la izquierda) seguido de cuatro ceros (simbolizado cada uno de ellos con un nmero "0" tambin con una flecha anexada apuntando hacia la izquierda), de modo tal que entra el mensaje seguido de cuatro ceros. Obsrvese que cuando el bit ms significativo (el bit ms a la izquierda) es "1" (esta es la situacin que tenemos en el sptimo rengln de la tabla de secuencias, con el "1" de color rojo sobre un fondo negro) se lleva a cabo entonces la operacin de OREXCLUSIVO con el "generador" que en este ejemplo es la palabra "10011". Esto se repite cada vez que el bit ms significativo es "1", lo cual ocurre tres veces (en el sptimo, en el noveno y en el 13avo rengln). Los cuatro bits de orden ms bajo, resultado final del proceso de divisin aritmtica en el sistema binario (base-2), son entonces el CRC que ser anexado a la palabra-dato original justo antes de llevarse a cabo la transmisin del mensaje, el cual en este caso es "0110" (en el rengln inferior de la tabla de secuencias) descartando el "0" que est en la posicin del bit ms significativo. Para este proceso hemos supuesto que el generador es una palabra no de cuatro bits sino de cinco; sin embargo el bit ms significativo en el generador no es realmente de inters y por lo tanto no se le toma en cuenta, porque en primer lugar el bit ms significativo en el generador siempre es "1", y cuando el bit ms significativo (ms a la izquierda) dentro del registro se vuelve "1", el generador es sometido a una operacin de OR-EXCLUSIVO contra los contenidos del registro, "limpiando" el bit ms significativo. Por lo tanto, el bit ms significativo no necesita ser transmitido. Tambin la palabra cdigo resultante (la palabra-dato ms la secuencia CRC), al pasar por el "hardware" CRC, deja "limpio" el registro. Esto se puede visualizar mejor alimentando la secuencia "01101110110" (consistente en la palabra-dato "0110111" con el CRC "0110" anexado) adentro del registro de transferencia siguiendo las reglas indicadas. El contenido del registro terminar siendo "cero" al final. Puesto que a las velocidades actuales de procesamiento que actualmente andan arriba del orden de 1 Gigabit por segundo es muy difcil disear circuitos lgicos CRC que puedan hacer todas sus operaciones a esta velocidad, los ingenieros frecuentemente disean los circuitos CRC para procesar varios bits a la vez. Para que el chequeo de redundancia cclica pueda trabajar, matemticamente hablando, es necesario que la palabra que va a ser transmitida sea considerada en nuestros anlisis como un polinomio. A modo de ejemplo, para el siguiente dato binario de 16 bits a ser transmitido: 0010 0110 1111 0000 (26F0h, hexadecimal) el polinomio formado directamente a partir de cada uno de los bits es el

siguiente (obsrvese la correspondencia entre cada uno de los bits de la palabra y cada uno de los coeficientes "unos" y "ceros" del polinomio): M(X) = 0 + 0X1 + 1X2 + 0X3 + 0X4 + 1X5 + 1X6 + 0X7 + 1X8 + 1X9 + 1X10 + 1X11 + 0X12 + 0X13 + 0X14 + 0X15 lo cual, ignorando los trminos en los que los coeficientes son "ceros", se reduce a: M(X) = 1X2 + 1X5 + 1X6 + 1X8 + 1X9 + 1X10 + 1X11 Tras esto, y tomando n como la cantidad de bits de que est formada la palabra que ser transmitida (n=16 en este ejemplo) se lleva a cabo un proceso de divisin entre este polinomio M(X) y un polinomio generador G(X) que tiene propiedades especiales: M(X)Xn/G(X) = Q(X) + R(X) en donde Q(X) es el cociente de la divisin y R(X) es el residuo resultante de la misma. Es precisamente este residuo binario R(X) lo que es anexado a la palabra-dato que ser transmitida. A continuacin tenemos detallado el proceso de divisin para el ejemplo que estamos utilizando, en donde nuestro polinomio generador G(X) es un polinomio utilizado con mucha frecuencia, el polinomio G(X)=X16+X15+X2+1 (ampliar imagen):

En el receptor,despus del clculo CRC de su lado, el residuo R(X) debe ser cero para que la palabra pueda ser considerada como transmitida sin error alguno. Una cosa que hay que tener presente es que, al nivel de la mquina digital, la cual trabaja en el sistema binario, no es necesario proporcionarle a la mquina una "calculadora" para que pueda llevar a cabo el proceso de divisin binaria; ya al igual que en el caso de la multiplicacin binaria, la cual se puede llevar a cabo con un registro de transferencia serial y simples adiciones, la divisin binaria se puede llevar a cabo tambin con un registro de transferencia serial y simples substracciones. No hay que olvidar que este proceso, que a nosotros nos puede parecer muy laborioso, al final del da no ser llevado a cabo por nosotros sino

por la misma mquina en donde est instalado ya sea el productor (en el transmisor) o el verificador (en el receptor) de la redundancia cclica. Sin embargo, considerando que en un proceso de transmisin de datos de un archivo sumamente grande (con un tamao en el orden de los megabytes) estos procesos aritmticos repetidos una y otra vez miles y miles de veces invariablemente tendrn un impacto en la disminucin de la velocidad de la transmisin de los datos, esto ciertamente tiene que ser considerado como un factor en cualquier diseo que tenga que ver con las reas de aplicacin de la tcnica CRC. A continuacin se muestra un clculo simplificado, muy a la manera de como los matemticos efectan el proceso algebraico de divisin sinttica, prescindiendo de las "equis" (que en realidad slo estn haciendo "bulto" aqu), en donde el polinomio M(X) es obtenido de la palabra 11100110 y en donde el polinomio generador G(X) es el que est dado por la palabra 11001, obtenindose el residuo 0110 que es lo que ser anexado a la palabra-dato original a ser enviada (ampliar imagen):

Adems de la capacidad para poder detectar errores (error detection), es posible darle a los circuitos lgicos tambin la capacidad para poder corregir errores (error correction). Esto requiere, desde luego, agregar informacin redundante adicional a una palabra que permita localizar la posicin exacta del bit que est produciendo un error de paridad, ya que el error de paridad por s solo en una palabra no nos indica cul de todos los bits es el bit incorrecto. Un esquema utilizado en algunos diseos consiste en tomar varias palabras binarias "en bloque", digamos unas ocho palabras, de modo tal de que adems de que cada palabra (representada por un rengln) tenga un bit de paridad, al final de cada bloque de ocho palabras haya una palabra completa "extra" redundante, la

cual consistir de ocho bits de paridad, uno para cada columna. De esta manera, si en lugar de un "1" tenemos un "0" en una palabra, adems de la paridad incorrecta que nos permite identificar cul de las ocho palabras viene con un error tenemos la paridad incorrecta del bloque que nos permite identificar cul bit de esas ocho palabras es el que est en el error. Seleccionando una paridad impar como denotando una palabra correcta sin errores y tambin como denotando una bloque completo de palabras correcto sin errores, a continuacin tenemos un bloque que carece errores en la transmisin y en la recepcin (cada rengln representa una palabra binaria diferente):

Puesto que todas las palabras binarias del bloque tienen la paridad correcta (impar), no hay errores en la transmisin de este bloque. En cambio, en el siguiente bloque, tenemos una palabra con tres errores:

En este caso, la penltima palabra (en el penltimo rengln) viene con tres errores. Su paridad par nos dice que tiene por lo menos un error. Adems, la

paridad en las columnas nos permite detectar la presencia de tres errores en la palabra e identificar la localizacin precisa de los tres bits errneos: estn en el cuarto, el quinto, y el sptimo bit de la penltima palabra binaria. La localizacin exacta de un bit errneo nos permite disear una mquina que sea capaz no slo de detectar estos tres errores sino tambin corregirlos. Y aunque a nosotros como humanos el proceso nos pueda parecer dificultoso, es relativamente fcil ensearle a una mquina a corregir este tipo de errores, lo cual hara con rapidez electrnica. Existen procedimientos matemticos muy especficos para agregar bits redundantes que permitan no slo la deteccin de errores sino la correccin de los mismos, conocidos como cdigos correctores de errores (error correcting codes ECC). Uno de ellos es el cdigo Hamming. Considrese una palabra binaria consistente de nicamente cuatro bits de datos que ser transmitida como una palabracdigo (codeword) con la adicin de tres bits de control de error. Esto sera llamado un cdigo (7,4). Los tres bits agregados son tres bits de paridad par, en donde la paridad de cada uno es calculada en distintos subconjuntos del mensaje de la manera que se muestra abajo:

La razn terica para este tipo de arreglo es que los tres bits de paridad (1,2,4) estn relacionados con los cuatro bits de datos (3,5,6,7) de la manera que se muestra a continuacin:

En este diagrama cada crculo corresponde a un bit de paridad, y define los cuatro bits que contribuyen al clculo del bit de paridad. Por ejemplo, el bit de datos 3 contribuye a los bits de paridad 1 y 2. Cada crculo (bit de paridad) abarca un total de cuatro bits (tres bits de datos y un bit de paridad), y cada crculo por lo tanto debe tener una paridad par. Dados cuatro bits de datos cualesquiera en cualquier combinacin de "unos" y "ceros", los tres bits de paridad pueden ser seleccionados fcilmente para cumplir con esta condicin, y como de costumbre le dejaremos la carga de este trabajo a la mquina. Se puede observar en el diagrama que cambiando cualesquier bit numerado del 1 al 7 afecta de modo nico los tres bits de paridad. Alterando el bit 7 afecta todos los tres bits de paridad, mientras que un error en el bit 6 afecta nicamente a los bits de paridad 2 y4, mientras que un error en un bit de paridad (lo cual tambin puede ocurrir durante el proceso de transmisin) afecta nicamente a ese bit de paridad. La localizacin de cualquier error individual en un bit est determinada unvocamente despus de checarse los tres crculos de paridad. Con este esquema de deteccin y correccin de errores, la palabra binaria (datos) "1101" sera enviada como la palabra-cdigo "1100110" con la adicin de los tres bits de paridad, puesto que:

Cuando estos siete "unos" y "ceros" son introducidos en los crculos de paridad, se puede confirmar que la seleccin de los tres bits de paridad asegurar que la paridad dentro de cada crculo ser par, como se muestra aqu:

Se puede observar aqu que si ocurre un error en cualesquiera de los siete bits, ese error afectar distintas combinaciones de los tres bits de paridad dependiendo de la posicin del bit que llega con error. Supngase por ejemplo que se enva el mensaje "1100110" y que ocurre un error en un solo bit tal que se recibe la palabra-cdigo "1110110":

El error en el mensaje, en el bit 5, puede ser corregido examinando cules de los tres bits de paridad fueron afectados por el bit defectuoso:

En el segundo rengln en el cual se utiliza el bit de paridad 1 y el cual tiene un valor de un "0", la cantidad total de "unos" es un nmero impar, 3, lo cual indica que ha ocurrido un error de acuerdo con el criterio de que bajo la paridad par si se produce un "1" en lugar de un "0" ello apunta hacia la presencia de un

error. En el tercer rengln, en el cual se utiliza el bit de paridad 2 y el cual tiene un valor de un "1", la cantidad total de "unos" es un nmero par, 4, lo cual indica que aqu no hay indicacin de error alguno segn el criterio de que bajo la paridad par se debe producir un "0" como consecuencia de un nmero par de "unos". Y en el cuarto rengln, en el cual se utiliza el bit de paridad 4 y el cual tiene un valor de "0", la cantidad total de "unos" es un nmero impar, 3, lo cual indica que ha ocurrido un error. Los bits de paridad as como la palabra cdigo original permiten determinar la posicin del "bit" que lleg defectuoso, o sea el bit 5 que lleg como un "1" en vez de haber llegado como el "0" que deba haber sido. El examen de los crculos de paridad confirma que cualquier bit defectuoso puede ser corregido de esta manera. El cdigo Hamming tiene pues las siguientes caractersticas (1) La capacidad para detectar en una palabra transmitida dos bits en el error, lo cual supone que no se intentar llevar a cabo una correccin del error, (2) La correccin de bits individuales de error, o sea un error de un bit en una palabra transmitida, y (3) Un costo de tres bits que se tienen que aadir a un mensaje de 4 bits. Esto ltimo puede parecer oneroso. Sin embargo, la capacidad para poder corregir errores viene a un costo que es menor que el tener que enviar de nuevo el mensaje completo, y tmese en cuenta que el envo del mensaje por partida doble no logra ninguna correccin de error. Al hablar sobre el tema de la deteccin y correccin de errores, es frecuente manejar el concepto de la distancia entre dos palabras binarias. Aunque a este concepto casi siempre se le d en los libros de texto una definicin formal que tambin casi siempre resulta crptica, aqu daremos una definicin nave del concepto: es simplemente la cantidad de bits que tienen que ser cambiados para igualar una palabra binaria con otra. As, la distancia entre las palabras 10011000 y 00011000 es 1 porque basta con cambiar el primer bit de cualquiera de las dos palabras para igualar una con otra. Entre ms "alejada" est una palabra binaria de la otra, tanto mayor ser la cantidad de bits que tengamos que cambiar para igualar una de ellas con la otra. El cdigo Hamming permite la correccin de errores porque la distancia mnima entre dos palabras cdigo es 3. En la figura de abajo, dos palabras cdigo en ocho posibles palabras cdigo de tres bits estn acomodadas para tener una distancia de 3 entre ellas. Se requieren tres cambios de bits (errores) para moverse de una palabra cdigo 000 vlida a los siguientes 111. Si la palabra cdigo 000 es transmitida y ocurre un error en un bit, la palabra recibida necesariamente ser una del conjunto {001, 010, 100}, cualquiera de las cuales puede ser identificada fcilmente como una palabra cdigo invlida, y la cual podra haber sido nicamente la palabra cdigo 000 antes de la transmisin.

El cdigo Hamming define esencialmente 16 palabras cdigo vlidas dentro de todas las 128 palabras cdigo posibles de 7 bits. Estas 16 palabras estn acomodadas de modo tal que la distancia mnima entre dos palabras cualesquiera sea 3. Estas palabras cdigo son mostradas en la siguiente tabla:

Se puede verificar que la distancia de cualquier palabra cdigo M={0,1,2,...,E,F} de esta tabla a cualquier otra palabra cdigo N es de por lo menos 3. A continuacin tenemos unos ejemplos en donde medimos la distancia de la palabra cdigo 3 hacia otras palabras cdigo para confirmar esta aseveracin:

La distancia es 4 entre 3 = 0011110 y 0 = 0000000 La distancia es 3 entre 3 = 0011110 y 1 = 0000111 La distancia es 3 entre 3 = 0011110 y 2 = 0011001 La distancia es 4 entre 3 = 0011110 y D = 1100110 La distancia es 4 entre 3 = 0011110 y E = 1111000 La distancia es 3 entre 3 = 0011110 y F = 1111111 Continuando con el chequeo de la distancia entre la palabra cdigo 3 y todas las dems palabras cdigo restantes, podemos conclur que la palabra cdigo 3 est situada a una distancia de por lo menos 3 de todas las dems palabras cdigo. Con la misma facilidad con la que construmos el cdigo (7,4) podemos construr otros cdigos Hamming, por ejemplo el cdigo (8,4). Con un poco de anlisis matemtico podemos obtener una frmula que nos indica en forma precisa cuntos bits redundantes adicionales se requieren para garantizar la deteccin y correccin de un error con el cdigo Hamming. La frmula es Ham(2n, 2n-n-1). Por ejemplo, si n=7, tenemos entonces Ham(128,120), lo cual nos dice que para cada 120 bits de datos nicamente se requieren ocho bits extra redundantes para protegernos en contra de un error dndonos la capacidad no slo para poder detectarlo sino tambin para poder corregirlo. Y cuando n=20, entonces obtenemos Ham(1048576,1048555), lo cual nos dice que se requieren nicamente 21 bits para codificar ms de un milln de bits y an garantizarnos una proteccin en contra de un error. Como una cortesa de la Universidad de Hamburgo en Alemania, se encuentra disponible en Internet en el siguiente domicilio un programa interactivo que permite al estudiante el poder "experimentar" con un envo y recepcin de un mensaje binario utilizando la adicin de bits de paridad y el cdigo Hamming para poder detectar la presencia de errores as como la determinacin del bit defectuoso. El programa interactivo puede ser accesado en el siguiente domicilio: http://tams-www.informatik.uni-hamburg.de/applets/hades _______/webdemos/10-gates/50-hamming/hamming.html Esta simulacin trabaja con un circuito que utiliza un cdigo Hamming de 4 bits para deteccin y correccin de errores. Los cuatro interruptores a la izquierda se utilizan para fijar el valor de 4 bits para el codificador, el cual calcula el valor requerido por cada uno de los tres bits de paridad que sern transmitidos junto con los cuatro bits de datos como una palabra cdigo. Los siete interruptores (Set channel faults) y las compuertas OR-EXCLUSIVO en la parte media del circuito permiten introducir manualmente "fallas" en el mensaje transmitido. Si todos los interruptores estn "apagados", el mensaje es transmitido en forma normal, pero si se "enciende" uno de los interruptores entonces la compuerta OR-EXCLUSIVO asociada al interruptor invierte el bit del dato correspondiente (conviertiendo un "0" en un "1" un "1" en un "0"), lo cual equivale a que ese bit haya sido transmitido como error. El bloque decodificador a la derecha del circuito toma los siete bits del mensaje e intenta reconstrur con los siete bits la informacin original, o sea los cuatro bits del mensaje original. Los creadores del programa interactivo recomiendan tener todos los siete interruptores "apagados" experimentando con el envo de algunos mensajes; seleccionando

algunos valores de entrada para el codificador con los interruptores a la izquierda para as poder observar los bits de paridad que se generan as como el modo de funcionamiento del decodificador. Tras esto, recomiendan "jugar" con algunos de los interruptores para introducir manualmente "fallas" individuales en el mensaje transmitido, observando la operacin del decodificador. Y finalmente, invitan al experimentador a descubrir qu es lo que ocurre cuando se activa ms de un "interruptor generador de error". Si queremos aligerar nuestra carga de trabajo en el diseo de un circuito que tenga no slo la capacidad para poder detectar errores sino tambin para corregirlos, en tal caso podemos recurrir a un circuito integrado como el 74LS636 que recurre a la paridad para la correccin de errores relacionados con los circuitos integrados usados en la memoria RAM de las computadoras caseras:

Este circuito integrado trabaja almacenando cinco bits de paridad con cada byte de datos, los cuales pueden ser puestos y sacados del circuito integrado a travs de las terminales de data byte DB0 a la DB7. Los cinco bits de chequeo de paridad estn puestos en las terminales de check bit CB0 a la CB4. El circuito integrado incorpora dos terminales de control (S0 y S1) y dos salidas para notificar la presencia de un error (en la terminal Single Error Flag o SEF) o de dos errores (en la terminal Double Error Flag o DEF). Adems del mtodo Hamming, existen otras tcnicas para la deteccin y correccin de errores, tales como el cdigo BCH, el cdigo Reed-Solomon, el cdigo Reed-Muller, el uso de los algoritmos de "picadillo" hash, y muchas otras, cada una con sus propias ventajas y desventajas. En torno a todo esto, existe un teorema muy importante, conocido como el teorema fundamental de la teora de la informtica y tambin como el teorema de Shannon (en honor a su descubridor Claude Shannon, el mismo que descubri la relacin entre el lgebra Boleana y el comportamiento de los circuitos digitales electrnicos) que nos dice que es posible enviar informacin digital de un punto a otro prcticamente libre de errores hasta cierto lmite mximo a travs de un canal de comunicacin sin importar qu tan contamido pueda estar el canal con ruido circundante. Para quienes deseen tener una alguna idea as sea remota sobre los procedimientos matemticos involucrados en la demostracin de este teorema, se les recomienda consultar la Wikipedia

bajo el encabezado "Noisy-channel coding theorem", accesible en el siguiente domicilio: http://en.wikipedia.org/wiki/Shannon%27s_theorem Una de las consecuencias directas de este teorema es el teorema de Shannon-Hartley que nos dice que la capacidad de un canal de comunicaciones cualquiera (con esto nos estamos refiriendo al lmite terico mximo de la rapidez de datos digitales "limpios" que pueden ser enviados por dicho canal) con una seal con una potencia promedio S viajando a travs de un canal de comunicaciones analgico (como lo es el caso del cable telefnico o el cable coaxial), sujeto a la adicin de un ruido "blanco" Gaussiano de potencia N est dada por la frmula: C = Blog2(1 + S/N) en donde: C es la capacidad del canal en bits por segundo. B es el "ancho de banda" (bandwith del canal en ciclos por segundo (Hertz). S es la potencia total de la seal a lo largo del ancho de banda, medida en watts. N es la potencia total del ruido a lo largo del ancho de banda, medida en watts. S/N es la razn de la potencia de la seal a la potencia del ruido (Signal to Noise Ratio SNR) expresada como un nmero directo (no en decibeles). Obsrvese que en esta frmula aparece el logaritmo en sistema binario o sistema base-2, lo cual podr parecer novedoso para muchos acostumbrados al uso de los logaritmos decimales (logaritmos base-10) o a los logaritmos naturales cuya base es el nmero e, y ciertamente desconcertante porque las calculadoras cientficas de bolsillo no manejan esta clase de logaritmos. Hay que enfatizar que la aparicin del logaritmo base-2 es una consecuencia directa de los pasos requeridos para la demostracin del teorema, y de hecho aparece tambin en muchas otras frmulas que tienen que ver con el diseo de sistemas digitales. De cualquiera manera, para poder obtener el logaritmo de un nmero en la base 2 no es necesario adquirir una calculadora especial, todo lo que hay que hacer es recordar que el logaritmo de un nmero en cierta base n es el exponente al cual hay que elevar la base para obtener el nmero dado. Esto significa que si x es el logaritmo de un nmero n en la base 2, entonces : 2x=n Tomando logaritmos decimales en ambos lados: log(2x) = log(n) y usando las propiedades de los logaritmos: xlog(2) = log(n) x = log(n)/log(2) Entonces, dado un nmero n cualquiera, podemos obtener su logaritmo en

sistema base 2 con el simple hecho de tomar el logaritmo decimal del nmero y divirlo entre el logaritmo decimal de 2. De cualquier modo, existen disponibles en Internet calculadoras que pueden calcular el logaritmo de un nmero en cualquier base, como: http://www.1728.com/logrithm.htm Las implicaciones de la frmula fundamental del teorema Shannon-Hartley las podemos ver con dos ejemplos. El primer ejemplo es aplicable a una lnea de comunicaciones telefnicas, en donde la razn S/N es tpicamente por lo menos de unos 20 decibeles (con esto queremos decir que la potencia de la seal es unas 100 veces mayor que la potencia del ruido elctrico circundante) y en donde el ancho de banda que va desde los 33 ciclos por segundos hasta los 3,300 ciclos por segundo (desde los sonidos ms bajos o graves hasta los sonidos ms agudos que se pueden enviar por la lnea telefnica) es de 3000 ciclos por segundo. La aplicacin de la frmula nos d en este caso: C = (3000)log2(1 + 100) C = (3000)log2(101) C = (3000)(6.658) C = 19,973 bits/segundo En el segundo ejemplo, queremos transmitir una seal por un canal a una rapidez de 50 mil bits por segundo, con un ancho de banda de 1 Megahertz (un milln de ciclos por segundo). En tal caso,de la frmula: C = Blog2(1 + S/N) llevamos a cabo un despeje para obtener S/N: log2(1 + S/N) = C/B Usando la definicin de logaritmo para una base dada que en este caso es 2: S/N + 1 = 2C/B S/N = 2C/B - 1 S/N = 2(50,000/1,000,000) - 1 S/N = 0.035 -14.5 decibeles Este segundo ejemplo demuestra que es posible transmitir seales digitales que inclusive son mucho ms dbiles que el ruido elctrico circundante, y an as poder recuperar la seal inmersa entre tanto ruido, lo cual tal vez puede parecer sorprendente a muchos.

En captulos anteriores, hablamos sobre cmo la respuesta de cualquier funcin lgica implementada con componentes reales no es instantnea, siempre hay un retardo de propagacin introducido por todo componente lgico, como lo ilustran los siguientes dibujos en los cuales el pulso inferior que es aplicado a un flip-flop R-S produce una respuesta en su salida ilustrada en la parte superior que no ocurre instantneamente:

Adems de este retardo de tiempo inherente a toda funcin lgica, obra el hecho de que un pulso aplicado a un circuito no sube instantneamente de "0" a "1", siempre hay un retardo conocido en la literatura tcnica como el tiempo de ascenso (rise time), del mismo modo que cuando el pulso cae de "1" a "0" tampoco lo hace instantneamente, siempre hay un retardo de tiempo conocido en este caso como tiempo de cada (fall time). Debemos formalizar de manera ms precisa lo que queremos decir con estos dos trminos. Por convencin, el tiempo de ascenso se define como el tiempo que tarda una seal en ascender del 10 por ciento del valor del voltaje de la fuente de poder al 90 por ciento de dicho valor. Esto est mejor esquematizado en el siguiente diagrama:

Estos diagramas muestran la aplicacin de un pulso de entrada a un NAND

conectado para que funcione como un simple inversor lgico, en donde en el diagrama superior muestra un pulso de entrada Vi ascendiendo de un nivel de "0" (voltage input low Vil) a un nivel de "1" (voltage input high Vih), produciendo una respuesta retardada en la salida Vo cuando dicha respuesta retardada cae de un nivel de "1" (voltage output high Voh) a un nivel de "0" (voltage output low Vol). En el diagrama mostrado, el tiempo de cada thl (fall time high to low) indica el lapso de tiempo que transcurre cuando la seal cae del 90 por ciento del valor de Voh al 10 por ciento del valor de Voh. Estos retardos de tiempo detallados en las especificaciones tcnicas son precisamente lo que determinar la velocidad mxima con la cual pueda trabajar cualquier sistema digital, y es una de las primeras cosas que consultar un diseista que est trabajando en proyectos de vanguardia. Tambin en los captulos anteriores, trabajamos sobre el supuesto de que podamos conectar un nmero indefinido de elementos a la salida de una funcin lgica cualquiera. En la prctica, desafortunadamente, esto no es as. Todo componente lgico tiene un lmite mximo de unidades que puede alimentar, que se pueden conectar a su salida, el cual depender del tipo de componente utilizado y de la cantidad de las funciones lgicas que dicho componente est alimentando. Para determinar el lmite mximo de unidades que pueden ser alimentadas por una funcin lgica, es comn usar el concepto de factores de carga. Dependiendo de la tecnologa usada, todo elemento lgico trae en su lista de especificaciones un factor de carga de entrada (tambin conocido en la literatura tcnica como fan-in) que es igual al nmero mnimo de unidades de carga que requiere la entrada del mismo para poder trabajar adecuadamente, y un factor de carga de salida (tambin conocido como fan-out) que es igual al nmero mximo de unidades de carga que puede proporcionar su salida para alimentar otros elementos. Si el elemento tiene varias entradas, cada entrada estar especificada con un factor de carga de entrada. Supngase, por ejemplo, que una funcin NOR tiene un factor de carga de salida (fan-out) de 6 y que sta va a alimentar varias funciones NOT con un factor de carga de entrada (fan-in) de 1 cada una. Vemos entonces que el NOR podr alimentar hasta 6 funciones NOT. Si el factor de carga de entrada (fan-in) de cada NOT hubiese sido 2, el NOR habra podido alimentar nicamente hasta tres funciones NOT. Si queremos conectar ms funciones NOT a la salida del NOR, tenemos que amplificar la salida del mismo de alguna manera. Para lograr dicho propsito, utilizamos un elemento ampliamente conocido como el buffer, el cual se representa de la siguiente manera:

Obsrvese que por su representacin el buffer nos indica que no puede llevar a cabo ningn procesamiento de informacin. En efecto, su nica funcin es amplificar las seales a su entrada. Supngase que tenemos un buffer con un factor de carga de entrada (fan-in) de 1 y un factor de carga de salida (fan-out) de 8. Podemos conectar entonces hasta seis buffers de este tipo a la salida de la funcin NOR discutida previamente. Puesto que cada uno de los seis buffers tiene un factor de carga de salida (fanout) de 8, tendremos un total de (6)(8) = 48 factores de carga de salida (fan-out) a la salida del NOR. De esta manera, la funcin NOR podr alimentar por s sola hasta 48 de las funciones NOT discutidas anteriormente. Adems de los componentes bsicos que ya hemos estudiado tales como las tres funciones lgicas bsicas AND, OR y NOT, los multiplexers, los flip-flops R-S y otros componentes, existen bloques adicionales que son necesarios para poder construr un sistema digital completo. Uno de ellos es el bloque tri-state, el cual simplemente deja pasar un "0" a su entrada inalterado como un "0" a su salida y un "1" a su entrada como un "1" a su salida, pero que adems de estos dos estados posibles cuenta con un tercer estado (de all su designacin como tres-estados o tri-state) en el cual la salida es esencialmente "desconectada" por completo de la entrada, o usando terminologa un poco ms tcnica, la salida es aislada elctricamente de la entrada. Podemos representar simblicamente la accin de la lgica de tres-estados de la siguiente manera:

Este componente siempre tiene tres terminales, una terminal de Entrada, una terminal de Salida, y una tercera terminal designada en la figura como Habilitar en la cual, dependiendo de que se activada o desactivada con un "1" o con un "0" lgico, cierra los interruptores habilitando la conexin elctrica entre la entrada y la salida o desconecta elctricamente la salida de la entrada. La enorme versatilidad de este componente permite que est disponible comercialmente en circuitos integrados como el 74125:

La burbuja inversora en las terminales de "habilitar" (enable) de cada una de las cuatro compuertas disponibles en este circuito integrado indica que con un "0" (puesto por ejemplo en la terminal 13) entonces la salida (disponible en la terminal 11) estar "activada" conectada elctricamente a la terminal respectiva de entrada (terminal 12), mientras que con un "1" se "romper" la conexin elctrica. En los circuitos integrados como el 74126 (similar al 74125 excepto que en los diagramas esquemticos del mismo no aparece dicha burbuja), entonces la "desconexin" elctrica se lleva a cabo aplicando un "0" en la terminal de "habilitar", y la "conexin" entre la entrada y la salida se lleva a cabo aplicando un "1" en la terminal de "habilitar". Otro componente ampliamente utilizado en la construccin de sistemas con

circuitos lgicos es el interruptor bilateral (bilateral switch), cuya accin se puede simbolizar de la siguiente manera:

Como puede verse en el smbolo del interruptor bilateral, este componente posee una caracterstica extraordinariamente interesante que lo hace sumamente til. Puede canalizar una seal en ambas direcciones, tanto de izquierda a derecha como de derecha a izquierda. Aplicando una seal en la terminal de la derecha que actuar como terminal de entrada In, si la terminal de Control est habilitada con un "1" lgico entonces la terminal de la derecha que estar actuando como terminal de salida Out ser conectada a la terminal de la izquierda permitiendo el paso de la seal que est siendo puesta en la terminal de la derecha. Pero si la seal es aplicada en la terminal de la izquierda, entonces ser canalizada hacia la terminal de la derecha, siempre y cuando la terminal de Control est habilitada con un "1". Y si la terminal de Control es inhabilitada con un "0", entonces la terminal de salida quedar desconectada elctricamente por completo de la terminal de entrada. En efecto, el switch bilateral es un interruptor elctrico como el que se utiliza para encender las lmparas de la sala, excepto que es un interruptor elctrico implementado con semiconductores de estado slido. Otra enorme ventaja del interruptor bilateral es que al establecer una conexin para el paso de seales elctricas el valor de dichas seales no est limitado a los valores extremos de voltaje que representan el "0" y el "1" lgico en un sistema, sino que puede pasar cualquier valor intermedio entre dichos voltajes. En efecto, el interruptor bilateral permite no slo el paso de seales digitales sino tambin el paso de seales analgicas tales como una seal de audio o de video. La enorme utilidad de un componente de este tipo hace que se venda comercialmente listo para ser utilizado en un algn diseo recurriendo a circuitos integrados tales como el 4066 construdo con tecnologa CMOS:

Obsrvese que un interruptor bilateral puede ser utilizado como un componente tri-state, pero un componente tri-state no puede ser utilizado como un interruptor bilateral en virtud de que en el componente tri-state la informacin slo puede flur en una direccin y no en ambas. Hasta aqu hemos supuesto que la aplicacin de un voltaje a la entrada de una funcin lgica bsica puede ser tomado como "1" mientras que la ausencia de dicho voltaje puede ser tomada como un "0", sin hacer distincin sobre si la ausencia de dicho voltaje se puede deber a que la terminal de entrada est conectada al polo negativo de la fuente de poder (denominado "tierra" elctrica) o si simplemente est desconectada por completo del resto del circuito, esto es, sin estar conectada ni al polo positivo ni al polo negativo de la fuente de poder. Sin embargo, esta desconexin total es lo que llamamos una terminal flotante, y aunque no proporciona voltaje alguno de referencia al componente lgico, el hecho de estar flotando la hace susceptible de recibir seales momentneas de "ruido elctrico" al estar actuando esa terminal sin conexin como una pequea antena de radio, seales de ruido que pueden introducirse en el componente lgico y ser amplificadas por el mismo, produciendo efectos sumamente indeseables en el procesamiento de la informacin digital que debe llevar a cabo el componente. Generalmente hablando, es muy mala prctica de diseo dejar terminales de entrada flotando sin estar conectadas ni a un "0" ni a un "1" lgico. En el siguiente diagrama tenemos un ejemplo de uno de los inversores lgicos NOT disponibles en el circuito integrado 74HC04 (equivalente funcionalmente al 7404), cuya entrada tiene un "0" cuando el interruptor S1 es cerrado, pero cuya entrada queda flotando cuando el interruptor es abierto:

Este sera el caso tpico de un mal diseo por el hecho de que al abrir el interruptor S1 no se est desconectando la terminal de entrada del "0" lgico para enviarla al "1" lgico sino que se le est dejando en un estado indefinido, en un estado flotante. Y el siguiente diseo es un diseo peor an porque si bien al estar abierto el interruptor S1 la entrada del NOT es definitivamente un "1", al ser cerrado el interruptor la entrada no es enviada al "0" lgico por la conexin a tierra que es proporcionada por el interruptor, sino que se crea directamente un corto circuito elctrico entre la fuente de poder Vcc y la tierra elctrica de un modo tal que se podra destrur al sistema:

Si el diseo digital que estamos llevando a cabo es de naturaleza tal que tenemos que conectar a la entrada de uno o varios de los componentes lgicos uno o varios interruptores elctricos (un caso tpico sera el interruptor de RESET como el que tienen algunas computadoras como "botn de pnico" para inicializar de nuevo la computadora desde el principio cuando sta se ha quedado atorada dentro de algn programa software mal elaborado), entonces para evitar el tener que dejar alguna terminal flotante podemos recurrir a una tctica conocida como el uso de las resistencias pull-up. A continuacin tenemos un ejemplo sobre cmo se aplica este tipo de diseo en la prctica:

En este caso, cuando el interruptor S1 se encuentra abierto la entrada en la terminal # 1 del NOT inversor est siendo alimentada a travs de la resistencia R1 con el voltaje Vcc, o sea con un "1" lgico, el cual al ser invertido sale como un "0" lgico en la terminal # 2. Al cerrarse el interruptor S1, la entrada del NOT inversor es "aterrizada" a "tierra", lo cual le pone un "0" que sale en la terminal # 2 como un "1", el cual a su vez puede ser la seal lgica de RESET al sistema para que se apague y se encienda de nuevo comenzando desde el principio. El valor de la resistencia R1 generalmente se selecciona entre los 10K (10 mil ohms) y los 47K (47 mil ohms), de modo tal que su consumo de corriente de la fuente de poder no sea oneroso. Siempre que veamos en un diagrama esquemtico este tipo de resistencias a la entrada de un circuito lgico sabemos que su propsito es actuar como resistencias de pull-up. Una variante al diseo que emplea resistencias pull-up es el diseo que emplea resistencias pull-down. El anterior circuito, implementado con una resistencia pull-down, se muestra a continuacin:

En este caso, la resistencia R1 es colocada entre la terminal de entrada del inversor NOT y la "tierra" elctrica. Cuando el interruptor S1 se encuentra abierto, la entrada en la terminal # 1 del NOT inversor est siendo conectada a la "tierra" elctrica, o sea a un "0" lgico, el cual al ser invertido sale como un "1" lgico en la terminal # 2. Al cerrarse el interruptor S1, la entrada del NOT inversor es alimentada a travs de la resistencia R1 con el voltaje Vcc, o sea con un "1" lgico, el cual al ser invertido sale como un "0" lgico en la terminal # 2. Obsrvese que la accin lgica de un diseo con una resistencia pull-down es inversa a la de un diseo con una resistencia pull-up. En los diseos que acabamos de ver, la nica ocasin en la cual el interruptor S1 puede quedar en un estado indefinido es en el momento justo en el que se est cerrando el contacto elctrico, o en el momento justo en el que se est abriendo el contacto. Es precisamente en este intervalo brevsimo de tiempo en el cual se puede generar una cantidad enorme de ruido que puede ser malinterpretada y mal procesada por un circuito lgico. Con el objeto de "limpiar" la seal de entrada por completo de modo tal que a la salida tengamos definitivamente un "0" o un "1" podemos refinar an ms nuestro diseo aadiendo un flip-flop RS, teniendo as lo que comnmente se conoce en la literatura tcnica como eliminador de rebotes (debouncer):

Para ver la forma en la cual trabaja este diseo cuyas entradas normalmente estn conectadas a la fuente de poder de +5 volts mediante resistencias pull-up, remitmonos al diagrama de tiempos en el cual la entrada A de este flip-flop RS construdo con bloques NAND es un "1" lgico mientras que la entrada B tiene puesto un "0" lgico, lo cual supone que el interruptor est movido hacia su posicin inferior. El interruptor utilizado en estos casos es generalmente del tipo que se vende en las ferreteras como un interruptor elctrico de "dos polos un tiro" o DPST (Double Pole Single Throw). Aqu suponemos que la salida Q del flip-flop es un "0" lgico. Estando el flip-flop R-S en el estado Q=0, si ponemos un "1" en la entrada B el flip-flop por su forma de operar simplemente retendr su estado anterior, o sea se mantendr en Q=0. Obsrvese cmo al subir la entrada B de "0" a "1" aparece en ella el inevitable ruido mientras el contacto elctrico termina por asentarse. Tras esto, con la terminal B puesta en "1", al bajar la entrada A de "1" a "0" la salida Q pasa limpiamente del estado Q=0 al estado Q=1. Los pulsos de ruido son ignorados por completo, porque para que pudieran tener algn efecto sobre la salida Q la terminal A tendra que estar puesta a "0". La accin final resultante es que tenemos un circuito sin terminales flotantes a la entrada en el cual la presencia del ruido elctrico al abrir o cerrar el interruptor ha sido eliminada por completo. Una forma en la cual podemos introducir informacin a un equipo o sistema que trabaje con lgica digital es por medio de una cinta ya sea de tipo magntico o fsicamente perforada de acuerdo con algn cdigo alfanumrico previamente convenido. Un agujero en la cinta representa un 1 y la ausencia del mismo representa un 0. Para ciertas aplicaciones, existen otros elementos que se usan conjuntamente con funciones lgicas; tales como el amplificador operacional, el comparador de voltaje, el conversor A/D que convierte una seal de voltaje analgica (esto es, una seal que vara en forma continua con una cantidad infinita de valores intermedios) en una seal digital y el conversor D/A cuya funcin es opuesta a la del conversor A/D. Sobre esto ltimo, el conversor A/D es prcticamente una necesidad para poder llevar a cabo la digitalizacin de cualquier seal proveniente del mundo real,

convirtindola al formato binario de "unos" y "ceros" que los circuitos lgicos son capaces de entender. As, para que un artista pueda grabar sus canciones y distriburlas en un disco CD, es necesario convertir sus interpretaciones al formato binario conforme va interpretando sus obras ante un micrfono, y este trabajo lo lleva a cabo la tarjeta de sonido (como las tarjetas de sonido fabricadas por la empresa Sound Blaster) a la cual va conectada el micrfono:

Para poder llevar a cabo el proceso de conversin de una seal analgica a su forma digitalizada, podemos utilizar un conversor A/D de alta calidad como el conversor Burr-Brown PCM1802 (el cual puede digitalizar una seal con 24 bits de precisin), o si estamos trabajando bajo un presupuesto limitado o diseando un circuito de bajo costo para producir muchas unidades en serie para el mercado consumidor, podemos recurrir a un circuito integrado econmico como el ADC0804 fabricado por la empresa National Semiconductor (el cual tiene una ms modesta capacidad de digitalizacin limitada a 8 bits), y cuya relacin de terminales "pins" es la siguiente:

Para poder digitalizar una seal analgica continua, es necesario llevar a cabo un muestreo (sampling) de la seal analgica de una manera como se muestra a continuacin (la seal analgica que est siendo muestreada es mostrada en color azul):

Aqu resulta ms que obvio que entre cada muestreo la porcin de la seal situada entre una toma de muestra y la toma de la muestra que le sigue se perder irremisiblemente. La prdida de informacin en el procedimiento de conversin a la forma digitalizada es un hecho ineludible. Lo nico que podemos hacer para minimizar la prdida de informacin es aumentar la frecuencia de los muestreos, aunque en la prctica hay lmites para ello por cuestiones de costo. Cada muestra de la seal ser convertida directamente a un formato binario dependiendo de la "altura" (el nivel de voltaje) de la seal en una manera como se muestra en la siguiente figura:

En este caso, la primera muestra tendr un nivel de voltaje que pudiera ser algo como +0.5 volts equivalente en nuestro diagrama a un nmero 5 en su formato binario (00000101), la segunda muestra tambin tendr un nivel de voltaje de +0.5 volts, pese a que la seal analgica tiene un voltaje un poquito mayor al que tena al ser tomada la primera muestra. La tercera muestra tendr un nivel de voltaje de +0.7 volts equivalente a un nmero 7 en su formato binario (00000111) mientras que la cuarta muestra tendr un nivel de voltaje de +1.2 volts equivalente al nmero 12 en su formato binario (00001100), y as sucesivamente. De este modo, el conversor A/D habr enviado al procesador digital la siguiente secuencia de nmeros binarios: 00000101 00000101 00000111 00001100 : : : : De este modo, conforme se va llevando a cabo el proceso de digitalizacin de la seal analgica, para una seal de entrada continua el conversor A/D estar enviando un torrente constante de palabras binarias (en la siguiente figura suponemos un proceso de conversin A/D de cuatro bits):

La ventaja de utilizar un circuito integrado como el ADC0804 ya mencionado es que hace todo el trabajo por nosotros. Para energizar el circuito, le aplicamos el polo positivo del voltaje de la fuente de poder al "pin" 20 que corresponde a la terminal Vcc y el polo negativo o "tierra" a los pins 8 (que corresponde a la terminal A GND) y 10 (B GND). El voltaje analgico a ser convertido que llega del exterior se le aplica al pin 6 que corresponde a la terminal de entrada (Vin+), y el equivalente binario del voltaje puesto en la entrada estar disponible desde los pins 11 (D7) al 18 (D0). La terminal 1 encargada de la funcin Chip Select (CS) que habilita al circuito debe ser conectada a "tierra" (a un "0" lgico) para que el circuito integrado est habilitado todo el tiempo. La notacin inversora lgica puesta encima del smbolo CS indica que la funcin es activada con un "0" y es desactivada con un "1", razn por la cual para habilitar al circuito integrado tenemos que ponerle un "0" y no un "1" en esta terminal de entrada. (Si se quiere utilizar ms de un conversor ADC0804 en un diseo, se puede utilizar esta terminal para controlar cul de ellos estar habilitado en un momento dado.) La terminal 7 (Vin-) es conectada a tierra. El ADC0804 incluye un oscilador interno que para poder funcionar requiere de dos componentes pasivos externos que sirven para fijar la frecuencia de operacin Fclk del reloj (la cual puede variar entre los lmites permisibles de 100 mil ciclos por segundo o 100 KHz, y 1.46 millones de ciclos por segundo o 1.46 MHz): un condensador que debe ser conectado entre la terminal 4 (CLK IN o CLK) y tierra, y una resistencia que debe ser conectada entre la terminal 4 y la terminal 19 (CLK R). A continuacin se muestra un diagrama de esto con componentes tpicos:

La otra alternativa consiste en aplicar directamente una seal de "pulsos de reloj" directamente a la terminal CLK del ADC0804, lo cual tiene la ventaja de sincronizar el comportamiento del conversor con un reloj "maestro" del sistema. Las terminales 2 (RD, o Read invertida lgicamente) y 3 (WR, o Write tambin invertida lgicamente) son utilizadas para leer o escribir datos hacia el sistema al cual est conectado el componente. La accin se lleva a cabo del modo siguiente (ampliar imagen):

Como podemos ver en el diagrama de tiempos, para inicializar la conversin la terminal WR debe ser pulsada brevemente con un "0" lgico o "tierra", lo cual en virtud de la lgica inversora utilizada en la notacin equivale a activar la funcin de la escritura de un dato (o mejor dicho, una conversin de una muestra analgica a su contraparte digital almacenando la conversin de la muestra dentro del componente) con un "1"; y la terminal tambin debe ser pulsada con un "0" lgico en caso de no estar conectada permanentemente al "0" lgico. La seal de requisicin de interrupcin INTR en la terminal 5 es usada por el componente para hacerle saber al sistema que el proceso de conversin A/D para la muestra tomada ha terminado y que la palabra binaria representante de dicha muestra ya se encuentra disponible. La aplicacin de un breve pulso de "0" en la terminal RD es utilizado para recoger el resultado binario de la muestra, o sea para la lectura del dato. El procedimiento inverso a lo que hemos visto, la conversin de una seal digital a una seal analgica, puede ser mejor ilustrado con la siguiente figura en la cual alimentamos una seal binaria a una bocina de un sistema de sonido (ampliar imagen para poder ver la accin animada):

En este diagrama se supone que tenemos todas las cinco terminales de entrada (marcadas como 16, 8, 4, 2 y 1) conectadas a la misma fuente de voltaje cuando se pone un "1" lgico en dichas terminales. Lo nico que cambia es el valor de la resistencia de cada terminal hacia la bobina de la bocina. Al principio, cuando la seal binaria de entrada es "0" en todas las terminales, o lo que es lo mismo, al poner la palabra binaria "00000" en la entrada, no hay voltaje alguno aplicado en ninguna de las terminales, y por lo tanto no se produce corriente elctrica alguna en ellas. Al cambiar la seal binaria de entrada de "00000" a "00001", esto tiene el efecto de poner en la terminal 1 un "1" lgico, con lo cual fluir una corriente elctrica a travs de la resistencia de 256 ohms hacia la bobina de la bocina, lo cual a su vez crear un campo magntico que mover al cono de la bocina un poco hacia adelante (hacia la derecha en la figura). La siguiente seal binaria de "00010" quita el "1" de la terminal 1 y lo pone en la terminal 2. Pero como la resistencia que va de la terminal 2 hacia la bobina de la bocina es de 128 ohms, o sea la mitad del valor de la resistencia que va de la terminal 1 a la bocina, la corriente electrica que fluir de la terminal 2 hacia la bocina ser el doble de la corriente elctrica que puede flur de la terminal 1 hacia la bocina, lo cual puede mover al cono de la bocina con una fuerza dos veces mayor. Puesto que cada una de las resistencias conectadas en las terminales de entrada tiene un valor que es la mitad de la resistencia que le precede, la corriente elctrica ir doblando en intensidad conforme va aumentando la palabra binaria. Si la corriente elctrica que puede enviar la terminal 1 hacia la bocina es de 1 miliampere cuando tiene puesto un "1" lgico, entonces la terminal 2 enviar una corriente de 2 miliamperes, la terminal 4 enviar una corriente de 4 miliamperes, la terminal enviar una corriente de 8 miliamperes y la terminal 16 enviar una corriente de 16 miliamperes. De este modo, la palabra binaria "00101" enviar una corriente de 5 miliamperes, al sumarse los 4 miliamperes

que enva la terminal 4 al 1 miliampere que enva la terminal 1. Es as como el cono de la bocina se va moviendo hacia la derecha conforme va aumentando el valor de la palabra binaria. La figura muestra cmo se mueve el cono de la bocina con una palabra binaria que va aumentando (en el sentido binario) de uno en uno. Pero podemos meter cualquier palabra de cinco bits formada con cualquier combinacin de "unos" y "ceros". Podemos ir metiendo una secuencia binaria como la siguiente: 00101 00101 00111 01100 : : : : Si suponemos que la secuencia de palabras binarias se va introduciendo rpidamente en la bocina a una rapidez mayor que la rapidez con la cual el salto de una palabra binaria a la siguiente pueda ser detectada por el odo, entonces nuestro odo percibir una ilusin de continuidad, del mismo modo que las imgenes de una pelcula no son vistas como 15 cuadros por segundo sino como algo "continuo". Los "saltos" de una palabra binaria a la siguiente pasarn desapercibidos para el odo, y el sonido que escucharemos ser un sonido perfectamente "normal". Obsrvese que esta es la misma secuencia binaria como la que obtuvimos anteriormente al analizar la discretizacin de una seal continua, posiblemente una seal obtenida al enviar algn sonido de un micrfono a una tarjeta de audio. Aqu estamos recuperando de nuevo el sonido del formato binario. Y de hecho, esta es la forma en la cual nosotros podemos escuchar la msica que est digitalizada en formato binario MP3, la accin de escuchar piezas musicales de un archivo MP3 es esencialmente un proceso de conversin D/A. Para la conversin eficiente de una seal digital cualquiera a una seal analgica, o sea la conversin D/A, podemos usar un componente de la misma empresa National Semiconductor como el DAC0830 o su equivalente el DAC0832, cuya relacin de terminales "pins" es la siguiente:

y cuyo diagrama funcional se muestra a continuacin para mayor claridad:

Como puede verse en el diagrama funcional, para poder utilizar este conversor D/A es necesario amplificar su seal de salida, puesta entre las terminales IOUT1 (en la terminal 11) e IOUT2 (en la terminal 12), conectndolas a un amplificador operacional (vase el Suplemento # 6: El amplificador operacional). La palabra binaria a ser convertida a seal analgica es puesta en las terminales designadas por el fabricante como DI (Data Input)desde DI0 (en la terminal 7) hasta DI7 (en la terminal 13), designadas en el diagrama funcional simplemente como D. El voltaje de paso de salida del conversor D/A es definido por el voltaje de referencia aplicado en la terminal designada por el fabricante como -Vref (terminal 8 del componente), dividido entre 255. Por ejemplo, si el voltaje Vref, es igual a -5.0 volts, entonces el voltaje de paso ser +0.0196 volt. Esta es la magnitud en la que ir incrementando la salida analgica por cada aumento de un "1" en la seal binaria que est siendo convertida. Las otras terminales tienen funciones similares a las ya descritas para el conversor ADC0804. Es indudable que las aplicaciones de los circuitos lgicos van en aumento as como la proliferacin de "cajas negras" cada vez ms complejas capaces de

llevar a cabo funciones cada vez ms y ms sofisticadas. Y podremos esperar ms sorpresas en los aos venideros.