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

9

Me pregunto, ya que hay muchas funciones que debe hacer una ALU, ¿cómo puedo comenzar a implementar una (una tarea en la que se supone que debo implementar un sistema MIPS con Logisim, utilizando puertas básicas, chancletas, etc.)?

La parte sobre la que estoy confundido es cómo puedo implementar una ALU que pueda hacer diferentes funciones como agregar / restar / AND / OR / etc. ¿Necesito más control de la lógica (ver arriba a la derecha en "asignación previa" más abajo).

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

Miasignaciónanterior

    
pregunta Jiew Meng

3 respuestas

7

Mientras se calculan internamente todas las respuestas y luego se usa un mux para seleccionarlas, ciertamente no es un diseño mínimo.

Considera que puedes dividir el problema en bits. En lugar de un solo bloque de lógica con dos entradas de 8 bits, puede dividir esto en dos secciones de 4 bits, siempre que pueda vincularlas para obtener un resultado general correcto. Afortunadamente, la vinculación de los sectores 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 turnos de izquierda / derecha, este bit se volverá a proponer fácilmente).

Llevado al extremo, puedes usar 8 porciones de 1 bit cada una. Es útil pensar en los cortes de 1 bit, porque hace que sea más fácil pensar en un enfoque que se adapte a cortes más grandes. Así que 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 acarreo. También tiene solo dos salidas: funcionar y llevar a cabo. Así que 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 para reducir razonablemente. Terminará con un puñado de puertas que no necesariamente siempre computarán todas las funciones, pero no importa lo que suceda dentro de la división, solo que produce el resultado correcto cuando se ve desde afuera.

Ahora puedes ir un par de maneras. 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. Al pasar 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 brindará resultados más compactos que el enfoque de computar todo lo que se usa entonces. Además, si observas las partes internas de un segmento ALU de 74181 de 4 bits, no verás un mux allí.

    
respondido por el JustJeff
5

Sí, necesitas más lógica de control.

Su asignación anterior fue puramente aritmética (¿es eso 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 tu diagrama, necesitarás un multiplexor (a veces llamado 'mux') controlado por las señales de control para elegir cuál de las respuestas vas a emitir (la del sumador y su "entrada" masajeando "el circuito 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 la MSB como una selección de "aritmética / lógica", y las otras para seleccionar la "subfunción" si eso tiene sentido, ya que simplifica la decodificar para el mux final.

    
respondido por el Martin Thompson
1

Un buen enfoque para manejar operaciones lógicas es hacer que los bits de los dos operandos sirvan como selector entradas a un multiplexor de 4 entradas, y alimentar las entradas de "datos" del multiplexor a cuatro patrón de bits correspondiente a la operación deseada (normalmente en una ALU de 8 bits, habría ocho multiplexores, uno para cada bit, y las entradas de "datos" de los 8 multiplexores se unirán).

    
respondido por el supercat

Lea otras preguntas en las etiquetas