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 , negativo o ha habido desbordamiento. Entonces se activa una señal especial
Multiplexor
Existen varios tamaños
- 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
- Recibe un valor en binario puro 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
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
1 | ||
0 | 1 | |
1 | 1 | 1 |
Ejemplo Mapa de Karnaugh 4x4
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
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.
Sumador completo de 1-bit
El sumador completo de 1 bit es igual que el semisumador, sin embargo, contempla un acarreo de entrada .
A la salida veremos un bit de salida y un bit de .
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.
Sumador completo de -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.
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
- 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)
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.
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
⚙ 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 ( = ) junto a las entradas y .
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:
⚙ 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 (acarreo de entrada)).
⚙ 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
.
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 .
⚙ Códigos de operación:
(es importante darse cuenta de que hay un CoOp con 2 operaciones distintas)
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 |
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
⚠️ Sólo deberemos incluirlo en la última miniALU
- Ampliamos el multiplexor a 4 entradas, con la entrada 3 siendo la señal
- Introducimos dos nuevas salidas:
- : Refleja el bit de suma del sumador completo y, por lo tanto, el bit de signo de la resta a - b.
- : 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 ) 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
⚙ Códigos de operación:
BitOperation | 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 y devuelve un bit de resultado .
- El de una miniALU corresponde al de la siguiente miniALU.
- El de la última miniALU (peso 31) se ignora ya que nunca forma parte del resultado (valor don’t care).
- El 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 de la última miniALU (peso 31) es la entrada correspondiente a la primera miniALU (peso 0).
- El resto de las entradas de las otras miniALU están fijadas al valor 0.
Optimización
- Siempre que para la primera miniALU (peso 0) vale 0, la señal correspondiente a también vale 0, y viceversa.
- Como ambas señales toman siempre los mismos valores, podemos unificarlas en una sola señal que llamaremos .
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
Desplazamiento Aritmético
Rotación
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)