Tema 2 - Unidad Aritmético - Lógica

Introducción


📔
La ALU (Arithmetic-Logic Unit) es un circuito combinacional que realiza las operaciones aritméticas y lógicas básicas en el computador
  • Operaciones aritméticas básicas → add , sub , mult , div
  • Operaciones lógicas básicas → not , and , or , nand , nor
  • Operaciones de desplazamiento de bits → srl , sll
 
Inputs
  • Esta unidad recibe dos operandos, aunque en ocasiones solo hace uso de uno de ellos, por ejemplo en la operación not
  • La ALU también recibe una señal que le indica la operación que debe realizar
Outputs
  • La unidad manda el resultado de la operación por el bus de salida
  • Si el resultado de la operación ha sido 00, negativo o ha habido desbordamiento. Entonces se activa una señal especial
 

Multiplexor

📖
Existen varios tamaños (2a1, (2 a 1,\ 4a1, 4 a 1,\ 8a1, 8 a 1,\ etc)etc)
  • Recibe una serie de entradas y retorna una salida única y simplificada.
  • Además, reciben una señal de control que hace saber al multiplexor que dato de las entradas debe retornar.

Decodificadores

📖
Existen varios tamaños (1a2, (1 a 2,\ 1a4, 1 a 4,\ 1a8, 1 a 8,\ etc)etc)
  • Recibe un valor en binario puro (n bits)(n\ bits) y activa la señal que tiene ese valor en decimal. Las demás salidas se mantienen desactivadas.
  • Su funcionamiento es el inverso al multiplexor

Formas Canónicas de una Función Lógica

📖
Tipos de formas canónicas
SdP (Suma de Productos) Primera Forma Canónica
  • Un único término producto o suma de términos producto (minterms) que se escogen entre las filas que valen 1 en la tabla de verdad
✖️
PdS (Producto de Sumas) Segunda Forma Canónica
  • Un único término suma o producto de términos suma (maxterms) que se escogen entre las filas que valen 0 en la tabla de verdad
〽️
Minterm
Expresión booleana que abarca todas las variables y es verdadera para una condición específica de valores de esas variables.
〽️
Maxterm
Expresión booleana que abarca todas las variables y es falsa para una única combinación específica de valores de esas variables.

Mapa de Karnaugh

📖
Tiene como función simplificar una expresión booleana de menos de 4 variables
Pasos
1. - Hacer el Mapa de Karnaugh
El mapa de Karnaugh es una tabla donde cada coordenada representa el valor de las variables de entrada correspondientes con dicha coordenada, y el valor en la tabla representará el valor de salida
💡
Si tenemos más de dos variables podemos agruparlas en una columna como si fueran una variable de dos dígitos, pero alternaremos la 4 fila con la 3 para tratar de mantener los 1’s del segundo dígito juntos
Ejemplo Mapa de Karnaugh 2x2
Tabla de ejemplo
AA
BB
f(A,B)f(A,B)
0
0
0
0
1
1
1
0
1
1
1
1
X2X1X_2 \diagdown X_1
00
1
00
0
1
1
1
1
Ejemplo Mapa de Karnaugh 4x4
X3X4X1X2X_3X_4 \diagdown X_1X_2
00
01
11
10
00
0
1
1
0
01
1
1
1
1
11
0
0
0
0
10
1
1
0
0
2. - Inflar Globos
💡
Inflar los globos consiste en agrupar 1’s en grupos, lo más grandes posible, de potencias de 2
  • Podemos traspasar los bordes
notion image
notion image
notion image
 
3. - Nombrar y Sumar
💡
Siendo cada globo un minterm, cada minterm estará formado solo por las cordenadas compartidas por todos los elementos del globo
4. - Don’t Cares (X)
💡
Como estos valores se pueden interpretar como queramos, se suelen interpretar como unos si esto nos ayuda a inflar un globo

Circuitos aritmético-lógicos básicos


Semisumador de 1-bit

📖
El semisumador (half-adder) es un circuito que suma dos bits de entrada a y b, y nos devuelve un bit de resultado s y un bit de acarreo c. El bit más significativo del resultado es c. La implementación del semisumador utiliza una puerta and y una puerta xor, de dos entradas.
 
notion image

Sumador completo de 1-bit

📖
El sumador completo de 1 bit es igual que el semisumador, sin embargo, contempla un acarreo de entrada CarryInCarryIn .
A la salida veremos un bit de salida SS y un bit de CarryOutCarryOut.
El funcionamiento es como si tuviéramos una suma de 3 bits.
📕 Notación necesaria:
  • El apóstrofo (o una barra superior) indica negación NOT.
  • La suma lógica se representa mediante una puerta OR.
  • El punto (producto lógico) representa una puerta AND.
  • El signo + rodeado por un círculo corresponde a una puerta XOR.
 
notion image
 
notion image

Sumador completo de nn-bits

📝
El sumador completo de n bits viene de la concatenación de sumadores completos de 1 bit. Conectar el acarreo de salida de un sumador con la entrada del siguiente facilita el seguimiento de la propagación del acarreo.
Este tipo de sumador solo permite utilizar binario puro.
 
notion image

Restador

📖
La resta binaria se realiza modificando un sumador completo, para restar, deberemos mantener el bit A, realizar el complemento a 2 del bit B, por último, deberemos poner a 1 el CarryInCarryIn
  • Cada bit de b se invierte con una puerta NOT antes de entrar en el sumador.
  • El acarreo de entrada del bit 0 siempre es 1.
  • Se invierte el acarreo de salida del bit n-1 con una puerta NOT para ajustar su valor. (cuando acarrea el siguiente)
 
notion image

Sumador-restador

📖
El sumador y el restador se pueden unir en un solo circuito que realiza suma o resta según una señal de control. Este circuito utiliza un sumador completo modificado.
  • Cada bit de b se combina con una puerta XOR, realizando una suma exclusiva con un bit de operación (Op).
  • Op = 0, se suma; cuando Op = 1, se resta.
  • La señal Op se genera externamente al circuito.
  • El acarreo de salida del bit más significativo se ajusta con una XOR.
  • Para la resta, el operando b está en complemento a 2.
 
notion image

Construcción incremental de una ALU sencilla


📖
Construcción de una ALU sencilla <MiniALU>
Una ALU sencilla tiene un diseño que se prolonga de abajo a arriba. Primero se construye una MiniALU para 1 bit y posteriormente se construye una ALU para datos de 32 bits mediante la concatenación de 32 MiniALU. Esta ALU sencilla permite realizar las siguientes operaciones: and, or, add, sub, slt, nor.

Implementación And / Or (operaciones lógicas)

📄
Para implementar operaciones lógicas, sólo necesitaremos las puertas lógicas correspondientes y un multiplexor con una señal de control (código de operación) que gobierne su salida.
  • Implementamos una puerta AND para el producto lógico.
  • Implementamos una puerta OR para la suma lógica.
  • tomaremos el Enable del Mux a 1 por defecto
notion image
⚙ Códigos de operación
  • Op = 0 → AND
  • Op = 1 → OR

Implementación add (suma)

📄
Posteriormente, añadimos a nuestra ALU un sumador completo, ampliando así el multiplexor. Se agrega una nueva entrada llamada acarreo de entrada (cinc_{in} = CarryInCarryIn) junto a las entradas a,ba, b y OperationOperation.
Para esta pequeña ALU que realiza tres operaciones (producto lógico, suma lógica y suma aritmética), es necesario expandir el multiplexor. Además, los bits de selección de Operation deben ser 2, ya que permiten hasta 4 operaciones diferentes:
notion image
Códigos de operación
  • Op = 00 → AND
  • Op = 01 → OR
  • Op = 10 → a+b
 

Implementación sub (resta)

📄
Añadimos las operaciones de resta. En el sistema de complemento a 2, restar es igual a sumar el opuesto. Para calcular el opuesto, añadimos una puerta not al bit b y luego le sumamos 1 (Este valor 1 adicional se introduce mediante la señal cinc_{in} (acarreo de entrada)).
notion image
Códigos de operación
  • Op = 00 → AND
  • Op = 01 → OR
  • Op = 10 → a + b
  • Op = 11 → a - b
 

Implementación nor (negación de la suma lógica)

📄
Para implementar la operación NOR (que es la negación de una suma lógica), aprovechando el Teorema de De Morgan, reutilizamos la puerta AND existente.
Esto evita añadir una puerta NOR al circuito y usar una entrada adicional en el multiplexor que selecciona el resultado.
La operación NOR, que es igual a la negación de la suma, se expresa como
a NOR b=(a+b)=a b=(NOT a) AND (NOT b)a \ NOR \ b = (a + b)' = a' ∙\ b' = (NOT \ a) \ AND \ (NOT \ b).
Ya tenemos la puerta AND y NOT para b, pero necesitamos una puerta NOT para a.
Agregamos un nuevo multiplexor para la señal a, controlado por la señal AinvertA_{invert}.
Códigos de operación:
(es importante darse cuenta de que hay un CoOp con 2 operaciones distintas)
BitOperationBitOperation
AinvertA_{invert}
BinvertB_{invert}
cinc_{in}
OperacioˊnOperación
00
0
0
X
AND
00
1
1
X
NOR
01
0
0
X
OR
10
0
0
0
a + b
10
0
1
1
a - b
notion image

Implementación slt (set lower than)

📄
Añadimos la operación slt que compara dos registros ($rs , $rt)y guarda en $rd el resultado de la comparación:
  • if ($rs < $rt) → $rd = 0x00000001
  • else → $rd = 0x00000000
Para agregar la operación de comparación a < b a nuestra miniALU, debemos realizar la resta a y b sin almacenar el resultado completo. Si a - b < 0, entonces a < b, lo cual es nuestra condición de interés.
Para implementar esto en la miniALU:
Para n-1 miniALUs (las primeras 31 en este caso)
  • Expandimos el multiplexor de selección de operación a 4 entradas, donde la entrada 3 (la última) es la señal Less.Less.
⚠️ Sólo deberemos incluirlo en la última miniALU
  • Ampliamos el multiplexor a 4 entradas, con la entrada 3 siendo la señal Less.Less.
  • Introducimos dos nuevas salidas:
    • SetSet : Refleja el bit de suma del sumador completo y, por lo tanto, el bit de signo de la resta a - b.
    • OverflowOverflow : Indica el desbordamiento en una operación aritmética.
Para incorporar la operación de comparación a < b en nuestra miniALU, realizamos una resta interna, donde el bit 31 del resultado (y por lo tanto SetSet) será igual a 1 si a < b, debido a que los datos se manejan en complemento a 2, y el bit 31 representa el bit de signo.
Es importante notar que el bit de suma del sumador de la última miniALU está conectado a la entrada 2 del multiplexor, pero también se proporciona directamente como salida SetSet
Códigos de operación:
BitOperation
AinvertA_{invert}
BinvertB_{invert}
cinc_{in}
Operación
00
0
0
X
AND
00
1
1
X
NOR
01
0
0
X
OR
10
0
0
0
a + b
10
0
1
1
a - b
11
0
1
1
slt

ALU de 32 Bits

📄
Combinando adecuadamente las miniALU de 1 bit, se obtiene la ALU de 32 bits.
  • Cada miniALU recibe dos bits ((AA yy BB)) y devuelve un bit de resultado (R)(R).
  • El CarryOutCarryOut de una miniALU corresponde al CarryInCarryIn de la siguiente miniALU.
  • El CarryOutCarryOut de la última miniALU (peso 31) se ignora ya que nunca forma parte del resultado (valor don’t care).
  • El CarryInCarryIn de la primera miniALU (peso 0) es una entrada más del circuito.
  • Todas las miniALU reciben la misma palabra de operación.
Entradas Less
  • La salida SetSet de la última miniALU (peso 31) es la entrada LessLess correspondiente a la primera miniALU (peso 0).
  • El resto de las entradas LessLess de las otras miniALU están fijadas al valor 0.
Optimización
  • Siempre que CarryInCarryIn para la primera miniALU (peso 0) vale 0, la señal correspondiente a BinvertB_{invert} también vale 0, y viceversa.
  • Como ambas señales toman siempre los mismos valores, podemos unificarlas en una sola señal que llamaremos BnegateB_{negate}.
notion image

Otros circuitos aritmético-lógicos


Operaciones de Desplazamiento

📖
Los desplazamientos son operaciones a nivel de bits en las que estos se mueven hacia la derecha o la izquierda un número determinado de posiciones según el tamaño del mismo.
  • Desplazamiento hacia la derecha:
    • Equivale a una división entera entre 2.
  • Desplazamiento hacia la izquierda:
    • Equivale a una multiplicación por 2.
📢
Tener en cuenta que no se pierdan bits por los extremos para las equivalencias.
Tipos
  • Desplazamiento lógico:
    • Los bits que entran por los extremos son 0.
  • Desplazamiento aritmético:
    • Si es hacia la derecha, se repite el bit de signo.
    • Si es hacia la izquierda, entra un 0.
  • Rotación:
    • Los bits que salen por un extremo entran por el otro.
  • En algunos casos, el bit que entra procede de un bit particular del registro de estado del procesador.
La operación realizada depende del sistema de representación numérica:
  • Datos en binario puro: El desplazamiento es lógico.
  • Datos en complemento a 2: El desplazamiento es aritmético.
  • Para conservar los bits que salen por un extremo: Se aplica una rotación.

Operaciones de Desplazamiento de Bits

📖
Desplazamiento Lógico
notion image
📖
Desplazamiento Aritmético
notion image
📖
Rotación
notion image

Operación de Extensión de Signo

📖
La extensión de signo es una operación que permite expresar el mismo valor numérico con mayor número de bits.
  • Los bits nuevos se añaden por la izquierda.
Depende del sistema de representación numérica utilizado:
  • Datos en binario puro: Se añaden ceros por la izquierda.
  • Complemento a 2: Se repite el bit de signo del dato de entrada.

Otros Circuitos

📚
Otros Ejemplos
  • Sumadores paralelos con acarreo anticipado
  • Multiplicadores (suma-desplazamiento)
  • Divisores (división por restauración)
  • Comparadores
  • Circuitos aritméticos para otros sistemas de representación:
    • Complemento a 1
    • BCD (decimal codificado en binario)
    • Coma flotante (IEEE 754)
  • Circuitos aritméticos en chips de escala de integración media (MSI)