¿Las ALU de 32 bits son realmente solo 32 ALU de 1 bit en paralelo?

Estoy leyendo el texto altamente estimado Computer Organization donde se encuentra esta imagen que se supone que representa una ALU de 32 bits:ingrese la descripción de la imagen aquí

¿Es esta tecnología realmente como se hace, solo una gran cantidad de ALU de 1 bit, por lo que una ALu de 64 bits sería solo 64 ALU de 1 bit en paralelo? De alguna manera tengo dudas de que así es como se construye una CPU en la práctica, ¿puede confirmarme o contarme más?

esto se llama ripple-adder, ¿verdad?
@eggie5 Un sumador simplemente suma sus entradas. Una Unidad Lógica Aritmética (ALU) puede realizar varias operaciones aritméticas (sumar, restar, multiplicar, etc.) y lógicas (AND, OR, XOR, etc.) en sus entradas. Para eso sirve la señal extra azul de "Operación". Un sumador no tendría esto ya que es una sola operación. Pero el diagrama muestra una topología de acarreo de ondas.

Respuestas (2)

Eso es esencialmente todo. La técnica se llama corte de bits :

El corte de bits es una técnica para construir un procesador a partir de módulos de menor ancho de bits. Cada uno de estos componentes procesa un campo de bits o "rebanada" de un operando. Los componentes de procesamiento agrupados tendrían entonces la capacidad de procesar la longitud de palabra completa elegida de un diseño de software en particular.

Los procesadores de segmento de bits generalmente consisten en una unidad lógica aritmética (ALU) de 1, 2, 4 u 8 bits y líneas de control (incluidas las señales de acarreo o de desbordamiento que son internas al procesador en diseños sin segmento de bits).

Por ejemplo, dos ALU de 4 bits podrían organizarse una al lado de la otra, con líneas de control entre ellas, para formar una CPU de 8 bits, con cuatro segmentos se puede construir una CPU de 16 bits, y se necesitan 8 segmentos de cuatro bits para un CPU de palabra de 32 bits (para que el diseñador pueda agregar tantos segmentos como sea necesario para manipular longitudes de palabra cada vez más largas).

En este documento , utilizan tres bloques TI SN74S181 ALU de 4 bits para crear una ALU de 8 bits:

La ALU de 8 bits se formó combinando tres ALU de 4 bits con 5 multiplexores como se muestra en la Figura 2. El diseño de la ALU de 8 bits se basa en el uso de una línea de selección de acarreo. Los cuatro bits más bajos de la entrada se alimentan a una de las ALU de 4 bits. La línea de ejecución de esta ALU se utiliza para seleccionar las salidas de una de las dos ALU restantes. Si se afirma llevar a cabo, entonces se selecciona la ALU con el acarreo vinculado verdadero. Si no se confirma el acarreo, se selecciona la ALU con el acarreo vinculado falso. Las salidas de las ALU seleccionables se multiplexan juntas formando los 4 bits superior e inferior, y se llevan a cabo para la ALU de 8 bits.

Sin embargo, en la mayoría de los casos, esto toma la forma de combinar bloques ALU de 4 bits y generadores de transporte anticipados como el SN74S182 . De la página de Wikipedia en el 74181 :

El 74181 realiza estas operaciones en dos operandos de cuatro bits generando un resultado de cuatro bits con acarreo en 22 nanosegundos. El 74S181 realiza las mismas operaciones en 11 nanosegundos, mientras que el 74F181 realiza las operaciones en 7 nanosegundos (típico).

Se pueden combinar múltiples 'segmentos' para tamaños de palabra arbitrariamente grandes. Por ejemplo, se pueden combinar dieciséis 74S181 y cinco generadores de acarreo anticipado 74S182 para realizar las mismas operaciones en operandos de 64 bits en 28 nanosegundos.

El motivo de la adición de los generadores de anticipación es negar el retraso de tiempo causado por el acarreo de ondulación introducido utilizando la arquitectura que se muestra en su diagrama.

Este documento sobre el diseño de computadoras que usan la tecnología Bit-Slice analiza el diseño de una computadora que usa AMD AM2902 ALU (que AMD llama "Microprocesador Slice") y el generador AMD AM2902 carry look forward. En la Sección 5.6 hace un trabajo bastante bueno al explicar los efectos del acarreo de ondulación y cómo negarlos. Sin embargo, es un PDF protegido y la ortografía y la gramática no son las ideales, así que parafrasearé:

Uno de los problemas con los dispositivos ALU en cascada es que la salida del sistema depende de la operación total de todos los dispositivos. La razón es que durante las operaciones aritméticas la salida de cada bit depende no solo de las entradas (los operandos) sino también de los resultados de las operaciones en todos los bits menos significativos. Imagine un sumador de 32 bits formado por ocho ALU en cascada. Para obtener el resultado, debemos esperar a que el dispositivo menos significativo produzca sus resultados. El acarreo de este dispositivo se aplica a la operación del siguiente bit más significativo. Luego esperamos a que este dispositivo produzca su salida y así sucesivamente hasta que todos los dispositivos hayan producido una salida válida. Esto se llama acarreo de ondulación porque el acarreo se propaga a través de todos los dispositivos hasta que llega al más significativo. Sólo entonces el resultado es válido.

Cuando se usan palabras grandes, el tiempo que lleva realizar operaciones aritméticas con acarreo de ondulación es demasiado largo. Sin embargo, la solución a este problema es bastante simple. La idea es utilizar el procedimiento de llevar adelante. Es posible calcular cuál será el acarreo de una operación de cuatro bits sin esperar el final de la operación. En una palabra más grande, dividimos la palabra en nibbles y calculamos la P (bit de propagación de acarreo) y la G (bit de generación de acarreo) y, combinándolos, podemos generar el acarreo final y todos los intermedios con muy poco retraso mientras los otros dispositivos están calculando la suma o la diferencia.

Pero si observa la hoja de datos del SN74S181, verá que solo se trata de ALU de un bit en cascada. Entonces, si bien hay algunos circuitos adicionales para acelerar el cálculo cuando se opera con palabras más grandes, realmente se reduce a muchas operaciones de un solo bit.

Diagrama lógico SN74S181

Por diversión, si no tiene acceso al software de simulación, siempre puede crear y conectar ALU en cascada en Minecraft :

Minecraft ALU

Nota: si observa los circuitos FPGA, a veces usan un solo circuito sumador y ciclan los 32 (o lo que sea) bits. Esto hace que un circuito sea más simple y más pequeño a expensas de funcionar más lento.

Depende, pero generalmente no, porque llevar 64 bits de propagación de acarreo sería demasiado lento en la mayoría de los casos. Es más común usar una tabla de búsqueda para implementar un sumador más ancho que 1 bit o la implementación directa de un sumador más grande en lógica booleana, y encadenarlos con propagación de acarreo. Esto es particularmente cierto no tanto para la ALU, que probablemente tenga mucho tiempo para esperar la ondulación, sino para todos los sumadores que ocurren en todo el lugar en el resto del procesador para cosas como compensaciones de direcciones, etc.

Realmente no creo que la ALU tenga "mucho tiempo" en relación con cualquier otro sumador en el chip. Por lo general, quieren que todos se completen en un ciclo de reloj.
No, lo que digo es que si todo lo que quisiera hacer fuera agregar dos números de 64 bits, habría mucho tiempo para la ondulación en comparación con algunas de las otras instrucciones ALU. Pero, obviamente, en realidad, los sumadores son componentes básicos en la funcionalidad de instrucciones más complicadas, y ahí es donde realmente estarías jodido si usas una pila de sumadores de 1 bit.