Descargar

Unidad aritmético lógica (ULA)

Enviado por Pablo Turmero


    edu.red

    1 Definición La ALU (unidad aritmético-lógica) es el dispositivo que se encarga de realizar: Operaciones aritméticas (suma, resta, etc.). Operaciones lógicas (and, or, xor, etc.).

    edu.red

    2 Circuitos combinatorios Su salida depende exclusivamente de sus entradas.

    edu.red

    3 Compuertas básicas

    edu.red

    4 Compuertas básicas

    edu.red

    5 Otras compuertas XOR (or exclusiv0). EQV (equivalence). NAND (not AND). NOR (not OR).

    edu.red

    6 Multiplexor El multiplexor (mux) tiene 2n entradas de datos, n bits de selección y una salida. Los bits de selección se usan para decidir cuál entrada pasa a la salida. Mux 2 a 1

    edu.red

    7 Multiplexor Mux 4 a 1

    Mux 8 a 1

    edu.red

    8 Sumador completo Sumador completo (full adder) de 1 bit: Entradas: dos números de 1 bit y un bit de carry de entrada. Salidas: la suma de 1 bit y un bit de carry de salida.

    edu.red

    9 Sumador completo

    edu.red

    10 Sumador completo Suma = a ? b ? CarryIn CarryOut = (a · CarryIn) + (b · CarryIn) + (a · b) = (a + b) · CarryIn + (a · b)

    edu.red

    11 Sumador completo Diagrama a bloque.

    edu.red

    12 ALU de 1 bit Dos operaciones: AND y OR. Un bit para seleccionar la operación.

    edu.red

    13 Agregando operaciones El siguiente paso es agregar la suma. Se agrega un sumador completo al diseño anterior.

    edu.red

    14 ALU de 1 bit 3 operaciones: AND, OR y suma. 2 bits para seleccionar la operación.

    edu.red

    15 Agregando operaciones Agregar la resta a – b. a – b ? a + b si b está en complemento a 2. El complemento a dos de b se encuentra sumando 1 al complemento a uno de b. El complemento a uno de b se encuentra negando a b. a – b = a + (–b) = a + (¬b + 1) = a + ¬b + 1 El 1 de la suma viene en CarryIn.

    edu.red

    16 ALU de 1 bit 4 operaciones: AND, OR, suma y resta. 2 bits para seleccionar la operación. Un bit extra para diferenciar entre la suma y la resta. En la resta, CarryIn es 1.

    edu.red

    17 ALU de 1 bit

    edu.red

    18 ALU de 1 bit

    edu.red

    19 Agregando operaciones Agregar la operación NOR: ¬(a + b) Ley de DeMorgan: ¬(a + b) = ¬a · ¬b La ALU ya puede calcular a · b y ¬b. Hace falta poder calcular ¬a.

    edu.red

    20 ALU de 1 bit 5 operaciones: AND, OR, NOR, suma y resta. 2 bits para seleccionar la operación. Binvert diferencia entre la suma y la resta. En la resta, CarryIn es 1. Ainvert y Binvert diferencian entre AND y NOR.

    edu.red

    21 ALU de 1 bit

    edu.red

    22 ALU de 1 bit

    edu.red

    23 Agregando operaciones Variando Ainvert y Binvert permite generar: 8 operaciones lógicas. 5 operaciones aritméticas.

    edu.red

    24 Agregando operaciones

    edu.red

    25 Agregando operaciones

    edu.red

    26 ALU de 32 bits ¿Cómo se genera una ALU de 32 bits? Con 32 ALUs de 1 bit. CarryOut de la ALUi se conecta a CarryIn de la ALUi+1. En la resta CarryIn ALU0 se conecta a 1.

    edu.red

    27 ALU de 32 bits

    edu.red

    28 ALU para MIPS El diseño de la ALU está incompleto. La mayoría de las instrucciones de MIPS pueden ser realizadas con las operaciones AND, OR, suma y resta. Se necesita soportar la instrucción slt (set on less than). slt $x, $y, $z guarda 1 en $x si $y < $z y 0 en otro caso.

    edu.red

    29 Soportando slt slt $x, $y, $z pone a ceros los bits 1 a 31 de $x. El bit 0 de $x tiene el resultado de la comparación de $y y $z.

    (Gp:) 31 (Gp:) 30 (Gp:) 1 (Gp:) 0 (Gp:) 0 (Gp:) 0 (Gp:) … (Gp:) … (Gp:) 0 (Gp:) $y < $z (Gp:) $x

    edu.red

    30 Soportando slt Se calcula t = $y – $z. Si t es negativo $y < $z. Si t es positivo o cero $y ? $z. En MIPS los números negativos tienen 1 en el bit 31. El bit 31 de t tiene el resultado de la comparación.

    edu.red

    31 Soportando slt Para hacer una ALU de 32 bits se consideran dos tipos de ALU distintos. Una para los bits del 0 al 30. Parecida al diseño anterior, tiene una entrada extra llamada Less. Otra para el bit 31. Además de la entrada Less, tiene una salida Set con el signo de la resta y un detector de overflow.

    edu.red

    32 ALU para los bits 0 al 30

    edu.red

    33 ALU para el bit 31

    edu.red

    34 ALU de 32 bits Se conectan las 32 ALUs. CarryOut de la ALUi se conecta a CarryIn de la ALUi+1. Las entradas Less de la ALU1 a la ALU31 se ponen a 0. La entrada Less de la ALU0 se conecta a la salida Set de la ALU31. En la resta CarryIn de la ALU0 se conecta a 1.

    edu.red

    35 ALU de 32 bits

    edu.red

    36 ALU para MIPS Falta soportar los brincos condicionales. beq $x, $y, L – brinca a L si $x = $y. bne $x, $y, L – brinca a L si $x ? $y. Se calcula t = $x – $y. Si t es cero, $x = $y. Si t no es cero, $x ? $y.

    edu.red

    37 ALU para MIPS Se agrega una salida Zero que detecte cuando todos los bits de resultado sean cero. Zero = ¬(Result31 + Result30 + … + Result1 + Result0) Se combinan la entradas Binvert y CarryIn de la ALU0 con el nombre Bnegate. Binvert = CarryIn = 1 cuando hay que restar. Binvert = CarryIn = 0 en la suma y operaciones lógicas.

    edu.red

    38 ALU para MIPS

    edu.red

    39 Diagrama y tabla de la ALU

    edu.red

    40 Overflow El overflow ocurre cuando el resultado de una operación no se puede representar en el hardware. Con 4 bits, el rango de enteros con signo, usando complemento a dos para los negativos, es de -8 a +7. La suma 5 + 6 genera overflow. La resta -5 – 6 genera overflow.

    edu.red

    41 Overflow Sumando 5 + 6 con 4 bits: 0101 (+5) + 0110 (+6) ————- 1011 (-5) ? ¡error! Restando -5 – 6 con 4 bits: 1011 (-5) + 1010 (-6) ———— 0101 (+5) ? ¡error!

    edu.red

    42 Detectando overflow El overflow ocurre en la suma cuando: Al sumar dos positivos el resultado es negativo. Al sumar dos negativos el resultado es positivo. El overflow ocurre en la resta cuando: Al restar un negativo de un positivo el resultado es negativo. Al restar un positivo de un negativo el resultado es positivo.

    edu.red

    43 Detectando overflow

    edu.red

    44 Detectando overflow Método obvio: revisar los signos de los operandos y del resultado. Si los operandos son positivos, revisar que el resultado sea positivo. Los demás casos se hacen igual. Método no (tan) obvio: si el carry de entrada es distinto al carry de salida en el bit mas significativo, se generó overflow. La demostración se queda de tarea.

    edu.red

    45 Overflow en MIPS Las operaciones con enteros con signo deben reconocer el overflow. Con 4 bits, el rango es de -8 a +7. 5 + 6 genera overflow. Las operaciones con enteros sin signo ignoran el overflow. Con 4 bits, el rango es de 0 a 15. 5 + 6 = 11. 14 + 7 = 5 (se ignora el último carry).

    edu.red

    46 Overflow en MIPS En MIPS hay dos clases de instrucciones aritméticas: La suma (add), suma inmediata (addi) y resta (sub), reconocen el overflow. La suma sin signo (addu), suma inmediata sin signo (addiu) y resta sin signo (subu), ignoran el overflow.