mux y demux
DESCRIPTION
Especificaciónes de mux y demuxTRANSCRIPT
TEMA 9: MULTIPLEXORES Y DEMULTIPLEXORES A NIVEL SSI Y
MSI. APLICACIONESMULTIPLEXORES
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 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:
De dos entradas de 4 bits y una salida de 4 bits. Éste selecciona
uno de los nibbles de entrada (internamente son 4 multiplexores
de 2 a 1 en un solo encapsulado) y lo refleja en la salida.
De dos entradas de 4 bits a una salida de dos bits que representan
un bit direccionado en cada nibble reflejado a la salida
(internamente son 2 multiplexores de 4 a 1).
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 2 n
combinaciones con multiplexores de 2 n-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):
F(A, B, C, D) = ∑(0,4,6,10,11,13)
F(w, x, y, z) = ∑(3,4,5,7,11,12,14,15)
F(a, b, c, d) = ∑(3,5,7,11,15)
F(A, B, C, D, E) = ∑(0,1,2,8,9,11,15-19,24,25,29-31)
F(A, B, C, D, E, F) = ∑(0,2,4,5,7,8,16,18,24,32,36,40,48,56)
5. 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.
6. Diseñe un circuito que convierta de BCD a exceso a 3 con
multiplexores.
7. Diseñe un circuito que convierta de BCD a 84-2-1 con
multiplexores.
8. 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 (*):
La actividad de nuestro cerebro resulta de un balance entre la
excitación y la inhibición. La excitación involucra principalmente al
Glutamato, que es el neurotransmisor excitatorio por excelencia
mientras la inhibición es causada en su mayoría por el
neurotransmisor GABA. En la Sinapsis las moléculas transmisoras
actúan sobre receptores situados en la membrana postsináptica,
con lo cual se altera la permeabilidad para los iones de dicha
membrana. En el caso del glutamato despolariza (excitación) la
membrana postsináptica por un incremento en la permeabilidad a
cationes como el Na+ y Ca2+. Por el contrario, GABA hiperpolariza
la membrana postsináptica (inhibición) producto del incremento en
la permeabilidad al Cl-. Al nivel neuronal, la excitación permite la
propagación de la señal bioeléctrica mientras que la inhibición
evita dicha propagación.
En la próxima clase se verá el TEMA 10: Decodificadores y codificadores
nivel SSI y MSI. Aplicaciones.