¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Construir un sumador con puertas lógicas

Después de esta lección: Puedo construir un sumador con puertas lógicas.

Lección de 55 min8 comandosLaboratorio de compiladores y arquitectura: gcc, flex, bison y RISC-V en una VM

Piezas que no saben contar

El terminal de pago de una gasolinera suma 40 euros de gasóleo y 3 de un café casi al instante. Sin embargo, ninguna pieza de su procesador sabe contar.

Cada pieza solo contesta sí o no a una pregunta sobre dos bits. En esta lección construyes la suma a partir de esas preguntas.

Al final de esta lección

Nota

Puedo construir un sumador con puertas lógicas.

Palabras clave

PalabraQué significa
Puerta lógicaun circuito que convierte uno o dos bits de entrada en un bit de salida
Tabla de verdadla lista de todas las entradas con la salida de cada una
Acarreoel bit que pasa a la posición siguiente cuando la suma no cabe
Semisumadordos puertas que suman dos bits
Sumador completopuertas que suman dos bits y un acarreo
Desbordamientoun resultado que no cabe en los bits disponibles

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Cuatro puertas responden sobre bits

Una puerta lógica recibe bits y da un solo bit. AND da 1 solo si las dos entradas son 1. OR da 1 si alguna de las entradas es 1. XOR, el o exclusivo, da 1 cuando las entradas son distintas. NOT tiene una sola entrada y la invierte.

Una tabla de verdad recoge cada entrada con su salida. Con dos entradas solo hay cuatro casos, así que la tabla es corta.

Tabla de verdad: tres puertas

ABA AND BA OR BA XOR B
00000
01011
10011
11110

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Entra en la carpeta de arquitectura

Comando
cd ~/arch

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Aplica las puertas a 12 y 10

Comando
python3 -c "print(12 & 10, 12 | 10, 12 ^ 10)"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Ejemplo resuelto: las puertas, bit a bit

BitsNúmero
A110012
B101010
A AND B10008
A OR B111014
A XOR B01106

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Dos puertas suman dos bits

Sumar dos bits tiene cuatro casos. 0 + 0 es 0, y tanto 0 + 1 como 1 + 0 dan 1. Pero 1 + 1 es 2, que en binario se escribe 10.

El bit de la derecha del resultado es A XOR B. El de la izquierda, el acarreo, es A AND B. Así que una puerta XOR y una puerta AND forman un semisumador.

Tabla de verdad: un semisumador

ABSuma (XOR)Acarreo (AND)
0000
0110
1010
1101

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

XOR suma sin los acarreos

Comando
python3 -c "print(12 + 10, 12 ^ 10, (12 & 10) << 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 sumador completo recibe el acarreo

Cada posición, menos la primera, también debe sumar el acarreo que llega de su derecha. Por tanto suma tres bits.

Un sumador completo lo hace con dos semisumadores y una puerta OR. Con cuatro en cadena sumas números de 4 bits. El acarreo viaja de derecha a izquierda, de un sumador al siguiente. Por eso este diseño se llama sumador con propagación de acarreo.

Ejemplo resuelto: 0101 + 0111, de derecha a izquierda

PosiciónABAcarreo de entradaSumaAcarreo de salida
Vale 111001
Vale 201101
Vale 411111
Vale 800110

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Cuando el resultado no cabe

Un sumador guarda un número fijo de bits. Con números sin signo, el acarreo que sale de la posición de arriba se pierde y el resultado da la vuelta.

Con signo, la prueba es otra. 0101 + 0011 es 8, pero en complemento a dos de 4 bits 1000 se lee como -8. Dos positivos han dado un negativo. Eso también es desbordamiento, aunque no haya salido ningún acarreo.

Escribe un programa que suma 180 y 90

Comando
printf '.globl _start\n_start:\n  li a0, 180\n  li a1, 90\n  add a0, a0, a1\n  li a7, 93\n  ecall\n' > suma.s

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Ensámblalo

Comando
riscv64-linux-gnu-as suma.s -o suma.o

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Enlázalo

Comando
riscv64-linux-gnu-ld suma.o -o suma

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Ejecútalo en el emulador

Comando
qemu-riscv64 ./suma

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Lee el estado de salida

Comando
echo $?

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 desbordar siempre significa que sale un acarreo por arriba. Eso solo vale sin signo. En complemento a dos, 1111 + 0001 saca un acarreo y, aun así, -1 + 1 = 0 es correcto. Con signo hay desbordamiento cuando las dos entradas tienen el mismo signo y el resultado tiene el contrario.

Para ir más lejos: restar con un sumador

El procesador no tiene un circuito aparte para restar. Calcula a - b como a + (NOT b) + 1, porque NOT b + 1 es -b en complemento a dos.

Escribe subtract(a, b) con tu add_bits: invierte cada bit de b, súmalo a a y después suma 0001. Prueba 0110 - 0010 y 0010 - 0110. Luego piensa cómo podría el circuito ahorrarse la segunda suma.

Sobre este laboratorio y su código: Laboratorio de compiladores y arquitectura: gcc, flex, bison y RISC-V en una VM

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.