TEMA 9: MULTIPLEXORES Y DEMULTIPLEXORES A NIVEL SSI Y MSI. APLICACIONES

MULTIPLEXORES

En las comunicaciones, y sistemas de computadora se ejecutan muchas operaciones mediante circuitos lógicos combinatorios. Cuando un circuito se ha diseñado para efectuar alguna tarea en una aplicación, a menudo también encuentra empleo en otras diferentes aplicaciones. En este tema se tratarán los multiplexores y demultiplexores tanto a nivel SSI como MSI y como podemos aprovechar sus funciones en el desarrollo de circuitos combinacionales.


Un Multiplexor o “Selector de datos” es un circuito lógico que acepta varias entradas de datos y permite que sólo una de ellas pase a un tiempo a la salida. El enrutamiento de la entrada de datos hacia la salida está controlado por las entradas de selección (a las que se hace referencia a veces como las entradas de dirección).

El multiplexor, también conocido como MUX, actúa como un conmutador multiposicional controlado digitalmente, donde el código digital aplicado a las entradas de selección controla cuáles entradas de datos serán conmutadas hacia la salida. Por ejemplo, la salida será igual a la entrada de datos, llamémosle D0, para el código de entrada de selección que sea cero (ABC=000 en el diagrama de abajo); la salida será igual D1 para cuando el código de selección sea uno y así sucesivamente. Establecido de otra manera, un multiplexor selecciona 1 de N fuentes de datos y transmite los datos seleccionados a un solo canal de salida. Esto se llama multiplexión o multiplexaje.

Los multiplexores son representados en diagramas de bloques como trapezoides isósceles. A continuación muestro el esquemático de un multiplexor de dos entradas y una salida con su respectivo bit de selección:


ó


Un ejemplo de multiplexores (aunque no digitales como los que vemos aquí) se ve en las líneas telefónicas. Éstas usan exactamente este principio. Transmiten varias llamadas telefónicas (señales de audio) a través de un único par cableado usando la técnica de “multiplexado” y cada señal de audio va únicamente al receptor al que está destinado.

Una aplicación común para los MUX es encontrado en las computadoras, en las cuales la memoria dinámica usa las mismas líneas de dirección para el direccionamiento tanto de las filas como de las columnas. Un grupo de multiplexores es usado para primero seleccionar las direcciones de la columna y luego cambiar para seleccionar la de la fila. Este esquema permite que grandes cantidades de memoria sean incorporadas dentro de una computadora mientras se limita a la vez la cantidad de conexiones de cobre requeridas para conectar la memoria al resto del circuito. Por eso es que también se les conoce a veces como “selectores de datos”.

Ya se vio el símbolo esquemático del multiplexor de 2 entradas y una salida pero los multiplexores no están limitados a 2 entradas. Si las líneas de selección son dos podemos alternar entre 4 datos de entrada, si son 3 entre 8 y así sucesivamente. A continuación se muestran los símbolos esquemáticos de los multiplexores de “4 a 1” (cuatro entradas y una salida), “8 a 1” (ocho entradas y una salida) y “16 a 1” (dieciséis entradas y una salida) con sus respectivas líneas de selección, respectivamente.








En todos los casos la salida es Z, las entradas de selección S y el resto es la entrada que será multiplexada.

A veces pueden verse en forma rectangular asemejando el circuito integrado que representan pero en este caso siempre deben ir bien identificados para poder saber que es. Por ejemplo:


representa (como se ve indicado) un multiplexor a nivel MSI de 8 entradas (que implica las 3 líneas de selección) y una salida (F). Las entradas de selección, o sea, quienes indicarán cual de las entradas será reflejada en la salida, vienen dadas por el código binario representado por ABC. ABC son las “entradas de direccionamiento” o de dirección o de selección, como usted lo quiera llamar, ya que estas serán quienes indican el dato a acceder. Este mismo concepto es el usado en las memorias.

Veamos ahora la implementación de multiplexores a nivel SSI. Para el caso de un multiplexor de 2 entradas y una salida (quien por supuesto requiere sólo una línea de selección) el circuito sería:


El uso del inversor dos veces NO es absolutamente necesario. Se observa que cuando la entrada de selección “A” tiene un valor cualquiera, una de las compuertas AND tendrá un UNO en una de sus entradas y la otra un CERO. La que tiene el CERO dejará pasar sólo el CERO pero el que tenga el valor de UNO dejará pasar la otra entrada de la AND intacta y será este valor quien se refleje a la salida. Pueden verificar este circuito a través de su tabla de la verdad. Veámosla a continuación:

A

X0

X1

X

0

1

1

1

1

0

1

0

1

0

0

0

0

1

1

1

1

1

0

0

0

1

1

0

0

0


Se ve aquí que cuando que cuando A=0, X=X0 y cuando A=1, X=X1. Esto representa la función booleana: X = AX1+A'X0 que es exactamente la implementación mostrada.


Veamos como se ven las implementaciones de 4 a 1 y de 16 a 1:






Analícenlos y si lo desean hagan sus tablas de la verdad.

Se ve que en el diseño de multiplexores de n entradas se requerirá siempre \left \lceil \log_2(n) \right \rceil líneas de selección (que daría un número entero si n es potencia de 2). Claro que, aunque es lo normal, el multiplexor no necesariamente debe tener 2m líneas de entrada con m entero pero en todo caso se requerirán tantas líneas de selección que hagan suficientes combinaciones para direccionar todas las entradas. Por ejemplo, para multiplexar 3 ó 4 entradas se requieren 2 líneas de selección. Si se requiere multiplexar 5, 6, 7 ú 8, entonces se necesitan 3 líneas de selección y así sucesivamente.

El Multiplexor es típicamente usado para combinar dos o más señales digitales en una sola línea pero no es la única forma. También puede conseguirse de otras características pero aquí mencionaré sólo un par de ejemplos de multiplexores:

Algunas designaciones para multiplexores de la familia TTL son: 74153 que son dos multiplexores 4 a 2, 74157 que son cuatro MUX 2 a 1 y el 74151 que es un MUX 8 a 1.

Los circuitos multiplexores pueden incluir también una línea de habilitación indicado con una E por Enable, pero de eso hablaremos en el próximo tema.

Como último comentario de lo multiplexores quiero agregar que estos pueden ser organizados en cascada (tal como los sumadores que vimos en el tema anterior) para implementar multiplexores más grandes. Por ejemplo podemos usar multiplexores de 2 a 1 para implementar un multiplexor de 4 a 1 (o de 4 a 2 que si lo piensan se darán cuenta de que es elemental) o incluso para implementar multiplexores de más entradas. Veamos específicamente el ejemplo de implementación de un multiplexor de 16 a 1 usando sólo multiplexores de 4 a 1. El dato de entrada es X formado por los 16 bits x0, x1,...,x14 y x15. Las líneas de selección vienen dadas por S. OJO con este ejemplo. Analícelo y entiéndalo.


En los multiplexores vemos también la entrada de enable E (que además son de lógica negativa que quiere decir que los IC's se activaran con un cero). Ese es el bit de habilitación que les dije veremos en el próximo tema.



DEMULTIPLEXORES

Es lo inverso a un multiplexor. Los demultiplexores o DEMUX tienen una entrada que es transferida a una de las m posibles líneas de salida. La línea m vendrá direccionada por los n bits de selección donde lo normal es que 2n=m. Se podría decir que, como profundizaremos en el próximo tema, cada salida del demultiplexor corresponde con el término mínimo del número binario que se encuentra en las líneas de selección.

Un uso popular del DEMUX es como decodificador y por eso suele usarse el término Demultiplexor/Decodificador indistintamente. Ya hablaremos de él en próximo tema, pero el propósito principal de un decodificador no es tanto transferir una entrada a una de las salidas sino llevar un valor binario (el de la entrada de selección) a una representación de una única línea a la salida. Esta función es de gran utilidad en la decodificación de la dirección en los microporcesadores por ejemplo cuando involucra la selección de uno de multiples dispositivos (como por ejemplo la memoria). De hecho, la mayoría de los decodificadores son de lógica invertida (o negativa) debido a que la mayoría de los dispositivos periféricos de los microprocesadores son activados por una señal baja (como el pin E' que vimos en los multiplexores en cascada hace un par de párrafos).

Los DEMUX también suelen incluir un bit de entrada de habilitación. Algunos DEMUX de la familia TTL son: el 74139 que son dos DEMUX de 1 a 4 con salidas invertidas (lógica negada), el 74156 que son dos DEMUX de 1 a 4 con salida de colector abierto (Open Collector), el 74138 que es un DEMUX de 1 a 8 con salida invertida, el 74156 que es un DEMUX de 1 a 16 y el 74159 que es de 1 a 16 con salida a colector abierto.

Veamos a continuación la implementación de demultiplexores a nivel SSI. Para el caso de un demultiplexor de 1 a 2 sería:




Se observa que el circuito tiene sólo una entrada (representada por IN), dos salidas (OUT1 y OUT0) y el bit de dirección (A). El proceso es justo el contrario del multiplexor. Para los casos de DEMUX de 1 a 4 y de 1 a 8 tenemos las siguientes implementaciones.




Si lo desean hagan sus tablas de la verdad para que les facilite entender el comportamiento de estos circuitos .


APLICACIONES

Resulta que algunas veces un circuito diseñado para cierto fin suele ser de gran utilidad en la resolución de problemas que no fueron exactamente para el que fueron diseñados. El multiplexor es una de esos ejemplos. Una poderosísima utilidad de los multiplexores está en la implementación de funciones lógicas.

Vamos a estudiar algunas posibilidades de implementación de funciones lógicas mediante multiplexores. Veamos el siguiente ejemplo:

F(x2, x1, x0 ) = ∑(2,5,6)

Sabemos que esta función es uno para los términos mínimos 2, 5 y 6. Esta función tiene 3 variables que pueden formar 8 combinaciones. La forma más sencilla de implementación, que es la que veremos a continuación, es a través de un multiplexor de 8 a 1. Veamos la tabla de la verdad de la función y la implementación con el multiplexor:


Dado que se trata de una función de tres variables, el método acabado de sugerir implica en principio utilizar un multiplexor de 8 canales (es decir,con 3 entradas de control). Hay que conectar las variables x2, x1 y x0 a las entradas de selección e introducir en cada uno de los canales el valor ("0" o "1") que toma la función para cada combinación de dichas variables. Observe la figura y note que el paso de una a otra es inmediato ya que el multiplexor tiene cableada las entradas 2, 5 y 6 a uno y el resto a cero. De esta forma se garantiza que para las combinaciones de las variables X (quien se colocó en las líneas de selección) para los que se requiere que la función sea uno harán f=1.


Veamos otro ejemplo. F(A,B,C)=∑(3,5,6,7). Con un multiplexor de 8 entradas se vería:


Es fácil de observar el porque de ésto, así que no lo analizaremos más.

Llegados a este punto, una pregunta que podemos hacernos es si es posible implementar funciones de n variables mediante multiplexores con menos de n entradas de control. La respuesta es afirmativa, aunque para ello será necesario en general añadir algún módulo o conjunto de puertas. Siempre podremos implementar funciones lógicas de 2n combinaciones con multiplexores de 2n-1 entradas. O lo que es lo mismo, siempre podremos implementar funciones lógicas de n variables con un multiplexor de n-1 líneas de selección. Veamos el siguiente ejemplo:

F(A,B,C) = ∑(1,3,5,6)

Esta función tiene 8 (23) posibles combinaciones de variables (3 variables) pero debemos implementarlo con un multiplexor de sólo dos (3-1) entradas de selección, o sea, un multiplexor de 4 (22) a 1. Llamemos a la entrada del multiplexor I (I3 I2 I1 I0). La tabla de la verdad de la función F es:

A

B

C

F

0

0

0

0

0

0

1

1

0

1

0

0

0

1

1

1

1

0

0

0

1

0

1

1

1

1

0

1

1

1

1

0

Lo primero que debemos hacer es decidir como vamos a trabajar con las variables. En estos casos sólo n-1 de las variables de la función se usarán en las líneas de selección y la otra restante se usará a la entrada del multiplexor. Es este caso particular sólo dos de las variables pueden ser usadas en las líneas de selección. He decidido que éstas serán B y C. Por lo tanto A será usada a la entrada del multiplexor. Ok, lo primero que haremos será formar una tabla. Ésta deberá tener todas las posibles entradas del multiplexor como títulos de las columnas y las dos posibles combinaciones de la variable que decidimos usar en la entrada (en nuestro caso A en sus formas A' [0] y A [1]) como títulos de las filas.


I0

I1

I2

I3

A'





A





A cada celda de la tabla le corresponderá un término mínimo. Vemos que cuando A=0 (A'), los términos de la función van del 0 al 3 y cuando A=1 (A) van de 4 a 7. O sea que la tabla deberá ser llenada con:


I0

I1

I2

I3

A'

m0

m1

m2

m3

A

m4

m5

m6

m7

Aquí usted podría sólo encerrar en círculos los términos mínimos que sean uno en la función (en nuestro caso m1, m3, m5 y m7 ) para procesar la tabla. Yo sencillamente voy a encerrarla con paréntesis (únicamente por comodidad y no tener que estar haciendo más gráficos). También suele colocarse sólo el número del término en vez del mn. Entonces, colocando los “círculos” donde corresponde tenemos:


I0

I1

I2

I3

A'

0

(1)

2

(3)

A

4

(5)

(6)

7

Aquí empezamos el análisis. Cuando en una columna de la tabla no hay ningún termino en círculo como es el caso de la primera columna, concluimos que en esa entrada del multiplexor debe ir 0 (cero). Cuando en una columna AMBOS términos aparecen en círculo decimos que en esa entrada del multiplexor debemos colocar un uno. Cuando en una columna sólo UNO de los términos aparece en círculo, decimos que en la entrada correspondiente del multiplexor se colocará la variable escogida (en nuestro caso la A) en la forma que aparezca con círculo que aquí sería A para la tercera columna y A' para la cuarta columna. Regularmente nuestra tabla, luego del análisis, quedaría:


I0

I1

I2

I3

A'

0

(1)

2

(3)

A

0

(5)

(6)

7


0

1

A

A'

Por lo tanto, nuestra implementación de la función F de tres variables con un multiplexor de 4 a 1 (con sólo dos líneas de selección) nos quedaría:


La entrada I1 puede ir directamente conectada a UNO (1 ó Vcc) y ahorrarnos ese inversor.

Yo decidí poner B y C en las entradas de selección pero podría ir cualquier combinación de dos variables. Lo único que hay que tener en cuenta es que la tabla no lleva los términos mínimos organizados de la misma forma. Supongamos que queremos poner A y B en las líneas de direccionamiento, entonces nuestra tabla sería:


I0

I1

I2

I3

C'

0

2

4

(6)

C

(1)

(3)

(5)

7


C

C

C

C'


Ya que C es el bit menos significativo y para las casos donde A y B son cero con C' tenemos el cero y con C el uno, Si A=0 y B=1 entonces en C' tenemos 2 y en C tres, y así sucesivamente. Aquí ya sólo nos quedaría implementar el circuito que sería colocando A en S1, B en S0, C en I0 e I1 e I2 y por último C' en I3. Haga el esquemático.

Por último con respecto a este mismo ejemplo, demuestre que si quisiéramos colocar B en la entrada, la tabla quedaría:



I0

I1

I2

I3

B'

0

(1)

4

(5)

B

2

(3)

(6)

7


0

1

B

B'

y dibuje el esquemático.


Veamos como último ejemplo de ésto la función F(A,B,C,D)=∑(0,1,3,4,8,9,15). Suponiendo que queremos cablear A en la entrada, nuestra tabla aquí sería:



I0

I1

I2

I3

I4

I5

I6

I7

A'

(0)

(1)

2

(3)

(4)

5

6

7

A

(8)

(9)

10

11

12

13

14

(15)


1

1

0

A'

A'

0

0

A

Y el circuito sería:



Aquí también podemos eliminar el uso de uno de los inversores y cablear directo a 0 ó 1 dependiendo del caso. Haga este ejercicio para los casos con B, C ó D a la entrada del multiplexor.


Diseño combinacional con demultiplexores.

Este tema será visto mejor más adelante con el uso de decodificadores pero igual será comentado brevemente aquí. Al presentar los demultiplexores se comentaba el hecho de que cada una de las salidas coincide algebraicamente con un término mínimo diferente de las variables de entrada. Por tanto es inmediato sintetizar directamente cualquier función de n variables mediante un demultiplexor con n líneas de selección y una puerta OR que agrupe las salidas correspondientes a los términos mínimos que aparecen en la expresión canónica como suma de productos de la función. Veamos por ejemplo la implementación de un generador de un bit de paridad impar para un código de 3 bits. Su tabla de verdad sería:

A

B

C

f

0

0

0

0

0

0

1

1

0

1

0

1

0

1

1

0

1

0

0

1

1

0

1

0

1

1

0

0

1

1

1

1


No hacemos mapa de Karnaugh ya que simplificar la función no es requerido en este tipo de ejercicios debido a que la implementación será hecha a nivel MSI y lo único que nos interesa realmente es que términos mínimos conforman la función.

De la tabla de la verdad anterior podemos concluir que la implementación de esa función lógica a través de un demultiplexor sería:


La entrada E' es el bit de habilitación del IC.



EJERCICIOS

  1. Implemente un multiplexor de 8 bits de entrada (dos nibbles indicando dos datos diferentes) y dos de salida (uno de cada nibble) mediante multiplexores de 2 a 1.

  2. Implemente un multiplexor con dos números binarios de 3 bits (X2, X1, X0 y Y2, Y1, Y0) como entrada que transmita una u otra a la salida Z (Z2, Z1 y Z0) con la ayuda de una única línea de selección usando multiplexores de 2 a 1.

  3. Implemente la siguiente función con multiplexores 8 a 1 y 4 a 1: F(A,B,C)=∑(0,1,4,7). En el caso de 4 a 1, hágalo de las tres formas posibles (Con A, B ó C a la entrada del multiplexor).

  4. Implemente las siguientes funciones con multiplexores de forma óptima (para funciones N variables use multiplexores de N-1 líneas de selección):

  1. Un número primo es aquel que sólo es divisible entre si mismo y la unidad. Diseñe un circuito lógico que detecte todos los números primos entre 0 y 31. La salida F(A, B, C, D, E), donde A es la variable de mayor peso binario, será igual a 1, si y sólo si, los cinco bits de la entrada representan un número primo. Realice el circuito óptimo utilizando un multiplexor.

  2. Diseñe un circuito que convierta de BCD a exceso a 3 con multiplexores.

  3. Diseñe un circuito que convierta de BCD a 84-2-1 con multiplexores.

  4. El cerebro humano está hecho de células especializadas llamadas neuronas. Cada neurona tiene sinapsis (que son los puntos de conexión entre ellas) y éstas pueden ser de excitación y de inhibición (VER NOTA ANEXA *). Una neurona produce una salida f=1 si el número de sinapsis de excitación con pulsos 1 excede el número de sinapsis de inhibición con pulsos 1 por al menos, llamémosle, el valor de umbral (o sea, al menos 1) de la neurona. Dicho lo anterior, determine la función booleana f(a, b, c, d, e) de emisión de pulsos a través del canal de salida f (axón) en el modelo de la figura de abajo y realice el circuito óptimo con un multiplexor.



NOTA (*):


En la próxima clase se verá el TEMA 10: Decodificadores y codificadores nivel SSI y MSI. Aplicaciones.