¿Cómo se implementan varias funciones (por ejemplo, sumar, restar y etc.) en ALU?

9

Me pregunto, dado que hay tantas funciones que una ALU debe hacer, ¿cómo podría comenzar a implementar una?

La parte que me confunde es cómo puedo implementar una ALU que puede hacer diferentes funciones como Agregar / Restar / AND / OR / etc. ¿Necesito tener más lógica de control?

En una asignación anterior, implementé una ALU que puede hacer Agregar / Restar / Negar. Ahora creo que una ALU debería poder hacer funciones como

Mi tarea anterior

Jiew Meng
fuente

Respuestas:

7

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í.

JustJeff
fuente
Estaba apuntando mi respuesta más al final del espectro "fácil de entender para empezar", pero gracias por señalar una posibilidad más óptima (en cuanto a hardware).
Martin Thompson
5

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

Martin Thompson
fuente
Sí, aritmética es una palabra :)
Majenko
1
Me parece que aritmética es la palabra que quieres. Tenga en cuenta que esta palabra tiene el acento en la tercera sílaba. Con el acento en la segunda sílaba, es una palabra diferente que se refiere a la mecánica de realizar operaciones numéricas básicas como las que aprendes en la escuela primaria.
Olin Lathrop
1

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).

Super gato
fuente
tipo de uso de un multiplexor como una ROM muy pequeña, y esa es otra forma de hacerlo, usar ROM reales.
JustJeff
Una ROM de Nx1 bits es un multiplexor cuyas entradas de "datos" están cableadas. En el escenario que describí, las entradas de "datos" del multiplexor serían seleccionadas por el operador. En la práctica, uno probablemente usaría una ROM pequeña para seleccionar algunas de las 16 operaciones lógicas posibles, más algunas otras operaciones, desde un código de operación de 3 o 4 bits (si lo desea, puede pasar el código de operación directamente al unidad lógica, pero use otros multiplexores para seleccionar otras operaciones en casos en los que el código de operación no generaría una operación lógica útil).
supercat