Si bien computa internamente todas las respuestas, y luego usa un mux para seleccionar entre ellas funcionará, ciertamente no es un diseño mínimo.
Tenga en cuenta que puede dividir en bits el problema; en lugar de un solo bloque de lógica con dos entradas de 8 bits, puede dividir esto como dos secciones de 4 bits, siempre que pueda vincularlas para obtener un resultado general correcto. Afortunadamente, vincular las rodajas no es peor que un solo bit, que en el caso de la adición representa el bit de acarreo. Por lo tanto, cada segmento de 4 bits tiene un bit de arrastre y un bit de arrastre. (Tenga en cuenta que las lógicas como AND y NOR ni siquiera necesitarán esto, aunque si más adelante implementa cambios a la izquierda / derecha, este bit se readaptará fácilmente).
Llevado a un extremo, puede usar 8 rebanadas de 1 bit cada una. Es útil pensar en los segmentos de 1 bit, porque hace que sea más fácil pensar en un enfoque que retroceda a sectores más grandes. Entonces, con un segmento de 1 bit, tiene solo 7 entradas: el código de función de 4 bits, un bit de la entrada A, un bit de la entrada B y un bit de arrastre. También tiene solo dos salidas: funcionar y llevar a cabo. Entonces, ahora puede escribir las dos funciones de salida en términos de solo 7 entradas, lo que está dentro del ámbito de la capacidad humana de reducir razonablemente. Terminará con un puñado de compuertas que no siempre computarán necesariamente todas las funciones, pero no importa lo que ocurra dentro del segmento, solo que produce el resultado correcto cuando se ve desde afuera.
Ahora puedes seguir un par de formas. Una forma es simplemente usar 8 de estos segmentos de 1 bit y listo. Otra forma es hacer rebanadas más grandes y luego usarlas. Pasando de 1 bit a 2 bits, las ecuaciones van de 7 entradas a 9, y 4 bits requerirán funciones de 13 entradas. No es necesariamente fácil, pero dará resultados más compactos que el enfoque computar-todo-entonces-mux. Además, si observa las partes internas de un segmento ALU de 4 bits 74181, no verá un mux allí.
Sí, necesitas más lógica de control.
Su asignación anterior era puramente aritmética (¿es una palabra?), Por lo que podría usar un solo sumador y masajear las entradas usando las señales de control para crear las funciones que desea
Sus nuevas funciones son lógicas , por lo que necesita otro bloque para realizar operaciones lógicas. Las señales de control cambiarán la funcionalidad de este bloque.
Luego, en la parte inferior de su diagrama, necesitará un multiplexor (a veces llamado 'mux') impulsado por las señales de control para elegir cuál de las respuestas va a emitir (la del sumador y su circuito de "masaje de entrada" o el del operador lógico).
Si puede elegir nuevas codificaciones para sus líneas de control de ALU, podría tener la tentación de usar el MSB como una selección "aritmética / lógica", y los demás para seleccionar la "subfunción" si eso tiene sentido, ya que simplifica la decodificación para el mux final
fuente
Un buen enfoque para manejar las operaciones lógicas es hacer que los bits de los dos operandos sirvan como entradas de selector para un multiplexor de 4 entradas y alimentar las entradas de "datos" del multiplexor con un patrón de cuatro bits correspondiente a la operación deseada (típicamente en una ALU de 8 bits, habría ocho multiplexores, uno para cada bit, y las entradas de "datos" de los 8 multiplexores estarían unidas).
fuente