306 - Optimización del sumador - Carry-Lookahead Adder (CLA)

En la sección anterior, aprendimos sobre el componente funcional de ALU para la suma: el sumador completo. Para sumar dos números binarios de 4 bits, necesitamos usar 4 sumadores completos (como se muestra en la Figura 1). . Luego, al realizar la operación de suma, lo primero que se debe preparar son las tres entradas del sumador completo No. 1. Los Cin del sumador completo No. 2, 3 y 4 provienen del Cout del sumador completo anterior. Solo después de que se completa la operación del sumador completo No. 1, el sumador completo No. 2, 3 y 4 pueden funcionar. Realizar operaciones en secuencia y finalmente obtener el resultado. De esta manera, la salida de acarreo, como una onda, se transfiere de un bit bajo a un bit alto, y el sumador que finalmente produce el resultado también se denomina sumador Ripple-Carry (RCA).

La ventaja de RCA es que el diseño del circuito es simple y el diseño es conveniente. Siempre que diseñemos el sumador completo, podemos conectarlo para formar un sumador multibit. Pero la desventaja también es obvia, es decir, la operación de bit alto debe esperar a que se complete la operación de bit bajo, lo que provoca un largo retraso para todo el sumador. Entonces, ¿cuál es la eficiencia de RCA? Hagamos los cálculos:

Abra todas las estructuras internas del RCA de 4 bits y obtendrá el diagrama del circuito de puerta del RCA de 4 bits como se muestra en la Figura 2. Para analizar el rendimiento de un circuito, necesitamos encontrar el camino más largo del mismo. Es decir, encontrar la que tiene el mayor número de puertas entre todas las conexiones del circuito desde la entrada hasta la salida, también llamada ruta crítica (como se muestra en la Figura 3).

Hagamos un análisis simple para el sumador completo de orden más bajo, está listo en A, B y Cin. De hecho, después de que la señal de entrada ingresa a este circuito, lleva tiempo transmitirse a través de la línea de conexión. Se llama retraso de línea y también lleva tiempo pasar a través de dicha puerta, lo que se llama retraso de puerta. Al realizar un análisis esquemático de diseño, nos centramos principalmente en los retrasos en las puertas.

A juzgar por la ruta A-S del primer sumador completo, generar la primera salida S requiere un retraso de dos puertas. Entonces, obviamente, no es el camino más largo. Por supuesto, comenzar desde A o comenzar desde B es lo mismo. Entonces, para el primer sumador completo, su camino más largo es el marcado por la línea roja, y el siguiente sumador completo El sumador crítico. La ruta se puede obtener de la misma manera.

Entonces, suponiendo que el tiempo de retardo a través de un circuito de puerta es T, entonces el tiempo de retardo total requerido a través de 4 sumadores completos es: 2T x 4 T (el primer sumador completo produce 3 T ) = 9T. Por tanto, se puede deducir que el tiempo de retardo total generado por n sumadores completos es 2T x n T = (2n 1)T.

Para un RCA de 32 bits, existe un tiempo de retardo total: (2n 1)T = (2×32 1)×T =65T. Por ejemplo, el procesador A7 SoC del iPhone 5s utiliza un proceso de fabricación de 28 nm y tiene una frecuencia principal de 1,3 GHz (0,66 ns). De acuerdo con este nivel de proceso, el retardo de la puerta T se establece en 0,02 ns, luego el tiempo de retardo del RCA de 32 bits es 1,3 ns y la frecuencia del reloj es 769 MHz, que está mucho más allá del tiempo de retardo de frecuencia principal del procesador A7. Sin mencionar que este RCA de 32 bits es solo una unidad de suma, sin mencionar que solo consideramos el retraso de la puerta en el proceso de cálculo y no se agregaron al cálculo varios retrasos, como el retraso de línea...

Entonces, la eficiencia de RCA es definitivamente un problema.

Entonces, ¿hay alguna forma de optimizarlo? El principal problema de RCA es que la operación de bit alto debe esperar la "señal de salida de acarreo" del bit bajo, por lo que nuestra idea de optimización es "¿Se puede calcular la "señal de salida de acarreo" de antemano? p> Consulte la Figura 2, podemos usar los parámetros del sumador completo anterior para representar la salida de acarreo posterior (Cout), es decir:

A partir de esto, la salida de acarreo de los cuatro sumadores completos es:

Finalmente lo que debemos obtener es C4 Después de la conversión, C4=G3 P3·G2 P3·P2·G1 P3·P2·P1·G0 P3·P2·P1·P0·C0, y estos parámetros. ¡Todos son conocidos! El resultado de la operación del sumador completo anterior no es necesario, por lo que tenemos un método para calcular el resultado del acarreo por adelantado. El sumador implementado de esta manera se llama sumador de anticipación (CLA).

Basándonos en el algoritmo de optimización anterior, volvimos a dibujar el método de cableado de CLA (Figura 4):

Entonces, ¿qué tan eficiente es usar CLA para operaciones de suma? Aún de acuerdo con el nivel de proceso del procesador Apple A7, la latencia de un solo CLA es de 0,08 ns, la latencia del CLA de nivel 4 es de 0,26 ns y la frecuencia de reloj es de 3,84 GHz, que son mucho más pequeñas que la latencia del procesador principal. frecuencia y cumplir plenamente con los estándares. Sin embargo, como se puede ver en la figura, para calcular un número binario de 4 bits, se deben disponer cuatro sumadores completos en paralelo. Entonces, ¿qué pasa si se trata de calcular 8 bits, 16 bits, 32 bits ...? Es posible que se requiera un cableado más complejo, lo cual es la desventaja del CLA.

Por último, hagamos una tabla para comparar las ventajas y desventajas de RCA y CLA:

Si el sumador de 32 bits adopta el método de acarreo de onda viajera, hemos analizado que requiere 65 niveles de retardo de puerta, si se utiliza el método de arrastre, idealmente sólo se necesitan cuatro niveles de retardo de puerta, pero desafortunadamente, esto es sólo lo ideal. Porque para lograr un arrastre completo de 32 bits, el circuito será muy complicado. Por lo tanto, el método de implementación habitual es utilizar múltiples sumadores de anticipación de acarreo de pequeña escala para unirlos en un sumador más grande. Por ejemplo, se conectan cuatro sumadores de anticipación de acarreo de 8 bits para formar un sumador de 32 bits.