0% encontró este documento útil (0 votos)
52 vistas41 páginas

Capitulo 3

Este documento describe las operaciones básicas realizadas por la Unidad Aritmética Lógica (ALU) de un computador. Explica los diferentes tipos de desplazamientos, operaciones lógicas como AND, OR y XOR, y operaciones aritméticas como suma y resta. También detalla cómo se implementan circuitos para realizar estas operaciones a nivel de bits usando representaciones binarias.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
52 vistas41 páginas

Capitulo 3

Este documento describe las operaciones básicas realizadas por la Unidad Aritmética Lógica (ALU) de un computador. Explica los diferentes tipos de desplazamientos, operaciones lógicas como AND, OR y XOR, y operaciones aritméticas como suma y resta. También detalla cómo se implementan circuitos para realizar estas operaciones a nivel de bits usando representaciones binarias.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Capítulo 3.

Aritmética para Computadores

Introducción.

Operaciones básica en la Unidad Aritmética Lógica (ALU).

Construcción de una ALU.

Algoritmos e implementación de multiplicaciones y divisiones.

Aritmética en coma Flotante.

1
Introducción

• La Unidad Aritmética es la encargada de tratar los datos, ejecutando las operaciones


requeridas, de acuerdo al programa.

• Se llamará operador a todo circuito electrónico capaz de realizar una operación


aritmética o lógica.

• Por su ámbito de aplicación los operadores pueden ser: Genéricos o Especializados.

• Los primeros realizan distintas operaciones y los segundos sólo una.

• Por su diseño podemos encontrar dos tipos de operadores, los Combinacionales y los
Secuenciales.

2
Introducción

• Un operador Combinacional tiene las siguientes características:


– Realiza una o varias operaciones.
– No tiene elementos de memoria.
– Realiza la operación en una sola fase.
– El tiempo de respuesta depende de la tecnología de diseño.

• Un operador Secuencial se caracteriza por:


– Realiza una o varias operaciones.
– Tiene elementos de memoria.
– Realiza la operación en varias fases (algoritmo).
– Su construcción exige circuitos digitales secuenciales.

3
Introducción

• Por lo general el número de operandos que se utilizan en los operadores depende del
tipo de operación a realizar.

• Podemos encontrar operaciones Monádicas (un solo operando) como la negación, y


operaciones Diádicas (dos operandos) como la suma.

• Las operaciones más corrientes que se pueden encontrar son:


– Desplazamiento: Lógico, circular, aritmético.
– Lógicas: NOT, AND, OR, XOR.
– Aritméticas: Negación, suma, resta, multiplicación y división.

4
Operaciones básicas con la Unidad Aritmético Lógica

• Operaciones de Desplazamiento: Consisten básicamente en correr los bits de una palabra hacia la
izquierda o la derecha.

• Llamando A al operando origen, formado por n bits (a0, a1,...an-1), y D al resultado, la operación de
desplazamiento es:
di+k =ai para i = 0, 1, .... n-1

• El parámetro k indica el número de posiciones del desplazamiento, mientras que el signo indica si es a
derecha (signo -) o a izquierda (signo +).

• Los computadores sencillos sólo permiten desplazamientos con valores de k = 1 y k = -1, esto es de
una sola posición.

5
Operaciones básicas con la Unidad Aritmético Lógica

• El gran problema de las operaciones de Desplazamiento es que hacer con la


información que desaparece por un extremo y aparece por otro.

• En función de la consideración anterior podremos definir tres tipos de desplazamiento:


– Desplazamiento Lógico.
– Desplazamiento Circular.
– Desplazamiento Aritmético.

• En cualquiera de los tres no se puede aplicar directamente la fórmula anterior.

6
Operaciones básicas con la Unidad Aritmético Lógica

• Desplazamiento Lógico: En estos desplazamientos los valores de los extremos se


completan con “ceros”, y en ocasiones con “unos”.

A a7 a6 a5 a4 a3 a2 a1 a0 k=2

“0”
D d7 d6 d5 d 4 d3 d 2 d 1 d0

7
Operaciones básicas con la Unidad Aritmético Lógica

• Desplazamiento Circular: En estos desplazamiento los bits que sobran por un lado se
insertan por el otro, ya sea hacia la derecha o hacia la izquierda.

A a7 a6 a5 a a3 a2 a1 a0 k=2
4

D d7 d6 d5 d4 d3 d2 d1 d0

8
Operaciones básicas con la Unidad Aritmético Lógica

• Desplazamiento Aritmético: Este tipo implica que se realiza una multiplicación


(izquierda) o división (derecha), por ello deben tenerse en cuenta los siguientes
factores:

– En el desplazamiento a la izquierda, se van perdiendo los bits que indican el signo


y hay que introducir ceros a la derecha.
– En el desplazamiento a la derecha hay que conservar el signo del dato, que es
precisamente el valor que se introduce por el extremo izquierdo.
– En ambos casos se pierde la información que desaparece por uno de los
extremos, luego no es el mecanismo adecuado para implementar la multiplicación
y la división.

9
Operaciones básicas con la Unidad Aritmético Lógica

• Operaciones Lógicas: Son aquellas en las que se aplica el Álgebra de Boole, en la


que todas las variables tienen valores 0 ó 1, existen tres operadores a los cuales en los
computadores se le incorpora uno más.

– Operador OR se escribe +. El resultado es 1 si alguna de las variables es 1,


también recibe el nombre de suma lógica.
– Operador AND se escribe •. El resultado es 1 si y sólo si ambos operandos valen
1, también recibe el nombre de producto lógico.
– Operador unitario NOT se escribe como ~. El resultado es 1 si y sólo si el valor del
operando es 0.
– Operador XOR se escribe . El resultado de la operación es 1 siempre que ambos
operandos tengan valores diferentes.

10
Operaciones básicas con la Unidad Aritmético Lógica

a b c=a+b a a b c=a•b
a c 0 0 0 c 0 0 0
0 1 1 0 1 0
b 1 0 1 1 0 0
1 1 1 b 1 1 1

a b c=ab
a c 0 0 0
a c a c=~a
0 1 1
0 1
1 0 1
b 1 1 0 1 0

11
Operaciones básicas con la Unidad Aritmético Lógica

• Operaciones Aritméticas: Son las ya conocidas, de las que entenderemos por


básicas sólo la negación, la suma y la resta.

• La manera de implementarlas y de diseñar los circuitos que representan a los


operadores depende directamente del tipo de representación numérica que se esté
utilizando.

• Así pues para el operador negación (cambio de signo) dependerá de si utilizamos, por
ejemplo, C1 o C2.

• El operador resta, generalmente se implementa como la suma de un número y su


negado, por lo que en realidad con diseñar los operadores negación y suma tenemos
suficiente.

12
Operaciones básicas con la Unidad Aritmético Lógica

• De igual manera que en la negación, la suma no es directamente implementable, pues


depende de la representación, pero también debe tener en cuenta los acarreos de
entrada y de salida.

• El número de operandos de la suma es tres: los dos sumandos y el acarreo de


entrada, cuando existe. El resultado de la suma es doble, por un lado la suma en sí y
por otro el acarreo generado.

• El operador suma se suele diseñar para un par de bits, con sus correspondiente
acarreos, y posteriormente se encadenan los circuitos para producir sumadores de n
bits.

• En la tabla siguiente se muestra el valor de las salidas, en función de las entradas,


para la suma.

13
Operaciones básicas con la Unidad Aritmético Lógica

ENTRADAS SALIDAS
ai bi cin si cout
0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1

14
Operaciones básicas con la Unidad Aritmético Lógica

• La implementación de los sumadores es un poco más compleja que la de los otros


operadores, así por simplicidad lo expresaremos como un bloque con tres entradas y
dos salidas que realiza la operación.

cin
cin
a
a
suma
b +
b
cout cout

15
Construcción de una ALU

“ALU n. [Unidad Artrítica y Lógica o (raramente) Unidad Aritmética y Lógica] Generador


de números aleatorios que viene de serie con todos los computadores.”
Stan Kelly-Bootle

• Obviamente la definición presentada arriba no es la correcta, pero a veces si parece


serlo, para comprender mejor como funciona y el porqué de las respuestas es
necesario profundizar en su diseño.

• Para ello vamos a seguir el esquema de más sencillo a más complicado.

16
Construcción de una ALU

• Para comenzar realizaremos la construcción de una ALU de un solo bit, y para ello
usaremos los componentes que hemos presentado anteriormente, añadiendo uno
nuevo.

• Será necesario, en algunas ocasiones tomar informaciones que provengan de entradas


diferentes, en función de algún tipo de selección.

• A este componente se le denomina Multiplexor y su misión es presentar a su salida


una y solo una de sus varias entradas, pero sin modificación alguna. La elección de la
entrada se realiza mediante un valor de selección.

17
Construcción de una ALU

a d c
0 c
0 a
b 1 1 b

• Como puede verse en la figura anterior este multiplexor tiene dos entradas de
información (a y b), una de selección (d) y una salida (c). En general, los multiplexores
cumplen la norma de que para “n” entradas debe haber: log2 “líneas de selección”, y
una sola salida.

18
Construcción de una ALU

• Para comenzar describimos el diseño de una ALU de 1 bit que sólo es capaz de
realizar las operaciones AND y OR.

Operación

a
0
Resultado
1
b

• Como se observa, el diseño implica el uso de una puerta de cada tipo y un multiplexor
que selecciona la operación.

19
Construcción de una ALU

• Avanzando un paso más incorporamos alguna operación extra a la ALU anterior, en


este caso optamos por la suma.

• Será necesario añadir una entrada de acarreo, y por supuesto, una salida de acarreo,
así como modificar el multiplexor para que sea capaz de seleccionar más de dos
operaciones.

• Esta modificación tiene alguna implicación de diseño adicional, ya que la entrada de


selección (denominada “operación”), no es de una sola línea sino de dos.

• Esto me permite seleccionar cuatro posibles entradas, de las que realmente,


aprovecho tres.

20
Construcción de una ALU

Operación
Acarreo In

a
0

1
Resultado

2
b

Acarreo Out

21
Construcción de una ALU

• Con el esquema anterior estamos en condiciones de realizar un ampliación a más de


un bit, concretamente 8 bits.

• Para ello, entenderemos que el esquema anterior es un “caja negra” con cuatro
entradas y dos salidas, capaz de realizar 3 operaciones.

Acarreo In Operación

a
ALU 1 Bit Resultado
b

Acarreo Out

22
Construcción de una ALU

Resultado 0 Resultado 1 Resultado 7

Operación

ALU 0 ALU 1 ALU 7


Acarreo In

a0 b0 a1 b1 a7 b7

23
Construcción de una ALU

• Con la ALU diseñada antes se pueden empezar a hacer cosas en un computador, pero
puede que aún no sea suficiente, quizás debamos incorporar una nueva operación, la
Resta.

• Para añadir la resta, sólo será necesario tratarla como la suma de un número y su
negativo, para ello añadimos el operador negación.

• Además será conveniente tener en cuenta cual es el tipo de representación, si es C1 ó


C2, ya que de ello depende el diseño final.

• En cualquier caso, es un diseño sencillo que se muestra a continuación para


representaciones en C2 en una ALU de 1 Bit.

24
Construcción de una ALU

Invertir B Operación
Acarreo In

a
0

1
Resultado

b 0 2

Acarreo Out

25
Construcción de una ALU

• Podemos observar que la entrada de inversión B, está conectada a la entrada Acarreo


In, por lo que cuando se produzca la selección de la resta se introducirá un valor “uno”
por la línea “Inversión B/Acarreo In”.

• Aún así debemos tener en cuenta que existe un retardo debido al cálculo de los
acarreos de los bits anteriores al actual, lo cual condiciona el funcionamiento global de
la suma o resta.

• Para solucionar este problema se debería diseñar un circuito que anticipe el acarreo en
cada bit, de forma que el nivel de lógica sea menor en el anticipador que en el
operador, adelantándose a la operación.

26
Construcción de una ALU

• Para ello se definen y diseñan anticipadores de acarreo en sumadores (carray-


lookahead adder) que se basan en el estudio de los valores a sumar en cada
momento.

• Sean ai y bi los bits a sumar. En cada suma se generará acarreo de salida sí y solo sí
“ai • bi = 1”, así mismo se propagará un acarreo entrante sí y solo sí “ai + bi ≠ 0”.

• Definiendo la generación de acarreo como “gi” y la propagación como “pi”, podemos


expresar el valor del acarreo de salida de forma general como

gi = ai • bi pi= ai+bi

ci+1 = gi + (pi • ci)

27
Construcción de una ALU

• La expresión anterior nos indica que cada acarreo se puede calcular de forma
independiente al resultado de la suma, el problema sigue siendo que cuantos más bits
compongan los operandos menos eficiente el adelanto de acarreo.

• Para solucionar el problema del alto número de términos (y por tanto de puertas),
podemos agrupar los bits en bloques de 4, e interpretar de nuevo el concepto de
generación y el de propagación de acarreo.

• Ahora en un bloque de 4 bits se producirá propagación sí y solo sí:

“Pi = p4i+3• p4i+2 • p4i+1 • p4i = 1”.

28
Construcción de una ALU

• Para la generación de acarreo solo nos interesa si hay acarreo en el bit más
significativo del grupo de 4, o bien se genera en un bit intermedio y todas las
propagaciones entre dicho bit y la salida son ciertas.

• Las condiciones anteriores se pueden expresar como:


Gi= g4i+3+(p4i+3• g4i+2)+(p4i+3 •p4i+2 •g4i+1)+(p4i+3 •p4i+2 •p4i+1 •g4i)

• Así la solución para el cálculo del acarreo de entrada de cada bloque de 4 bits es la
siguiente:

Ci+1 = Gi + (Pi • Ci)

29
Construcción de una ALU

Resultado 0-3 Resultado 4-7 Resultado 8-11 Resultado 11-15

c0
Unidad anticipadora de Acarreo

C1 C2 C3 cout

P0 G0 P1 G1 P2 G2 P3 G3
ALU0 ALU1 ALU2 ALU3

a0b0a1b1a2b2a3b3 a4b4a5b5a6b6a7b7 a8b8a9b9a10b10a11b11 a12b12a13b13a14b14a15b15

30
Construcción de una ALU

• Según lo visto anteriormente, parece que el anticipador de acarreo debe mejorar el


rendimiento o velocidad de la operación. En efecto, si suponemos que se produce un
retardo en cada nivel de puerta, veamos los cálculos.

• Para un sumador de 16 bits sin anticipación, necesito 2 retardos en el cálculo del acarreo
en cada sumador, luego se obtiene el acarreo final al cabo de 16x2=32.

• Si usamos el anticipador, gastaremos 5 retardos en la obtención del acarreo final, 2 para


Ci+1 otros 2 para el nivel Pi Gi, (peor caso ya que Pi consiste en único nivel) y 1 para pi y gi,
ya que cada uno consiste en un único nivel. Esto nos da una relación de 6 veces más
rápido cuando usamos anticipadores de acarreo.

C4 = G3 + (P3 • G2)+(P3 • P2 •G1) +(P3 • P2 • P1 • G0)+(P3 • P2 • P1 • P0 • c0)

31
Multiplicación

• Se suele utilizar un operador de suma/resta y un algoritmo determinado.

• Algoritmo de suma/desplazamiento.
– Se utiliza para multiplicar numero representados en sistema binario sin signo.
– Utiliza el sistema de multiplicación clásico de multiplicar e ir desplazando las sumas
parciales para luego obtener como resultado la suma total.
– El resultado será de 2n bits

32
Multiplicación: Suma/Desplazamiento

• Algoritmo suma/desplazamiento AxB Multiplicando Multiplicador

$t1 $t2

ALU +

Producto
Unidad de
BC $t3 $t4 control

1) $t1=A; $t2=B; $t3=$t4=$t5=0; $t5


2) Analizar bit menos significativo $t2 Contador

- Si es igual a 0 -> $t3=$t3+0


- Si es igual a 1 -> $t3=$t3+$t1
3) $t5=$t5+1
4) Desplazar aritméticamente a dcha. BC-$t3-$t4
5) Rotar a dcha. $t2
6) Si $t5<n ir a 2, sino Terminar. 33
Multiplicación: Algoritmo de Booth

• El algoritmo anterior no es válido para números negativos.

• Se podría analizar previamente los signos, pasarlos a positivos, multiplicar, y si fuera


necesario volver a convertir en negativo. No es eficiente. Solo para signo-magnitud.

• Utilizar bloques de 2 o 3 elementos solapados para acelerar la multiplicación (n/2 pasos).

• Se suma 0, A, 2A, 2A+A (0,1,2,3). (inconveniente es que se necesita un sumador adicional


para la 4ª combinación)

34
Multiplicación: Algoritmo de Booth Multiplicando Multiplicador $t2-1
• Algoritmo Booth AxB $t1 $t2

ALU +/-

Producto
Unidad de
$t3 $t4 control

1) $t1=A; $t2=B; $t3=$t4=$t5=0; $t5


2) Analizar dos bits menos significativo $t2 ($t2(-1)=0) Contador

- Si es igual a 10 -> $t3=$t3-$t1


- Si es igual a 01 -> $t3=$t3+$t1
3) $t5=$t5+1
4) Desplazar aritméticamente dcha. $t3-$t4
5) Rotar dcha. $t2
6) Si $t5<n ir a 2, sino Terminar.
35
División

• Es mas complicada que la multiplicación.

• Se utiliza un operador sumador/restador y algoritmo.

• Se van seleccionando bits del dividendo hasta que sea mayor que el divisor, mientras se
van colocando 0’s en el cociente. Cuando es mayor se añade un uno y se resta el divisor
del dividendo parcial. Repitiendo este proceso hasta completar los bits del dividendo.

• Existen dos algoritmos, con restauración y sin restauración.

• La división con signo es más compleja.

36
Aritmética en coma flotante

• Las sumas y restas son mas complejas ya que requieren de un alineamiento previo del
exponentes, mientras que la multiplicación y la división son más directas.

• Las sumas/restas requieren 4 etapas:


1) Comprobar valores cero
2) Ajuste de mantisas. (Alinear exponentes)
3) Sumar/Restar
4) Normalizar resultado.

37
Aritmética en coma flotante

• El alineamiento consiste en desplazar a la derecha el numero mas pequeño o desplazar a


la izquierda el más grande hasta que los exponentes sean iguales. Suele desplazarse el
pequeño para no perder precisión.

• Si se produce desbordamiento en la suma, se desplaza hasta la derecha, incrementando el


exponente.

• La normalización consiste en desplazar hacia la izquierda los bits de la mantisa hasta que el
más significativo sea uno.

38
Aritmética en coma flotante

• La multiplicación y la división son mas sencillos.

• En la multiplicación si cualquiera de los operandos es cero el resultado es cero, en caso


contrario se suman los exponentes y se multiplican las mantisas, teniendo en cuenta el
signo. Se normaliza y se redondea el resultado.

• En la división, se comprueban ceros, que darán cero o infinito como resultado. Se resta el
exponente del divisor del dividendo, y se dividen las mantisas. Normalización y redondeo
del resultado.

39
Aritmética en coma flotante

• El redondeo consiste en pasar a un formato de menos bits un resultado que ocupa mayor
longitud. Existen 4 tipos:

– Redondeo al más próximo


– Redondeo a +infinito
– Redondeo a –infinito
– Redondeo a 0 (truncamiento)

Ejemplos de redondeo (IEEE 754):


Número a +∞ a -∞ a cero al más próximo (al par)
+…110 10 +…111 +…110 +…110 +…110
+…011 10 +…100 +…011 +…011 +…100
- …110 11 - …110 - …111 - …110 - …111
- …011 10 - …011 - …100 - …011 - …100

40
Aritmética en punto flotante

• La ALU posee bits adicionales a la derecha del resultado, que se llaman bits de guarda, y
que intervienen en la normalización y redondeo del resultado.

• Estos bits deben eliminarse al almacenar el numero obtenido.

• Además suele existir un bit retenedor (sticky bit), utilizado en la resta que se coloca a la
derecha de los bits de guarda.

41

También podría gustarte