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

Tengo dificultades para entender cómo implementar funciones booleanas, particularmente 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 , mi ) = ( 6 , 7 , 12 , 13 , 14 , 15 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 )

Creé la tabla de verdad y, utilizando un mapa de Karnaugh, minimicé la función a esto:

F ( A , B , C , D , mi ) = A B + B C + C D mi ¯ + C D mi

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 totalmente 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 usando solo 2:1 MUX y D como variable residual.

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

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

¡Gracias por tu tiempo!

Editar: si bien entendí la respuesta aceptada y es la respuesta correcta, luego 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 selectoras.

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.

ingrese la descripción de la imagen aquíEditar: para el mapa de la derecha, el valor de ABC = 000 debe ser 0, no 1. Un error que cometí cuando copié la tabla de mi cuaderno en Excel.

Luego creé la siguiente implementación mux:

ingrese la descripción de la imagen aquí

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

METRO tu X 7 = A B C ¯ + D B ¯ C + B C

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 MUX 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 se numeraron como se puede ver en mi diagrama y las etiquetas representan el equivalente decimal de las celdas del mapa F(A, B, C) VK. Si observa, por ejemplo, la celda 101 (binario para 5), ​​entonces el valor en esa celda es la entrada para la entrada MUX correspondientemente etiquetada en la implementación, en este caso 'D'.

¿Alguien puede comentar 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)?

¿F(A,B,C,D,E) no se reduce a A(B+C)+CD?
para A=msb, F=00110+00111+011xx+10110 a 11111 ¿es así como empezaste?
Gracias por tomarse el tiempo para leer mi pregunta. Es muy posible que se reduzca a eso. No he usado ningún álgebra para minimizar la función, solo el mapa de Karnaugh. En cualquier caso, la función en sí no es tan relevante como el objetivo final de la pregunta. Técnicamente, estoy interesado en la implementación en sí, independientemente de cómo se vea la función.
Se reduce a F = AB + BC + C D.

Respuestas (3)

Creo que no es demasiado complejo, suponiendo que haya resuelto la ecuación que quería correctamente (supongo que lo hizo bien allí). Comience mirando la ecuación para un MUX de 2 pulgadas:

METRO 2 ( A , B , S ) = A S ¯ + B S

A partir de esto, puede obtener algunos resultados útiles:

METRO 2 ( 0 , X , y ) = X y METRO 2 ( X , 0 , y ) = X y ¯ METRO 2 ( X , y , 0 ) = X METRO 2 ( 1 , X , y ) = X + y ¯ METRO 2 ( X , 1 , y ) = X + y METRO 2 ( X , y , 1 ) = y METRO 2 ( X , y , X ) = X y METRO 2 ( X , y , y ) = X + y METRO 2 ( 0 , 0 , X ) = 0 METRO 2 ( 0 , 1 , X ) = X METRO 2 ( 1 , 0 , X ) = X ¯ METRO 2 ( 1 , 1 , X ) = 1

Entonces se sigue que:

F = A B + B C + C D X = A B = METRO 2 ( A , B , A ) y = B C = METRO 2 ( B , C , B ) z = C D = METRO 2 ( C , D , C ) F = X + y + z F = METRO 2 ( METRO 2 ( X , y , y ) , z , z )

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

esquemático

simular este circuito : esquema creado con CircuitLab

También hay una buena simetría allí. ¿Notarlo?

AGREGADO: Usted preguntó si solo puede usar 0, 1 o D como fuente de entrada de datos mux. Supongo que con esto quiere decir que todo A, B, C y D se pueden usar como selectores mux. (De lo contrario, no creo que se pueda lograr el resultado). Entonces, esto solo 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:

esquemático

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.

esquemático

simular este circuito

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

Así que ahora comenzaron con el primer nivel (izquierdo), colocaron (4) muxes controlados por (A) y se mantuvieron mentalmente convenientes numerando esos muxes como ABC="x00", ABC="x01", ABC="x10" , y para el inferior ABC="x11".

Ahora, dado que para el de arriba, ABC="x00", esto significa que acepta "000"=0 o "100"=4. Entonces, 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ía ser un 0 en ese cuadro, confirmado al mirar las columnas expandidas anteriores).

El siguiente mux descendente (mux2) es para ABC="x10" y, por lo tanto, se usa ABC="010"=2 y ABC="110"=6; el siguiente mux hacia abajo (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 se usa 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í es como los conectaron aquí. La salida de mux5 será ABC="xy0", donde los primeros dos bits ya han sido decodificados y todo lo que queda es decodificar la situación C=0. Entonces, 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. B nuevamente es la variación entre la que mux6 selecciona. La salida de mux6 siempre está relacionada con el caso C=1, y eso se alimenta a la entrada "1" de mux7.

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

Admito que nunca pensé en usar las fórmulas del mux para guiarme. Puedo ser un poco ignorante a veces, supongo.
@user1969903: Es solo cuestión de dejar que tu mente divague un poco. No te desconciertes. Solo siéntate y juega. Puede que encuentres algo interesante. El descubrimiento es en sí mismo la mayor parte de la diversión. Que es, por supuesto, por qué estoy aquí y respondiendo. También aprendí algo de tu problema, y ​​disfruté la sensación de jugar con él. Solo aprende a ir con eso, tú mismo. Piensa en ello como un rompecabezas que quieres resolver. (Si no te gustan los rompecabezas, es posible que estés en el área equivocada).
Después de estudiar su respuesta, me tomé el tiempo de derivar la fórmula para AND y OR con mux e implementé la función yo mismo. Me encantó ver que era exactamente como lo que publicaste, pero al revés (conecté las últimas 2 entradas al revés, pero sigue siendo correcto). Si quiere jugar un poco más, ahora debo implementar la función nuevamente solo con mux 2: 1, pero esta vez no puedo usar A, B, C o E como entradas para ninguna línea de datos para cualquier de los muxes. Las únicas entradas de datos que puedo usar son lógica 0, lógica 1 y D.
@ user1969903: Probablemente debería agregar eso a su pregunta actual (para que una respuesta mía tenga más sentido) o crear una nueva pregunta. Por ahora, agregaré algunas condiciones M() ​​más, que no harán daño.
Bueno, en realidad lo descubrí, pero no estoy seguro de cómo lo compartiría aquí. Mañana, después de terminar el trabajo, editaré la pregunta original y agregaré mi versión de la implementación para que todos la vean y también para corregir si está mal.
Me gusta su solución a mi segundo requisito. ¿Podría adivinar las diferencias entre mi enfoque (basado en un libro de electrónica escrito por un profesor de una universidad local) y el suyo? Su implementación definitivamente parece más simple, más intuitiva y eficiente, pero me pregunto si hay algún beneficio en la implementación que publiqué.
@user1969903: Su implementación usa menos muxes y tiene un retraso de propagación más consistente y más corto. ¡Es mejor! Y lo hiciste de una manera correcta. ¡Pero te daré un par aún mejor ahora que has hecho todo este gran trabajo! Uno para la primera respuesta y otro para la segunda. Realmente disfruté este proceso contigo.
Me alegro de que todos hayamos aprendido algo. Todavía tengo curiosidad acerca de por qué las entradas en mi implementación están etiquetadas de la forma en que están. ¿Alguna idea sobre eso?
@user1969903: Colapsaron las columnas. Estoy seguro de que puedes ver eso. Los dos de la izquierda son idénticos, por lo que simplemente los convirtieron en una sola columna. Los dos derechos eran iguales para dos filas (medio) pero no en la parte superior e inferior, pero D funcionó en lugar de una constante, allí. Para calcular la numeración, simplemente use los bits de la izquierda (dos bits) seguidos del bit de encabezado de columna. Esto crea un número binario de 3 bits que coincide allí. ¿Tiene sentido?
Sí, eso lo entendí. Mi pregunta se refiere a la forma en que las entradas de datos están etiquetadas en la mayoría de muxes de la izquierda en mi diseño. ¿Por qué están etiquetados en ese orden particular 0, 4, 2, 6, 1, 5, 3, 7 y no 0, 1, 2, 3, 4, 5, 6, 7 o cualquier otro orden? El libro del que tomé el diseño literalmente me indica que cree el mapa VK colapsado y solo haga coincidir el equivalente decimal de las celdas con las entradas etiquetadas de los muxes. ¿Por qué las entradas están agrupadas como celdas 0 y 4 para MUX1, celdas 2 y 6 para MUX2 y así sucesivamente? Además, si tuviera un talbe colapsado de 4 variables, ¿cómo etiquetaría mis muxes?
@user1969903: Se agregaron más comentarios al ya largo comentario. Espero que ayude.
Bueno, mientras sea conciso, no hay nada que puedas hacer si el volumen de información es grande. En cualquier caso, ahora puedo decir que estoy 100 % satisfecho con la respuesta, ya que entiendo exactamente lo que está pasando, así que le agradezco su tiempo y la información detallada. Con respecto a la tabla colapsada, es un error que cometí al copiar los valores de mi cuaderno ('0' está muy cerca de 1'' en el teclado numérico).
@user1969903: Había olvidado mucho de esto, así que realmente aprecié la oportunidad de recordar algo una vez más. ¡Es bueno cuando una pregunta también es de valor mutuo!

Un mux 2:1 contiene un inversor, dos puertas AND y una puerta OR. Con el cableado apropiado, puede usarlo como una puerta AND, una puerta OR, un inversor y algunas otras funciones. De hecho, ciertas familias de FPGA se basan íntegramente en este concepto.

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

Un multiplexor de dos entradas tiene tres entradas (a, b y select). Considere en qué degenera cuando elige dos de ellos y conecta el otro a "0" o "1". Considere lo que sucede cuando elige dos de ellos y conecta el tercero a cualquiera de ellos. Básicamente, hay un montón de formas de degenerar ese espacio de tres entradas en un espacio de dos entradas.

Sin hacer nada tan sofisticado, solo debe 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 seleccionadas decodificadas. Por lo tanto, con un multiplexor de cuatro entradas (y, por lo tanto, dos bits de selección), puede representar cualquier función booleana de 2 entradas simplemente cableando las entradas de manera adecuada.

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 cableando las selecciones de manera adecuada. Simplemente coloque suficientes multiplexores 2:1 para obtener la cantidad de entradas que necesita, luego haga fluir las salidas, en pares, hacia los multiplexores 2:1 aguas abajo hasta llegar a una sola salida, y piense en cómo conectar las entradas seleccionadas.

Puede salirse con la suya con una variable oculta porque solo tiene 16 términos mínimos a pesar de que tiene una tabla de verdad de 32 filas, y están agrupados de tal manera que los subárboles completos son ignorables.