¿Cómo implementa la siguiente función usando nada más que 2: 1 MUX?

7

Estoy teniendo dificultades para entender cómo implementar funciones booleanas, especialmente dado que solo puedo usar muxes 2: 1 y la variable D como variable residual.

La función es la siguiente: $$ F (A, B, C, D, E) = suma (6, 7, 12, 13, 14, 15, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31) $$

He creado la tabla de verdad y, utilizando un mapa de Karnaugh, he minimizado la función a esto: $$ F (A, B, C, D, E) = AB + BC + CD \ bar {E} + CDE $$

También logré diseñar un MUX 16: 1 con A, B, C y E como selector y D como variable residual.

Entiendo cómo funciona un multiplexor y soy completamente capaz de derivar una tabla de verdad de una implementación existente, pero simplemente no entiendo cómo tomar la tabla de verdad, el mapa de Karnaugh y la función SOP minimizada e implementar la función solo con 2: 1 MUX y D como variable residual.

No necesariamente estoy pidiendo la respuesta directa, aunque sería bueno verlo. Estoy más interesado en una explicación, un algoritmo o realmente cualquier cosa que pueda ayudarme a realizar la implementación yo mismo.

Quiero poder visualizar la conexión entre la función y la implementación, no solo aprender a implementarla de memoria sin comprender por qué es así.

¡Gracias por tu tiempo!

Edit: Aunque entendí la respuesta aceptada y es la correcta, se me pidió que usara solo las siguientes entradas para las líneas de datos de mis muxes 2: 1: lógica 0, lógica 1 y la variable D. Las variables A, B, C solo deben usarse como líneas de selección.

Creé el mapa VK para F (A, B, C, D) = AB + BC + CD y luego usé ese mapa para derivar un mapa VK para F (A, B, C) como se puede ver a continuación .

Edición:paraelmapaaladerecha,elvalorparaABC=000debeser0,no1.Unerrorquecometícuandocopiésobrelatablademicuadernoaexcel.

Luegocreélasiguienteimplementaciónmux:

El diseño mux fue tomado de un libro de electrónica. La implementación, aunque no es terriblemente eficiente, funciona. Calculé la salida de los muxes usando la fórmula M (X, Y, Z) = XZ '+ YZ y la salida del mux más a la derecha es:

$$ MUX7 = AB \ bar {C} + D \ bar {B} C + BC $$

Usando otro mapa de Karnaugh, lo anterior se simplifica a AB + BC + CD, que es la función que necesitaba implementar.

El diseño de los MUXes en sí está tomado de un libro de electrónica. En el libro, las entradas de datos del nivel más a la izquierda de MUX fueron numeradas como se puede ver en mi diagrama y las etiquetas representan el equivalente decimal de las celdas del mapa V-K F (A, B, C). Si observa, por ejemplo, la celda 101 (binario para 5), el valor en esa celda es la entrada para la entrada MUX etiquetada en la implementación, en este caso 'D'.

¿Alguien puede participar en el por qué las líneas de entrada de datos están etiquetadas en ese orden en particular (0, 4, 2, 6, 1, 5, 3, 7)?

    
pregunta user1969903

3 respuestas

8

No es demasiado complejo, creo, asumiendo que resolviste la ecuación que querías correctamente (supongo que lo hiciste bien allí). Empieza por mirar la ecuación para un MUX de 2 pulgadas:

$$ \ begin {align *} M_2 (A, B, S) & = A \ cdot \ bar {S} + B \ cdot S \ end {align *} $$

De esto, puede obtener algunos resultados útiles:

$$ \ begin {align *} M_2 (0, x, y) & = x \ cdot y \\ M_2 (x, 0, y) & = x \ cdot \ bar {y} \\ M_2 (x, y, 0) & = x \\ M_2 (1, x, y) & = x + \ bar {y} \\ M_2 (x, 1, y) & = x + y \\ M_2 (x, y, 1) & = y \\ M_2 (x, y, x) & = x \ cdot y \\ M_2 (x, y, y) & = x + y \\ M_2 (0,0, x) & = 0 \\ M_2 (0,1, x) & = x \\ M_2 (1,0, x) & = \ bar {x} \\ M_2 (1,1, x) & = 1 \ end {align *} $$

Así se deduce que:

$$ \ begin {align *} F & = A B + B C + C D \\ x & = A B = M_2 (A, B, A) \\ y & = B C = M_2 (B, C, B) \\ z & = C D = M_2 (C, D, C) \\ por lo tanto, F & = x + y + z \\ F & = M_2 (M_2 (x, y, y), z, z) \ end {align *} $$

En resumen, necesitará (5) muxes de 2 pulgadas:

simular este circuito : esquema creado usando CircuitLab

También hay una simetría agradable allí. ¿Lo notas?

AGREGADO: usted preguntó sobre solo poder usar 0, 1 o D como fuente de entrada de datos mux. Supongo que con esto quiere decir que todos los A, B, C y D se pueden usar como selectores de mux. (De lo contrario, no creo que se pueda lograr el resultado). Por lo tanto, esto simplemente significa que necesita usar algunos de los otros resultados útiles que mencioné anteriormente. La idea más simple sería simplemente agregar tres muxes más de 2 pulgadas:

simular este circuito

No estoy seguro de si hay una manera de optimizarlo aún más. No he examinado todas las posibilidades.

EDITAR DE NUEVO: ¡Sí! Usando la solución recién agregada de OP, los dos siguientes simplemente fluyen. El izquierdo responde su primera parte de la pregunta, el derecho responde su segunda parte.

simular este circuito

VUELVA A EDITAR DE NUEVO: El pedido no es complicado. Es solo asignando las letras a donde pertenecen. El autor tomó (A) el bit de orden superior de un valor binario de tres bits, por lo que representa \ $ 0 \ cdot 2 ^ 2 = 0 \ $ o \ $ 1 \ cdot 2 ^ 2 = 4 \ $; tomó (B) como el bit medio de un valor binario de tres bits, por lo que representa \ $ 0 \ cdot 2 ^ 1 = 0 \ $ o \ $ 1 \ cdot 2 ^ 1 = 2 \ $; y tomó (C) el bit de orden inferior de un valor binario de tres bits, por lo que representa \ $ 0 \ cdot 2 ^ 0 = 0 \ $ o \ $ 1 \ cdot 2 ^ 0 = 1 \ $. Una variedad de perspectivas diferentes funcionaría igualmente bien. Pero ese es el que parecen haber elegido.

Entonces comenzaron con el primer nivel (izquierda), distribuyeron (4) muxes controlados por (A) y se mantuvieron mentalmente convenientes al numerar esos muxes como ABC="x00", ABC="x01", ABC="x10", y para el inferior ABC="x11".

Ahora, ya que para el de arriba, ABC="x00", esto significa que acepta "000" = 0 o "100" = 4. Así que para la entrada "0" de ese mux (mux1), buscaron en la tabla ABC="000" = 0 y colocaron la entrada de la tabla en su entrada lateral "0". Para la entrada "1" de ese mux, buscaron en la tabla ABC="100" = 4 y colocaron esa entrada de la tabla en su entrada lateral "1". (Esa tabla se ve mal aquí, ya que deberían tener un 0 en esa casilla, confirmada al mirar las columnas expandidas anteriores).

El siguiente mux down (mux2) es para ABC="x10" y, por lo tanto, utiliza ABC="010" = 2 y ABC="110" = 6; el siguiente mux down (mux3) es para ABC="x01" y, por lo tanto, se usa ABC="001" = 1 y ABC="101" = 5; y finalmente, el último mux down (mux4) es para ABC="x11" y, por lo tanto, utiliza ABC="011" = 3 y ABC="111" = 7.

Tanto mux1 (ABC="x00") como mux2 (ABC="x10") se alimentan conjuntamente a mux5. Puedes ver aquí que B es la variación entre estos, 0 o 1, así que así es como los conectaron aquí. La salida de mux5 será ABC="xy0", donde los dos primeros bits ya se han decodificado y todo lo que queda es decodificar la situación C = 0. Así que la salida de mux5 va a la entrada "0" de mux7. De manera similar, mux3 (ABC="x01") y mux4 (ABC="x11") se alimentan conjuntamente a mux6. De nuevo, B es la variación que mux6 selecciona entre. La salida de mux6 siempre está relacionada con el caso C = 1, y se alimenta en la entrada "1" de mux7.

Todo lo que queda es que mux7 elija entre C = 0 y C = 1.

    
respondido por el jonk
3

Un mux 2: 1 contiene un inversor, dos compuertas AND y una compuerta OR. Con el cableado adecuado, puede usarlo como compuerta AND, compuerta OR, inversor y algunas otras funciones. De hecho, ciertas familias de FPGA se basan completamente en este concepto.

Esto debería ser suficiente como una sugerencia para permitirte realizar cualquier función arbitraria utilizando 2: 1 muxes.

    
respondido por el Dave Tweed
2

Un multiplexor de dos entradas tiene tres entradas (a, b y seleccionar). Considere en qué se degenerará cuando elija dos de ellos, y fije el otro a "0" o "1". Considera lo que sucede cuando eliges dos de ellos y conecta el tercero a cualquiera de ellos. Básicamente, hay muchas maneras de degenerar ese espacio de tres entradas en un espacio de dos entradas.

Sin hacer nada tan sofisticado, solo tiene que darse cuenta de que un multiplexor le permite establecer explícitamente el valor de salida para las filas de la tabla de verdad que corresponden a las entradas de selección descodificadas. Por lo tanto, con un multiplexor de cuatro entradas (y, por lo tanto, dos bits de selección), puede representar cualquiera 2 función booleana de entrada simplemente cableando las entradas adecuadamente.

Además, debe quedar claro que puede crear un multiplexor 4: 1 a partir de tres multiplexores 2: 1, un multiplexor 8: 1 a partir de siete multiplexores 2: 1, y cuarto, creando una topología de árbol y conectando las selecciones apropiadamente. Simplemente coloque suficientes multiplexores 2: 1 para obtener el número de entradas que necesita, luego fluya las salidas, en pares, hacia los multiplexores 2: 1 descendentes hasta que llegue a una única salida, y piense cómo cablear las entradas seleccionadas.

Puedes salirte con una variable oculta porque solo tienes 16 minterms aunque tengas una tabla de verdad de 32 filas, y están agrupadas de tal manera que los subárboles enteros son ignorables.

    
respondido por el vicatcu

Lea otras preguntas en las etiquetas