← Volver al blogUnidad aritmético-lógica (ALU)

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.

DennyDenny
9 min de lectura
Chalkboard feature illustration for “Cómo funciona una ALU: unidad aritmético-lógica a partir de puertas”

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:

PuertoAnchuraDirecciónSignificado
A4entradaprimer operando
B4entradasegundo operando
OP3entradaselección de operación
Y4salidaresultado seleccionado
C1salidaacarreo para ADD; préstamo para SUB
Z1salida1 cuando Y == 0000
N1salidaY[3]
V1salidadesbordamiento con signo para ADD o SUB

Un posible mapa de operaciones es:

OPFunciónDefinición
000sumaA+BA+B
001restaA−BA-B
010ANDA∧BA\land B bit a bit
011ORA∨BA\lor B bit a bit
100XORA⊕BA\oplus B bit a bit
101NOT AA‾\overline A
110desplazamiento lógico a la izquierdaentra cero en el bit 0
111desplazamiento lógico a la derechaentra 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 ii:

Si=Ai⊕Bi′⊕ciS_i=A_i\oplus B'_i\oplus c_i ci+1=AiBi′+Aici+Bi′cic_{i+1}=A_iB'_i+A_ic_i+B'_ic_i

Usa un bit de control SUB para transformar B y el acarreo inicial:

Bi′=Bi⊕SUBB'_i=B_i\oplus SUB c0=SUBc_0=SUB

Cuando SUB=0, la red evalúa A+BA+B. Cuando SUB=1, evalúa:

A+B‾+1=A−B(mod24)A+\overline B+1=A-B\pmod {2^4}

El acarreo final del sumador tiene interpretaciones diferentes:

  • después de ADD, c4=1c_4=1 significa que la suma sin signo superó 15;
  • después de SUB, c4=1c_4=1 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:

CSUB=c4‾C_{\text{SUB}}=\overline{c_4}

Por tanto, C=1 después de una resta indica que se ha producido un préstamo sin signo (A<BA<B). Los bits del resultado siguen procediendo de la misma suma módulo 242^4; 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 −8-8 a +7+7, mientras que el acarreo afecta al intervalo sin signo de 0 a 15.

Para la suma:

Vadd=A3⊕B3‾∧(A3⊕Y3)V_{\text{add}} = \overline{A_3\oplus B_3}\land(A_3\oplus Y_3)

Para la resta:

Vsub=(A3⊕B3)∧(A3⊕Y3)V_{\text{sub}} = (A_3\oplus B_3)\land(A_3\oplus Y_3)

De forma equivalente, para este sumador/restador, V=c3⊕c4V=c_3\oplus c_4. 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:

ANDi=AiBiAND_i=A_iB_i ORi=Ai+BiOR_i=A_i+B_i XORi=Ai⊕BiXOR_i=A_i\oplus B_i NOTi=Ai‾NOT_i=\overline{A_i}

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:

tALU,max≈max⁡(tcandidate functions)+tresult select+troutingt_{\text{ALU,max}} \approx \max(t_{\text{candidate functions}}) +t_{\text{result select}} +t_{\text{routing}}

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:

Z=Y3∨Y2∨Y1∨Y0‾Z=\overline{Y_3\lor Y_2\lor Y_1\lor Y_0} N=Y3N=Y_3

C y V dependen de la operación. Una política coherente para esta ALU didáctica es:

OperaciónCV
sumaacarreo finaldesbordamiento de suma
restapréstamo (A<BA<B), complemento del acarreo finaldesbordamiento de resta
SHLbit desplazado fuera del MSB0
SHRbit desplazado fuera del LSB0
AND/OR/XOR/NOT00

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 N⊕VN\oplus V 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:

  1. los registros fuente presentan A y B;
  2. la unidad de control selecciona OP;
  3. la ALU y la lógica de generación de indicadores se estabilizan;
  4. un registro de destino captura Y en el flanco activo de reloj;
  5. 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:

  1. Construye un sumador/restador de cuatro etapas con B XOR SUB y c0=SUB.
  2. Añade vías AND, OR, XOR y NOT en paralelo.
  3. Cablea desplazamientos lógicos y conserva los bits desplazados fuera si C los usa.
  4. Selecciona el resultado con un multiplexor de cuatro bits y 8 vías.
  5. Genera Z a partir del resultado seleccionado y N a partir de su MSB.
  6. Selecciona C y V según la tabla de operaciones.
  7. 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.

Referencias

Convierte la idea en un circuito funcional.