Cómo funciona una ALU: unidad aritmético-lógica a partir de puertas
Construye una ALU pequeña a partir de un sumador, lógica bit a bit, un desplazador y un multiplexor de resultado; después deriva sus salidas de acarreo, cero, negativo y desbordamiento.
Resumen: Una ALU pequeña es una ruta de datos combinacional: las funciones candidatas de aritmética, lógica y desplazamiento operan sobre las mismas palabras de entrada, y un multiplexor selecciona el resultado visible. El diseño no está completo hasta que se explicitan las codificaciones de operación, la semántica de acarreo/préstamo, el comportamiento de desbordamiento y la política de escritura de indicadores.
Una unidad aritmético-lógica es donde un procesador transforma datos. ADD y SUB necesitan un sumador; AND, OR y XOR necesitan vías de puertas en paralelo; los desplazamientos necesitan encaminamiento o una red de desplazamiento; y un multiplexor de resultado escoge qué candidato llega al destino.
Ese diagrama de bloques es bastante sencillo para construirlo a cuatro u ocho bits, pero suficientemente rico para mostrar varias decisiones de ingeniería reales:
- ¿La resta informa de préstamo o de ausencia de préstamo?
- ¿El desplazamiento a la derecha rellena con cero o copia el bit de signo?
- ¿Qué operaciones definen la salida de desbordamiento?
- ¿La propia ALU almacena los indicadores o los captura un registro independiente?
- ¿Se selecciona una función grande después de calcular en paralelo, o se comparte lógica para reducir el área?
Esta guía desarrolla una ALU didáctica coherente de 4 bits y señala los puntos en los que otra arquitectura podría elegir de otro modo.
Empieza con un contrato de interfaz
Supón vectores de bits sin signo, salvo cuando una operación solicite explícitamente una interpretación con signo:
| Puerto | Anchura | Dirección | Significado |
|---|---|---|---|
A | 4 | entrada | primer operando |
B | 4 | entrada | segundo operando |
OP | 3 | entrada | selección de operación |
Y | 4 | salida | resultado seleccionado |
C | 1 | salida | acarreo para ADD; préstamo para SUB |
Z | 1 | salida | 1 cuando Y == 0000 |
N | 1 | salida | Y[3] |
V | 1 | salida | desbordamiento con signo para ADD o SUB |
Un posible mapa de operaciones es:
OP | Función | Definición |
|---|---|---|
000 | suma | |
001 | resta | |
010 | AND | bit a bit |
011 | OR | bit a bit |
100 | XOR | bit a bit |
101 | NOT A | |
110 | desplazamiento lógico a la izquierda | entra cero en el bit 0 |
111 | desplazamiento lógico a la derecha | entra cero en el bit 3 |
Esta es una especificación didáctica, no una codificación estándar. Los conjuntos de instrucciones reales pueden separar los desplazamientos, la multiplicación, la generación de direcciones y la comparación en otras unidades de ejecución. También pueden tener varias ALU con capacidades diferentes.
La ALU descrita aquí no tiene estado interno. Sus salidas se estabilizan tras los cambios de entrada y su propagación por la red combinacional. Los registros de operandos, los registros de destino y el registro de indicadores son elementos secuenciales independientes.
Bloque 1: un sumador para la suma y la resta
Un sumador de acarreo en cascada conecta cuatro etapas de sumador completo. Para el bit :
Usa un bit de control SUB para transformar B y el acarreo inicial:
Cuando SUB=0, la red evalúa . Cuando SUB=1, evalúa:
El acarreo final del sumador tiene interpretaciones diferentes:
- después de ADD, significa que la suma sin signo superó 15;
- después de SUB, significa que no fue necesario ningún préstamo sin signo.
La ALU de DigiSim expone como C el acarreo de salida directo tras ADD, pero su complemento tras SUB:
Por tanto, C=1 después de una resta indica que se ha producido un préstamo sin signo (). Los bits del resultado siguen procediendo de la misma suma módulo ; solo cambia la polaridad de la bandera.
El desbordamiento no es el acarreo
El desbordamiento con signo afecta al intervalo en complemento a dos de a , mientras que el acarreo afecta al intervalo sin signo de 0 a 15.
Para la suma:
Para la resta:
De forma equivalente, para este sumador/restador, . Mantener C y V separados permite que los mismos cuatro bits de resultado admitan correctamente interpretaciones sin signo y con signo.
Bloque 2: lógica bit a bit en paralelo
Cada vía de bit calcula su lógica de manera independiente:
En una implementación conceptual, los cuatro buses candidatos existen en paralelo. Una herramienta de síntesis puede compartir términos, mapear funciones a tablas de consulta o elegir celdas estándar compuestas. «Una puerta por bit» describe la estructura booleana, no un recuento garantizado de transistores ni un retardo físico.
Las funciones bit a bit evitan una dependencia de acarreo que abarque toda la palabra, pero su resultado seleccionado sigue atravesando puertas, encaminamiento y el multiplexor de salida. No son instantáneas.
Bloque 3: desplazamientos
Un desplazamiento lógico fijo de una posición puede expresarse como cableado:
SHL(A): Y3=A2, Y2=A1, Y1=A0, Y0=0
SHR(A): Y3=0, Y2=A3, Y1=A2, Y0=A1
El bit desplazado hacia fuera puede conservarse como candidato de acarreo si la ISA lo especifica:
SHL carry candidate = A3
SHR carry candidate = A0
Un desplazamiento aritmético a la derecha difiere solo en la parte superior: copia A3 en Y3 para extender el signo. Un desplazamiento de distancia variable necesita una red de encaminamiento seleccionable, como un desplazador de barril; un desplazamiento fijo de una posición no.
Bloque 4: el multiplexor de resultado
El multiplexor de salida da significado a OP. Conceptualmente:
case OP
000: Y = arithmetic_sum
001: Y = arithmetic_difference
010: Y = bitwise_and
011: Y = bitwise_or
100: Y = bitwise_xor
101: Y = bitwise_not_a
110: Y = shift_left
111: Y = shift_right
A cuatro bits, puede dibujarse como un multiplexor de 8 a 1 para cada bit de resultado. En lógica programable puede mapearse a tablas de consulta y recursos de encaminamiento. En un ASIC puede convertirse en celdas mux, estructuras AOI/OAI u otra red factorizada elegida por síntesis.
La selección de resultado forma parte de la ruta crítica de temporización:
Esa expresión es una estimación de diseño, no una ecuación de cierre de temporización. La temporización física depende de las celdas, el fan-out, el cableado, la tensión, la temperatura y la implementación.
Indicadores de resultado
El valor Y seleccionado genera dos candidatos independientes de la operación:
C y V dependen de la operación. Una política coherente para esta ALU didáctica es:
| Operación | C | V |
|---|---|---|
| suma | acarreo final | desbordamiento de suma |
| resta | préstamo (), complemento del acarreo final | desbordamiento de resta |
| SHL | bit desplazado fuera del MSB | 0 |
| SHR | bit desplazado fuera del LSB | 0 |
| AND/OR/XOR/NOT | 0 | 0 |
Otro diseño podría conservar C y V para las operaciones lógicas en lugar de borrarlos. Esa es una elección de ISA y de política de control. La ALU combinacional puede presentar señales candidatas, mientras que un registro de indicadores sincronizado decide si carga, conserva o actualiza selectivamente los bits almacenados.
El indicador de signo N es el MSB del resultado. Por sí solo no es una prueba correcta de menor que con signo después de una resta: usa para compensar el desbordamiento con signo.
Casos prácticos de 4 bits
6 - 3
A = 0110
B = 0011
~B = 1100
A + ~B+1 = 1 0011
El resultado almacenado es 0011 (3). El acarreo de salida directo es 1, por lo que no hubo préstamo y la salida C de DigiSim, codificada como préstamo, vale 0:
Y=0011, Z=0, C=0, N=0, V=0
3 - 6
A = 0011
B = 0110
A + ~B+1 = 0 1101
1101 es 13 sin signo o -3 con signo. El acarreo de salida directo es 0, por lo que se produjo un préstamo sin signo y C vale 1:
Y=1101, Z=0, C=1, N=1, V=0
7 + 1
0111 + 0001 = 1000
No hay acarreo sin signo, pero +8 no cabe en complemento a dos con signo de 4 bits:
Y=1000, Z=0, C=0, N=1, V=1
15 + 1
1111 + 0001 = 1 0000
El resultado sin signo se desborda por vuelta y genera un acarreo. Como aritmética con signo, -1 + 1 = 0 es válido:
Y=0000, Z=1, C=1, N=0, V=0
Los dos últimos vectores demuestran que C y V no son alias.
Dónde se sitúa la ALU en una CPU
Una ruta de datos pequeña de ciclo único podría realizar esta secuencia:
- los registros fuente presentan A y B;
- la unidad de control selecciona
OP; - la ALU y la lógica de generación de indicadores se estabilizan;
- un registro de destino captura Y en el flanco activo de reloj;
- si está habilitado, el registro de indicadores captura los bits de estado seleccionados.
La frecuencia máxima de reloj depende de la ruta completa más larga entre registros, no solo de la ALU. Esa ruta puede incluir el retardo de reloj a Q del registro, la selección de operandos, la lógica de la ALU, el encaminamiento del resultado, el tiempo de establecimiento del registro de destino, la incertidumbre del reloj y su desfase. La ALU puede constituir la ruta crítica, pero en otra microarquitectura pueden dominar el acceso a caché, las redes de bypass, la decodificación u otra lógica.
Optimizar un sumador no mejora automáticamente la frecuencia del sistema en la misma proporción. Solo ayuda si esa ruta limita el diseño después de la colocación y el encaminamiento, y el margen recuperado no se consume en otro sitio. Consulta el retardo de propagación y el desfase de reloj para el contexto completo de temporización.
El 74181 como referencia histórica
La familia 74181 de 4 bits es un ejemplo útil porque su interfaz expone selección de función, selección de modo, entrada de acarreo, salida de acarreo y señales de acarreo de grupo. Admite un catálogo de funciones aritméticas y lógicas, y puede combinarse en palabras más anchas con soporte de anticipación de acarreo.
No debe tratarse como un plano a nivel de transistor para una CPU moderna. Los procesadores contemporáneos pueden usar varias unidades de ejecución de enteros especializadas, rutas de datos vectoriales y de coma flotante independientes, lógica de comparación de bifurcaciones distribuida y estructuras de sumador específicas de la implementación. Lo que perdura es el patrón arquitectónico: transformar palabras de operandos, seleccionar un resultado e informar de datos de estado definidos con precisión.
Construye y verifica la versión de 4 bits
Usa la plantilla de ALU de 8 bits de DigiSim como referencia más grande, o construye directamente la interfaz de cuatro bits:
- Construye un sumador/restador de cuatro etapas con
B XOR SUByc0=SUB. - Añade vías AND, OR, XOR y NOT en paralelo.
- Cablea desplazamientos lógicos y conserva los bits desplazados fuera si C los usa.
- Selecciona el resultado con un multiplexor de cuatro bits y 8 vías.
- Genera Z a partir del resultado seleccionado y N a partir de su MSB.
- Selecciona C y V según la tabla de operaciones.
- Sonda A, B, OP, Y, C, Z, N y V.
Verifica cada opcode con valores ordinarios y después apunta a los límites:
- resultado cero;
- todos unos más uno;
- el mayor positivo con signo más uno;
- el menor negativo con signo menos uno;
- restas tanto con préstamo como sin él;
- desplazamientos a la izquierda y a la derecha con el bit saliente activado;
- comportamiento de los indicadores al cambiar entre clases de operaciones.
Un simulador funcional puede establecer la tabla de verdad y la secuenciación de control. No demuestra la frecuencia máxima de un chip físico, el comportamiento de metastabilidad analógica ni la temporización a través de las esquinas de proceso y ambientales.
Una vez que la ruta de datos funcione, conéctala a un registro de indicadores de CPU sincronizado y a un decodificador de bifurcaciones. Ese es el punto en el que un cálculo combinacional se convierte en estado arquitectónico persistente y puede redirigir el contador de programa.



