Cómo suma un circuito
Un sumador es el circuito digital que suma números en binario. Está dentro de toda calculadora y de todo procesador. Si entiendes el sumador de un bit, entiendes cómo suman todos los demás.
Una caja registradora que suma 5 euros y 3 euros hace esto en el fondo. Suma columna a columna, y a veces se lleva un bit a la siguiente.
Al final de esta lección
Nota
Puedo construir un sumador completo a partir de dos semisumadores.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Suma | el bit que se queda en la columna | sum |
| Acarreo | el bit que pasa a la columna de la izquierda | carry |
| Semisumador | un circuito que suma dos bits | |
| Sumador completo | un circuito que suma tres bits | |
| Acarreo de entrada | el acarreo que llega desde la columna de la derecha | cin |
| Sumador en cadena | varios sumadores completos unidos por el acarreo |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un semisumador suma dos bits
Dos bits suman como mucho 2, que en binario es 10. Hacen falta dos bits de salida: la suma, que se queda, y el acarreo, que pasa a la izquierda.
La suma es un XOR de las entradas. El acarreo es un AND: solo vale 1 cuando se suma 1 más 1.
Tabla de verdad del semisumador
| a | b | Acarreo | Suma | Resultado |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 + 0 = 00 |
| 0 | 1 | 0 | 1 | 0 + 1 = 01 |
| 1 | 0 | 0 | 1 | 1 + 0 = 01 |
| 1 | 1 | 1 | 0 | 1 + 1 = 10 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Copia el módulo con el acarreo roto
sed 's/a & b/a | b/' ~/hdl/half_adder.v > /tmp/ha_badcarry.vSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Compila la copia con el banco de pruebas
iverilog -o /tmp/ha_bc /tmp/ha_badcarry.v ~/hdl/half_adder_tb.vSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Mira qué pasa con el acarreo
vvp /tmp/ha_bcSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un sumador completo suma tres bits
En una columna del medio hay que sumar tres bits: a, b y el acarreo que llega de la derecha, cin. Un semisumador no basta, porque solo tiene dos entradas.
La idea: un primer semisumador suma a y b. Un segundo suma ese resultado con cin. Los dos acarreos pasan por una puerta OR, porque nunca valen 1 los dos a la vez.
Ejemplo: los tres bits que se suman
| a | b | cin | Total | cout | sum |
|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 2 | 1 | 0 |
| 1 | 0 | 1 | 2 | 1 | 0 |
| 1 | 1 | 0 | 2 | 1 | 0 |
| 1 | 1 | 1 | 3 | 1 | 1 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Varios sumadores completos suman números largos
Para sumar números de cuatro bits se ponen cuatro sumadores completos en fila. El acarreo de cada uno entra en el de su izquierda.
La tabla suma 5 y 3 columna a columna, de derecha a izquierda. El primer sumador no recibe acarreo: su cin vale 0.
Ejemplo: 0101 más 0011
| Columna | a | b | cin | sum | cout |
|---|---|---|---|---|---|
| 0 (derecha) | 1 | 1 | 0 | 0 | 1 |
| 1 | 0 | 1 | 1 | 0 | 1 |
| 2 | 1 | 0 | 1 | 0 | 1 |
| 3 (izquierda) | 0 | 0 | 1 | 1 | 0 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
La suma de 5 y 3 en binario
python3 -c "print(bin(5 + 3))"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Una suma que no cabe en cuatro bits
python3 -c "print(bin(15 + 1))"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un error frecuente
Advertencia
Mucha gente cree que cada columna se calcula por su cuenta. No es así: cada columna necesita el acarreo de la de su derecha. Por eso el resultado de la última columna no se conoce hasta que el acarreo ha pasado por todas.
Para ir más lejos
En un sumador en cadena, el último bit espera al acarreo de todos los anteriores. Cuanto más largo es el número, más tarda la suma.
Los procesadores reales calculan los acarreos por adelantado para ir más rápido. Piensa qué haría falta saber de cada columna para adivinar su acarreo sin esperar.