Un sumador , o sumador , [1] es un circuito digital que realiza la suma de números. En muchos ordenadores y otros tipos de procesadores , los sumadores se utilizan en las unidades aritmético-lógicas (ALU). También se utilizan en otras partes del procesador, donde se utilizan para calcular direcciones , índices de tablas , operadores de incremento y decremento y operaciones similares.
Aunque se pueden construir sumadores para muchas representaciones numéricas , como el decimal codificado en binario o el exceso de 3 , los sumadores más comunes operan con números binarios . En los casos en que se utiliza el complemento a dos o el complemento a uno para representar números negativos , es trivial modificar un sumador para convertirlo en un sumador-restador . Otras representaciones numéricas con signo requieren más lógica en torno al sumador básico.
George Stibitz inventó el sumador binario de 2 bits (el modelo K ) en 1937.
El semisumador suma dos dígitos binarios simples y . Tiene dos salidas, suma ( ) y acarreo ( ). La señal de acarreo representa un desbordamiento al siguiente dígito de una suma de varios dígitos. El valor de la suma es . El diseño de semisumador más simple, que se muestra a la derecha, incorpora una compuerta XOR para y una compuerta AND para . La lógica booleana para la suma (en este caso ) será mientras que para el acarreo ( ) será . Con la adición de una compuerta OR para combinar sus salidas de acarreo, dos semisumadores se pueden combinar para formar un sumador completo. [2] El semisumador suma dos bits de entrada y genera un acarreo y una suma, que son las dos salidas de un semisumador. Las variables de entrada de un semisumador se denominan bits de sumando y sumando. Las variables de salida son la suma y el acarreo.
La tabla de verdad para el medio sumador es:
Varios circuitos lógicos digitales de medio sumador:
Un sumador completo suma números binarios y tiene en cuenta los valores que entran y salen. Un sumador completo de un bit suma tres números de un bit, que suelen escribirse como , , y ; y son los operandos, y es un bit que entra desde la etapa anterior menos significativa. [3] El circuito produce una salida de dos bits. El acarreo y la suma de salida suelen estar representados por las señales y , donde la suma es igual a . El sumador completo suele ser un componente de una cascada de sumadores, que suman números binarios de 8, 16, 32, etc. bits.
Un sumador completo se puede implementar de muchas maneras diferentes, como con un circuito a nivel de transistor personalizado o compuesto por otras puertas. La implementación más común es con:
Las expresiones anteriores para y se pueden derivar del uso de un mapa de Karnaugh para simplificar la tabla de verdad.
En esta implementación, la compuerta OR final antes de la salida de ejecución puede reemplazarse por una compuerta XOR sin alterar la lógica resultante. Esto se debe a que cuando A y B son ambos 1, el término siempre es 0 y, por lo tanto, solo puede ser 0. Por lo tanto, las entradas a la compuerta OR final nunca pueden ser ambas 1 (esta es la única combinación para la cual las salidas OR y XOR difieren).
Debido a la propiedad de completitud funcional de las puertas NAND y NOR, también se puede implementar un sumador completo utilizando nueve puertas NAND , [4] o nueve puertas NOR .
Usar solo dos tipos de puertas es conveniente si el circuito se implementa utilizando chips de circuitos integrados simples que contienen solo un tipo de puerta por chip.
Un sumador completo también se puede construir a partir de dos semisumadores conectando y a la entrada de un semisumador, luego tomando su salida de suma como una de las entradas del segundo semisumador y como su otra entrada, y finalmente las salidas de acarreo de los dos semisumadores se conectan a una compuerta OR. La salida de suma del segundo semisumador es la salida de suma final ( ) del sumador completo y la salida de la compuerta OR es la salida de acarreo final ( ). La ruta crítica de un sumador completo pasa por ambas compuertas XOR y termina en el bit de suma . Suponiendo que una compuerta XOR tarda 1 retrasos en completarse, el retraso impuesto por la ruta crítica de un sumador completo es igual a:
La ruta crítica de un acarreo pasa por una puerta XOR en el sumador y por 2 puertas (AND y OR) en el bloque de acarreo y, por lo tanto, si las puertas AND u OR tardan 1 retraso en completarse, tienen un retraso de:
La tabla de verdad para el sumador completo es:
Al invertir todas las entradas de un sumador completo también se invierten todas sus salidas, lo que se puede utilizar en el diseño de sumadores rápidos con acarreo de ondulación, porque no hay necesidad de invertir el acarreo. [5]
Varios circuitos lógicos digitales sumadores completos:
Es posible crear un circuito lógico utilizando múltiples sumadores completos para sumar números de N bits. Cada sumador completo ingresa un , que es el del sumador anterior. Este tipo de sumador se llama sumador de acarreo de ondulación (RCA), ya que cada bit de acarreo "ondula" al siguiente sumador completo. El primer (y solo el primero) sumador completo puede reemplazarse por un medio sumador (suponiendo que ).
El diseño de un sumador de acarreo-ondulación es simple, lo que permite un tiempo de diseño rápido; sin embargo, el sumador de acarreo-ondulación es relativamente lento, ya que cada sumador completo debe esperar a que se calcule el bit de acarreo a partir del sumador completo anterior. El retardo de compuerta se puede calcular fácilmente mediante la inspección del circuito del sumador completo. Cada sumador completo requiere tres niveles de lógica. En un sumador de acarreo-ondulación de 32 bits, hay 32 sumadores completos, por lo que el retardo de la ruta crítica (peor caso) es 3 (desde la entrada hasta el acarreo en el primer sumador) + 31 × 2 (para la propagación del acarreo en los últimos sumadores) = 65 retardos de compuerta. [6] La ecuación general para el retardo en el peor caso para un sumador de acarreo-ondulación de n bits, que tiene en cuenta tanto los bits de suma como los de acarreo, es:
Un diseño con polaridades de acarreo alternas y puertas AND-OR-Invert optimizadas puede ser aproximadamente el doble de rápido. [7] [5]
Para reducir el tiempo de cálculo, Weinberger y Smith inventaron una forma más rápida de sumar dos números binarios utilizando sumadores de acarreo anticipado (CLA). [8] Introdujeron dos señales ( y ) para cada posición de bit, en función de si un acarreo se propaga desde una posición de bit menos significativa (al menos una entrada es un 1), se genera en esa posición de bit (ambas entradas son 1) o se elimina en esa posición de bit (ambas entradas son 0). En la mayoría de los casos, es simplemente la salida de suma de un medio sumador y es la salida de acarreo del mismo sumador. Después de que se generan y , se crean los acarreos para cada posición de bit.
Las derivaciones simples de la recurrencia CLA de Weinberger-Smith son: el sumador de Brent-Kung (BKA), [9] y el sumador de Kogge-Stone (KSA). [10] [11] Esto se demostró en el artículo de Oklobdzija y Zeydel en el IEEE Journal of Solid-State Circutis. [12]
Algunas otras arquitecturas de sumadores multibit dividen el sumador en bloques. Es posible variar la longitud de estos bloques en función del retardo de propagación de los circuitos para optimizar el tiempo de cálculo. Estos sumadores basados en bloques incluyen el sumador de acarreo-salto (o acarreo-bypass) que determinará los valores para cada bloque en lugar de cada bit, y el sumador de acarreo-selección que genera previamente la suma y los valores de acarreo para cualquier posible entrada de acarreo (0 o 1) al bloque, utilizando multiplexores para seleccionar el resultado apropiado cuando se conoce el bit de acarreo.
Al combinar varios sumadores con acarreo anticipado, se pueden crear sumadores aún más grandes. Esto se puede utilizar en varios niveles para crear sumadores aún más grandes. Por ejemplo, el siguiente sumador es un sumador de 64 bits que utiliza cuatro CLA de 16 bits con dos niveles de unidades de acarreo anticipado .
Otros diseños de sumadores incluyen el sumador de acarreo-selección , el sumador de suma condicional , el sumador de acarreo-salto y el sumador de acarreo-completo.
Si un circuito sumador debe calcular la suma de tres o más números, puede resultar ventajoso no propagar el resultado del acarreo. En su lugar, se utilizan sumadores de tres entradas, que generan dos resultados: una suma y un acarreo. La suma y el acarreo se pueden introducir en dos entradas del sumador de tres números subsiguiente sin tener que esperar a que se propague una señal de acarreo. Sin embargo, después de todas las etapas de la suma, se debe utilizar un sumador convencional (como el de acarreo por ondulación o el de anticipación) para combinar los resultados finales de la suma y el acarreo.
Un sumador completo puede considerarse como un compresor con pérdida 3:2 : suma tres entradas de un bit y devuelve el resultado como un único número de dos bits; es decir, asigna 8 valores de entrada a 4 valores de salida. (el término "compresor" en lugar de "contador" se introdujo en [13] ) Por lo tanto, por ejemplo, una entrada binaria de 101 da como resultado una salida de 1 + 0 + 1 = 10 (número decimal 2). El acarreo representa el bit uno del resultado, mientras que la suma representa el bit cero. Del mismo modo, un medio sumador se puede utilizar como un compresor con pérdida 2:2 , comprimiendo cuatro posibles entradas en tres posibles salidas.
Estos compresores se pueden utilizar para acelerar la suma de tres o más sumandos. Si el número de sumandos es exactamente tres, el diseño se conoce como sumador de acarreo-ahorro . Si el número de sumandos es cuatro o más, se necesita más de una capa de compresores, y hay varios diseños posibles para el circuito: los más comunes son los árboles de Dadda y Wallace . Este tipo de circuito se utiliza sobre todo en circuitos multiplicadores , por lo que estos circuitos también se conocen como multiplicadores de Dadda y Wallace.
Usando solo las puertas lógicas cuánticas Toffoli y CNOT , es posible producir sumadores completos y medios sumadores cuánticos. [14] [15] [16] Los mismos circuitos también se pueden implementar en computación reversible clásica, ya que tanto CNOT como Toffoli también son puertas lógicas clásicas .
Dado que la transformada cuántica de Fourier tiene una baja complejidad de circuito , también se puede utilizar de manera eficiente para sumar números. [17] [18] [19]
Al igual que en los sumadores binarios, la combinación de dos corrientes de entrada permite sumarlas. Dentro de las limitaciones del hardware, las señales no binarias (es decir, con una base mayor que 2) se pueden sumar para calcular una suma. Esta técnica, también conocida como "amplificador sumador", [20] se puede utilizar para reducir la cantidad de transistores en un circuito de suma.