TEMA 10: DECODIFICADORES Y CODIFICADORES NIVEL SSI Y MSI. APLICACIONES



Los sistemas digitales contienen datos o información que está en alguna forma de código binario, los cuales se operan de alguna manera. En este tema se examinan circuitos combinatorios, cuyas aplicaciones incluyen:

  1. Cambio de datos de una forma a otra.
  2. Tomar datos y enviarlos a uno de varios destinos.
Muchos de los circuitos lógicos que cumplen estas funciones están ahora como circuitos integrados MSI. Por esta razón, no nos concentraremos en el diseño de estos circuitos, sino que investigaremos cómo se usan solos o en combinación, para cumplir varias operaciones sobre datos digitales. Las operaciones que se discuten son: Decodificación y codificación.

DECODIFICADORES

Un decodificador es un circuito combinacional que convierte la información binaria de n líneas de entradas a un máximo de 2n líneas únicas de salida. Para cada una de las combinaciones de entrada sólo una de la salidas estará activada con un 1 (para cuando es lógica positiva) y todas las otras salidas estarán en 0. Muchos decodificadores se diseñan para producir salidas activas con un 0 (lógica negativa donde la salida seleccionada es 0 mientras que las otras son 1). Esto último se indica siempre por la presencia de pequeños círculos en las líneas de salida del diagrama del decodificador y ésto es de gran utilidad a la hora de diseñar circuitos debido a que los decodificadores son muy usados para direccionamiento de periféricos donde dichos periféricos tienen una línea de habilitación (indicada con una E por ENABLE) que regularmente es de lógica negativa (indicada con el círculo en la entrada o con la ralla sobre la E). Si la información decodificada tiene condiciones no usadas o “irrelevantes”, entonces el decodificador tendrá menos de 2n salidas como es el caso del decodificador BCD a decimal que tiene 4 bits de entrada (necesarios para expresar los números BCD) y sólo 10 líneas de salida. Es interesante comentar que en algunos decodificadores de este tipo cuando se agrega a la entrada un código que no es BCD válido ninguna de las salidas se activa. Recuerden que en todo caso SÓLO UNA SALIDA ESTARÁ ACTIVA.

La siguiente figura muestra un decodificador de 3 entradas y 23 = 8 salidas. Observen que la única diferencia significativa con respecto al demultiplexor es que no tiene la “línea de entrada” características de ellos. Este decodificador se le conoce como “Decodificador Binario a Octal” (o “Convertidor de Binario a Octal” o incluso “decodificador de 3 a 8”).


Este circuito muestra el decodificador con salida positiva. Si lo quisiéramos con salida negativa los integrados a la salida deberían ser compuertas NAND. Se observa con facilidad (si lo desea haga la tabla de la verdad) que este decodificador tendrá únicamente una salida activa a la vez. OBSERVE que cada una de las salidas corresponde al término mínimo de la entrada. Esta característica es muy útil a la hora de implementar funciones lógicas con decodificadores.

En general, los decodificadores tienen n líneas de entradas y 2n líneas de salida y de estas últimas sólo estará activa aquella que sea el “término mínimo” (y sólo ella ya que las salidas son mutuamente exclusivas) representado por la entrada.

CODIFICADORES

Un codificador, en cambio, tiene un número de líneas de entrada, de las cuales sólo una es activa (ya sea con lógica positiva o negativa) en un tiempo dado y produce un código de salida de N bits, dependiendo de cuál entrada está activa. O sea, el codificador hace el proceso contrario del decodificador.

Se vio que un decodificador binario a octal acepta un código binario de entrada de 3 bits y activa una y sólo una de las 8 líneas de salida. Un codificador octal a binario opera de la manera opuesta. Acepta ocho líneas de entrada y produce un código de 3 bits a la salida. Hagamos la tabla de la verdad, concluyamos cuales son las funciones y luego veamos el gráfico que nos muestra esta implementación a nivel SSI de este circuito:

Entradas

Salidas

A0

A1

A2

A3

A4

A5

A6

A7

O2

O1

O0

1

0

0

0

0

0

0

0

0

0

0

0

1

0

0

0

0

0

0

0

0

1

0

0

1

0

0

0

0

0

0

1

0

0

0

0

1

0

0

0

0

0

1

1

0

0

0

0

1

0

0

0

1

0

0

0

0

0

0

0

1

0

0

1

0

1

0

0

0

0

0

0

1

0

1

1

0

0

0

0

0

0

0

0

1

1

1

1

De esta tabla podemos concluir que:

O2 = A4 + A5 + A6 + A7

O1 = A2 + A3 + A6 + A7

y

O0 = A1 + A3 + A5 + A7

Por lo que el esquemático queda:


Se supone que una y sólo una de las entradas es 1 a la vez, así que sólo hay 8 condiciones posible de entrada. El circuito está diseñado de tal manera que cuando A0 es 1, se genera a la salida el código binario 000. Cuando A1 es 1, se genera el código binario 001, cuando A2 es 1, se genera el código binario 010 y así sucesivamente. El diseño del circuito es muy simple, puesto que involucra analizar cada bit de salida y determinar para cuáles casos de entrada ese bit es 1 y luego pasar los resultados por una compuerta OR. Por ejemplo, la tabla funcional muestra que O0 (que es el bit menos significativo del código de salida) debe ser 1 cuando cualesquiera de las entradas A1, A3, A5 o A7 sean 1. Se observa también que que la entrada A0 no se usa nunca ya que cuando este bit es “uno” todas las salidas deben ser “cero”, pero resulta que si todas las entradas son cero (indicando que no hay un número octal a la entrada, por ejemplo) todas las salidas del circuito también serán cero. Esto genera una discrepancia que puede ser solventada agregándole otra salida al circuito que se activará única y exclusivamente cuando todas las entradas sean cero y de esta forma indicarnos cuando se cumple esa condición (fácilmente implementable con una OR).

Por otro lado está la posibilidad de que haya más de un uno en la entrada (una situación inválida pero por 'x' o por 'y' posible). Las implementaciones integradas de “codificadores” resuelven este problema agregando un circuito de alta prioridad para estos casos. La alta prioridad lo que hace es que si el uno de la posición cero está activo, asume que el número a la salida es el cero sin importar lo que exista en el resto de las entradas. Si el la posición cero está en cero la la uno en uno entonces a la salida habrá un uno sin importar el resto de la entrada y así sucesivamente.

Como ejercicio, diseñe un circuito codificador de 4 a 2. La salida deberá ser cero (00) en el caso que no hay ninguna entrada al codificador (cuando la entrada tiene puros ceros), en todos los casos que no sean válidos (cualquier caso que tenga más de un uno) y cuando la entrada es propiamente la que corresponde al cero (I0=1) . Para solventar la discrepancia agregue otra salida al circuito que será “uno” cuando la entrada si sea válida.

APLICACIONES

Veamos algunas aplicaciones con decodificadores.

Diseñe un decodificador de BCD a decimal con compuertas (a nivel SSI). En realidad este circuito ya existe a nivel MSI pero se hace este ejercicio para dar a conocer como se diseña y que se debe esperar de él. Este un caso en el que no se tienen para n bits de entrada 2n salidas ya que los casos del 10 al 15 no son válidos (asumimos que no son posibles y las tomaremos como “condiciones irrelevantes”). Veamos la tabla de la verdad:

A

B

C

D

D0

D1

D2

D3

D4

D5

D6

D7

D8

D9

0

0

0

0

1

0

0

0

0

0

0

0

0

0

0

0

0

1

0

1

0

0

0

0

0

0

0

0

0

0

1

0

0

0

1

0

0

0

0

0

0

0

0

0

1

1

0

0

0

1

0

0

0

0

0

0

0

1

0

0

0

0

0

0

1

0

0

0

0

0

0

1

0

1

0

0

0

0

0

1

0

0

0

0

0

1

1

0

0

0

0

0

0

0

1

0

0

0

0

1

1

1

0

0

0

0

0

0

0

1

0

0

1

0

0

0

0

0

0

0

0

0

0

0

1

0

1

0

0

1

0

0

0

0

0

0

0

0

0

1

1

0

1

0

DON'T CARE

1

0

1

1

1

1

0

0

1

1

0

1

1

1

1

0

1

1

1

1

De esta tabla se deducen las siguientes funciones:

D0=∑(0)+d(10,11,12,13,14,15)

D1=∑(1)+d(10,11,12,13,14,15)

D2=∑(2)+d(10,11,12,13,14,15)

D3=∑(3)+d(10,11,12,13,14,15)

D4=∑(4)+d(10,11,12,13,14,15)

D5=∑(5)+d(10,11,12,13,14,15)

D6=∑(6)+d(10,11,12,13,14,15)

D7=∑(7)+d(10,11,12,13,14,15)

D8=∑(8)+d(10,11,12,13,14,15)

D9=∑(9)+d(10,11,12,13,14,15)

Estas funciones pueden trabajarse por mapa de Karnaugh igual que hemos hecho hasta ahora, pero en el caso de funciones de conmutación (donde cada función tiene sólo una posible salida en uno) puede usarse un sólo mapa para todas las funciones. (Si lo desea haga los mapas de las funciones por separado y demuestre que se cumple).


Por lo tanto las funciones quedan:

D0(A,B,C,D)=A'B'C'D', D1(A,B,C,D)=A'B'C'D, D2(A,B,C,D)=B'CD', D3(A,B,C,D)=B'CD, D4(A,B,C,D)=BC'D', D5(A,B,C,D)=BC'D, D6(A,B,C,D)=BCD', D7(A,B,C,D)=BCD, D8(A,B,C,D)=AD' y D9(A,B,C,D)=AD

por lo que el esquemático nos quedaría:




Este circuito es sólo válido si NO es posible opciones diferentes de BCD a la entrada. Si se quiere que todas las salidas sean cero para casos no válidos en BCD debe hacerse otro circuito. Hágalo como ejercicio.

Otro.

Como se comentó en el tema anterior, los decodificadores (o demultiplexores) también pueden ser usados para el desarrollo de circuitos combinacionales con la ayuda de compuertas OR a la salida para “sumar” los términos mínimos que forman la función. Si nuestro diseño requiere más de una función de salida, entonces podemos hacer uso de mas de una compuerta OR (una para cada función requerida). Veamos un ejemplo: Construir un circuito sumador completo de dos bits con un decodificador y dos compuertas NAND. (OJO, SI pedí implementar con NAND, no con OR)

Ya sabemos que nuestras funciones para un sumador completo de 2 bits. Asumiendo que A y B son los bits a sumar y C el acarreo de entrada tenemos que:

S(A,B,C)=∑(1,2,4,7)

Co(A,B,C)=∑(3,5,6,7)

Nuestro sumador quedaría:




Observe bien este circuito. El decodificador tiene las salidas con “lógica negativa” por lo que tenemos a la salida NO son los términos mínimos sino los términos máximos. Por esta razón nuestra implementación puede realizarse fácilmente con compuertas NAND (o incluso AND; hágalo como ejercicio). Recuerden que, por ejemplo la función S, puede ser expresada en una suma de productos (con términos mínimos) o como un producto de sumas (con términos máximos). Así que S=m1+m2+m4+m7=M0M3M5M6=(M1M2M4M7)' (ya que M1M2M4M7 es S') y es exactamente esta última forma la que estamos aprovechando. Hacemos el análisis recíproco para Co. Como ejercicio, realice la misma implementación pero con compuertas OR.

El método del decodificador puede usarse para implementar cualquier circuito combinacional pero en realidad debe pensarse bien lo que se va a hacer debido a que pueden existir soluciones más óptimas. Este método es principalmente útil para el desarrollo de circuitos con varias salidas ya que para una sola salida yo diría que es preferible usar la implementación con multiplexores tal y como se vio en el tema anterior.

La mayoría de las aplicaciones con codificadores que he visto son de implementación a nivel SSI. Ya de eso hablamos antes así que no repetiré otros casos de ello.



EJERCICIOS

  1. Como ya se planteó haga el BCD a decimal con puro cero a la salida si la entrada NO es BCD válido.

  2. Como ya se planteó, haga el sumador completo de 2 bits con un decodificador y compuertas OR.

  3. Diseñe un decodificador de 2 a 4 con una entrada de habilitación. La salida es con lógica negada. La entrada de habilitación (E por Enable) es de lógica positiva. En el caso de que E=1, todas las salidas son uno (recuerde que el circuito tiene salida con lógica negativa así que este es el comportamiento normal). Si E=0, la salida del decodificador cero cero dependiendo de la entrada. Haga el esquemático.

  4. Diseñe un decodificador de 4 a 16 con 2 decodificadores 3 a 8. TIP: Recuerde que los decodificadores tienen la entrada ENABLE.

  5. Realice las siguientes funciones con decodificadores:

  1. Un circuito tiene 5 entradas A, B, C, D y E. Considere que A es el más significativo. De las entradas, B, C, D y E representan un número BCD. A será una entrada de control que cumple que:

    Diseñe un circuito utilizando un decodificador y compuertas externas, considerando lógica negativa y que 0 es par.

  1. Describa como funciona y como está estructurado un codificador de decimal a BCD con salidas de lógica negativa. Haga la tabla de la verdad.



En la próxima clase se verá el TEMA 11: Display de 7 segmentos, circuito manejador de display.