ARQUITECTURA DE COMPUTADORES -1

Anuncio
ARQUITECTURA DE COMPUTADORES -1
ALGORITMOS Y PROCESADORES ARITMETICOS
TEMA 1 - INTRODUCCIÓN
Definición y descripción de un procesador aritmético (PA)
Niveles de representación funcional de un PA
Sistemas de representación de números
Tipos de sistemas de numeración
Representación de vectores de dígitos como vectores de bits
TEMA 2 – NUMEROS NATURALES
Representación de números naturales
Algoritmo aritmético de suma
Implementación de la suma
TEMA 3 - NÚMEROS ENTEROS
Mapeo directo vs mapeo indirecto
Teoría de los sistemas complementados
Representación de enteros en signo y magnitud
Representación de enteros en exceso o polarizado
Resumen
TEMA 4 – ACELERACIÓN DE LA SUMA
Generación y propagación del acarreo
CSA. Carry Save Adder
CLA. Carry Lookahead Adder (transparencias grupo 10)
TEMA 5 – OTRAS OPERACIONES
Extensión de rango
Desplazamientos aritméticos
TEMA 6 – ALGORITMOS PARA MULTIPLICAR NATURALES
Multiplicación secuencial
Acceleración de la multiplicación secuencial
Algoritmos paralelos para la multiplicación (Arrays)
TEMA 7 – MULTIPLICACIÓN DE ENTEROS EN C’2
Multiplicación secuencial
Algoritmos paralelos para multiplicaciones en C’2 (arrays)
TEMA 8 – REPRESENTACIÓN Y OPERACIONES CON REALES
Representación de números reales
Representación punto flotante IEEE 754
Multiplicación en punto flotante
Suma/resta en punto flotante
ALGORITMOS Y PROCESADORES ARITMETICOS
TEMA 1 - INTRODUCCIÓN
DEFINICIÓN Y DESCRIPCIÓN DE UN PROCESADOR ARITMÉTICO
(PA)
Un procesador aritmético (PA) es un circuito que realiza operaciones.
Los
operandos
pueden
ser
Operandos
P.A.
Resultados
naturales,
enteros
y
reales.
Y
pueden
haber
Operaciones
un solo operando o varios, y estos se
caracterizan por la representación y el
inicio
final
rango de estos, el cual es siempre finito.
Esquema de un procesador aritmético
Las operaciones pueden ser una
sola o varias en cuyo caso el PA pasa a
llamarse ALU.
El resultado puede ser un número, una variable lógica (resultado de una comparación) o
excepciones (overflow, dividir por cero, etc.).
NIVELES DE REPRESENTACIÓN FUNCIONAL DE UN PA
Nosotros veremos un PA desde tres puntos diferentes de vista:
· Nivel abstracto: se ve como un nivel de matemáticas, es decir las operaciones son como
funciones. Este nivel nos lleva desde el número concreto a una representación de este.
· Nivel algoritmo: la operación a realizar trabajará sobre la representación obtenida del número en
el nivel abstracto. El número se considera como un vector de dígitos. Por lo tanto para hacer una operación
primero se representará el número mediante el nivel abstracto, una vez obtenido el vector de dígitos se
realiza la operación y al resultado se le realiza el nivel abstracto en sentido contrario.
· Nivel implementación: la implementación se hace en binario. Zn  Bk
SISTEMAS DE REPRESENTACIÓN DE NÚMEROS
Consideramos:
X=(Xn-1, Xn-2, ....., X1, X0)
Y representamos el número como x y como X el vector de dígitos, los componentes de un sistema
numérico son:
- Di: que es el conjunto de valores que puede tomar un dígito. XiDi.
- Reglas de interpretación: f(X)=x.
n 1
Ej.: decimal= x=  X i ·10 i
i0
El rango de un sistema de representación es el conjunto de valores que depende de Di y del número
de dígitos.
|Di|n  conjunto de valores
TIPOS DE SISTEMAS DE NUMERACIÓN
Tenemos diferentes tipos de clasificación de los sistemas:
- Redundantes: un mismo número puede estar representado de varias formas.
- No redundante: un conjunto de dígitos representa un único valor.
- No ponderados: los números romanos.
- Ponderados o posicionales: el valor del dígito depende no solo del mismo sino también de la
posición que ocupa. La regla de interpretación para estos sistemas es la siguiente:
AC -
2
n 1
x=  X i ·w i
Donde w es el vector de pesos
i0
El vector de pesos puede ser de dos tipos:
· De base mixta: donde necesitamos del vector de bases para calcular el vector de pesos. Y para
calcular el vector de pesos se sigue las siguientes reglas.
Vector de bases  R = (Rn-1, Rn-2, ...., R1, R0)
w0=1, wi=wi-1·Ri-1
Ejemplo: sistema horario: R=(24h, 60 min, 60 s)
W=(3600, 60, 1)
· De base fija: donde el vector de bases es siempre el mismo R = (r, r, ..., r) y la regla de
interpretación queda de la siguiente forma:
n 1
wi=ri
x=  X i ·r i
i0
- Canónicos: donde Di={0, 1, ...., | r |-1} por ejemplo el caso decimal.
- No canónicos: por ejemplo Di = (-5, -4, -3, -2, -1, 0, 1, 2, 3, 4) = (5,4,3,2,1, 0, 1, 2, 3, 4)
Ejemplo: Suponemos que tenemos Di=(1, 0, 1) en un sistema ponderado, no canónico y de base fija dos
que números decimales representan estos números:
1101= 1·20+0·21+1·22+1·23=13
1111= -1·20+1·21+1·22+1·23=13
REPRESENTACIÓN DE VECTORES DE DÍGITOS COMO VECTORES
DE BITS
Para saber cuantas cifras necesitamos para representar, en binario, se sigue la siguiente formula:
n 1
Xn-1
Xn-2
X1 X0
x=  X i ·r i
i0
k =log2|Di|
k= es el número de bits necesarios para representar
dicho dígito.
La codificación BCD es la codificación del decimal en binario pero esta desaprovecha dígitos.
Decimal:
1 digito ------ 10 valores
2 dígitos ------ 100 valores
Binario:
16 valores
256 valores
k 1
Xi =  X i j ·2 j esta es la formula para saber que numero decimal es codificado en binario.
j0
TEMA 2 – NUMEROS NATURALES
REPRESENTACIÓN DE NÚMEROS NATURALES
La representación utiliza un sistema ponderado, canónico y de base positiva y por lo tanto es un
sistema no redundante.
Sea X=(Xn-1, Xn-2, ...., X1, X0) la regla de interpretación es:
n 1
x=  X i ·r i
i0
y en nuestro sistema tenemos que:
- Di={0, 1, ....., r-1}
- r>0
- Y el rango es 0  x  rn-1
AC -
3
ALGORITMO ARITMÉTICO DE SUMA
Suponemos que tenemos dos números naturales x e y, y queremos saber la suma (s) de estos dos.
Sabemos que:
n 1
n 1
y=  Y j ·r
x=  X i ·r i
n 1
j
j0
i0
s=  X k ·r k
k 0
Y que el rango de los valores x e y son: x  r -1.
y  rn-1.
Por lo tanto el rango del resultado será: x + y  2·(rn-1)   rn+1-1.
De este valor obtenemos que para representar el resultado necesitaremos como mucho n+1 dígitos
en cualquier base. Se necesitan n+1 dígitos y no n debido al posible acarreo que se pueda producir al
sumar.
X=Xn-1rn-1+Xn-2rn-2+..........+X1r+X0
Y=Yn-1rn-1+Yn-2rn-2+..........+Y1r+Y0
S =Sn-1rn-1+ Sn-2rn-2+..........+S1r+ S0
If Xi+Yi<r then Si=Xi+Yi
Else ...+ (Xi+1+Yi+1)ri+1+(Xi+Yi)ri+...
...+ (Xi+1+Yi+1)ri+1+(Xi+Yi+r-r)ri+...
...+ (Xi+1+Yi+1)ri+1+ri+1+(Xi+Yi-r)ri+...
...+ (Xi+1+Yi+1+1)+ri+1+(Xi+Yi-r)ri+...
endif
Con esta demostración de cómo se suma el algoritmo definitivo queda como sigue (siendo Ci el
acarreo):
C0=Cin
For i=0 to n-1 do
If Xi+Yi+Ci < r then Si=Xi+Yi+Ci;
Ci+1=0;
Else Si=Xi+Yi+Ci-r;
Ci+1=1;
Endif
Endfor
Cout=Cn
Si al final de todo el bucle tenemos que Cout es igual a 1 entonces diremos que se ha producido un
overflow o una irrepresentabilidad, es decir, que no podemos representar dicho número.
n
IMPLEMENTACIÓN DE LA SUMA
IMPLEMENTACIÓN DE UN FULL ADDER (FA) A 3 NIVELES
Un full adder es un modulo que suma un solo bit de forma completa, es decir, puede sumar el
acarreo anterior y dar el que se pueda producir.
C0=Cin
For i=0 to n-1 do
Calculo de Si y Ci+1 en función de Xi, Yi y Ci
Endfor
Cout=Cn
Xi
Yi
Ci
FA
Ci+1
Si
Esquema de un Full Adder
AC -
4
Si r=2 la tabla de verdad y los mapas de Karnaugh quedan como sigue:
Xi Yi Ci Ci+1 Si
YiCi
YiCi
0 0 0 0
0
00 01 11 10
00 01 11 10
X
X
i
i
0 0 1 0
1
0
0
0
1
0
0
0 1 0 1
0 1 0 0
1
1 0 1 1 1
1 1 0 1 0
0 1 1 1
0
Ci+1=XiCi+XiYi+YiCi Si=XiYiCi+XiYiCi+XiYiCi+XiYiCi
1 0 0 0
1
3 AND + 1 OR
1 0 1 1
0
4 AND + 1 OR
1 1 0 1
0
Si también es el resultado de un O exclusiva
1 1 1 1
1
(da uno con un número impar de unos –
Por lo tanto para Si
ab=ab+ab-)
necesitaríamos una X-OR de tres
S=XYC
entradas pero como no existen
utilizaremos dos X-OR, quedando la implementación como muestra el siguiente esquema:
Xi
Yi
Ci
Ci+1
6 puertas
Suponiendo  el tiempo de una puerta tenemos que:
Ci+1=2
Si=2
Si
IMPLEMENTACIÓN DE UN FA CON HALF ADDER (HA)
Un Half Adder es un semisumador el cual solo suma dos bits y devuelve el resultado y el acarreo
pero no acepta como entrada un acarreo anterior.
Xi
Yi
HA
Ci+1
Si
Esquema de un half-adder
Xi Yi Ci+1 Si
0 0 0
0
0 1 0
1
1 0 0
1
1 1 1
0
Tabla de verdad del
half-adder
Ci+1=XiYi
Si=XiYi
Xi
Ci+1
Yi
Si
Implementación del half-adder
Del caso anterior tenemos que:
Ci+1=XiYiCi + XiYiCi + XiYiCi + XiYiCi = (Xi+Yi)YiCi + Xi(YiCi + YiCi) = YiCi + Xi(YiCi)
Ci
Yi
Xi
HA
CiYi
Ci+1
Si CiYi
HA
Ci+1
Si CiYiXi
Esquema de un FA realizado con dos HA
Ci+1 2 AND
Si=2
2 X-OR
Ci+1=3
1
OR
Si
TOTAL= 5 puertas
AC -
5
IMPLEMENTACIÓN SECUENCIAL DE LA SUMA DE N BITS
D: es un
biestable de tipo D.
X : son
registros
de
desplazamientos con
un tiempo TD de
desplazamiento
X
Y
Ci Y X
D
CLK
FA
Ci+1
Si
S
Tiempo: siendo el FA de tres niveles: (2+TD)·n
Siendo el FA dos HA: (3+TD)·n
IMPLEMENTACIÓN EN PARALELO DE LA SUMA DE N BITS
x3 y3
x2 y2
x1 y1
Tiempo: a tres niveles  2·n
Con HA  (2·n+1)·
Con Half-adders es 2n+1 porque
todos los sumadores hacen la suma de X e
Y a la vez y por lo tanto solo se tiene que
pasar por el segundo HA para completar el
calculo.
x0 y0 Cin
FA
FA
FA
Ci+1FA
Cout s3
s2
s1
s0
TEMA 3 - NÚMEROS ENTEROS
MAPEO DIRECTO VS MAPEO INDIRECTO
- Tenemos dos formas de tratar con los enteros:
Mapeo directo
Z
x


Nn
X
Mapeo indirecto
Z 
x 
N
Xe


f:
Nn
X
x : Valor implícito, Xe : Valor explícito, X : Vector de dígitos
- Representaciones
Sistemas complementados
Complemento a la base
Complemento a la base disminuida
Aritmética de exceso (polarizado)
Signo y magnitud
TEORÍA DE LOS SISTEMAS COMPLEMENTADOS
Xe = x mod c=
x si x  0
c-|x| si x <0
AC -
6
· Mapeo:
-C
Z
0
N
Cagada!,
se
solapan
las
representaciones de los positivos con
los negativos.
Tenemos que buscar una c adecuada
que cumpla que los números
positivos no se solapen ni haya
mucho espacio con los números
C
0
C
negativos. El caso ideal, gráficamente, seria:
N
0
+
Xe si x<c/2
x
Xe-c si xc/2
C/2
-
C
Los números positivos se mapean sobre los números positivos y
los negativos en los números consecutivos.
Si c es impar tendríamos un número que nos sobraría.
Ejemplo:
Xe
0
1
2
3
4
5
6
7
X1
0
1
2
-3
-2
-1
0
1
X2
0
1
2
3
4
-5
-4
-3
X3
0
1
2
3
-4
-3
-2
-1
Número de bits: n=3
Base: r=2
rn=8
X1  c=6 c/2=3. Sistema no simétrico y redundante, el 0 i el 1 tiene dos
representaciones.
X2  c=10 c/2=5. Sistema no simétrico. Hay numeros desparovechados.
X3  c=8 c/2=4. Sistema ideal
Para la representación se utilizara un sistema convencional ponderado de base r i n dígitos,
entonces el rango es: rango = 0 < Xe < rn-1
TIPOS DE SISTEMAS COMPLEMENTADOS
Hay dos tipos de sistemas complementados:
- Complemento a la base, cuando c=rn, y por lo tanto c es par.
- Complemento a la base disminuida, cuando c=rn-1, y por lo tanto c es impar. En este sistema
tenemos dos representaciones diferentes del número cero.
En todos los casos tenemos que x es el numero entero y Xe el numero natural que representa x.
COMPLEMENTO A LA BASE (COMPLEMENTO A DOS)
Con: base r=2
C=rn
El rango queda como sigue: 0  Xe  rn-1
En este sistema existe un número negativo mas que positivo, por lo tanto, el rango no es simétrico.
C=2n
C/2=2n-1
x si x  0
Xe
x
C+x si x < 0
Para r=2
Rango  -2n-1x2n-1-1
Xe si Xe < rn/2
Xe-rn si Xern/2
Xe si Xe < 2n-1
x
Xe-2n si Xe2n-1
COMPLEMENTO A LA BASE DISMINUIDA (COMPLEMENTO A 1)
Con: base r=2 y c=rn-1 tenemos que Xe = x mod c = x mod (2n-1)
Por ejemplo en n=3 tenemos que 23-1=7 i c pertenece a la numeración que utilicemos
AC -
7
Las funciones de transformación enteros y naturales son:.
x si x  0
Xe si Xe < rn-1/2
Xe
Ahora tenemos un rango simétrico:
x
rn-1+x si x  0
rn
 rn

 
 1 ... 
 1 
 2
  2

Xe-rn+1 si Xern-1/2
Para r=2 tenemos que el rango es: -(2n-1)  x  (2n-1-1)
MAPEO DIRECTO
Z  Nn
X  X=(Xn-1, Xn-2 , ...X0)
Los positivos tienen un cero como bit más significativo y los negativos un uno.
 Complemento a dos.
Xe si Xe < 2n-1
x
Xe-2n si Xe2n-1
n2
n 1
Xe=  Xi ·2
i
x=-Xn-1·2n-1+  Xi ·2 i
i0
i0
 Complemento a uno.
Xe si Xe < 2n-1/2
n2
x=Xn-1-Xn-2·2n-1+  Xi ·2 i
x
i0
Xe-(2n-1) si Xe>2n-1/2
SUMA EN SISTEMAS COMPLEMENTADOS
s= x + y Tenemos por lo tanto la siguiente expresión: Se= Xe + Ye. Donde Se queda como:
Se= s mod c= (x + y) mod c= [(x mod c)+(y mod c)]mod c= (Xe + Ye) mod c.
Xe
Ye
+ Natural
Mod c
Se
SUMA EN COMPLEMENTO A DOS
Tenemos los siguientes datos:
c=rn=2n; Se= (Xe + Ye) mod 2n  Se= We mod 2n; We= (Wn, Wn-1, Wn-2, ..., W0)
Donde Xe y Ye tienen n bits y We tiene n-1 bits.
We = Wn2n+Wn-12n-1+ ,,,+ W1·2+W0 = Wn + Wn-1·2n-1+ ,,,+ W1·2+W0
2n
2n
2n
D = c· d + r  D/d= c + (r / d), así para calcular el resto solo tenemos que despreciar el primer bit.
Xe
Ye
+ Natural
Se=We= (Wn-1, Wn-2, ..., W0)
Bit n+1 (Wn)
IRRESPRESENTABILIDAD O OVERFLOW
Tenemos que el rango de s, x, y ( s= x + y) es el siguiente: [-2n-1..2n-1-1] y están compuestos por n
bits.
En cambio el resultado de la suma tiene el siguiente rango: [-2n..2n-2]. Por lo tanto se pueden
representar dos números enteros diferentes con el mismo número natural, uno de positivo y el otro de
negativo.
Por lo tanto tenemos que se puede producir overflow en dos circunstancias:
- Cuando se suman dos positivos y el resultado obtenido nos sale negativo.
- Y cuando se restan dos negativos y el resultado obtenido nos sale positivo.
Overflow=Xn-1Yn-1Sn-1 + Xn-1Yn-1Sn-1
Otra formula es: OVF= Cn  Cn-1
AC -
8
SUMA EN COMPLEMENTO A 1
Los datos que tenemos son:
c = rn-1 = 2n-1; Xe =x mod c; We =Xe + Ye
y sabemos que Se =We mod (2n-1) y que el rango de We es: 0  We  2·(2n-1).
Para esta suma en complemento a uno tenemos dos puntos de vista diferentes:
 Cuando Wn=0: Se =We mod c= (Wn-1, Wn-2, ..., W0)
We si We < 2n-1
Se= We mod c
0 si We=2n-1
 Cuando Wn=1: Se=We mod c= We –(2n-1)= We-2n+1
(1, Wn-1, Wn-2, ..., W0)- (1, 0, ..., 0)+1= (0, Wn-1, Wn-2, ..., W0)+1
We – (2n-1) si 2n-1 < We < 2·2n-1
Se= We mod c
0 si We=2·(2n-1)
La suma en complemento a uno consiste, por lo tanto, en lo
siguiente:
Coger los bits de menos peso y sumarle el bit de mas peso a estos.
El esquema de un sumador en complemento a uno es el de la
derecha.
DETECCIÓN DE SIGNO
Xe
Ye
+ Naturales
Cout
Cin
Se
Sumador en complemento a uno
La detección de signo se hace como ya se ha mencionado antes, si el bit de mas peso es un cero
entonces el número es positivo, y si por el contrario es un uno tendremos un número negativo. Hay que
tener en cuenta que en complemento a uno tenemos dos representaciones del número cero. (00..0 y 11..1).
CAMBIO DE SIGNO EN SISTEMAS COMPLEMENTADOS
Z  N Nn
x  Xe  X
El cambio de signo en caso general se deduce de la siguiente forma:
Ze = Z mod c= (-x) mod c = c – (x mod c)= c-Xe
Ze= c-Xe
CAMBIO DE SIGNO EN COMPLEMENTO A UNO
n 1
c = rn-1=  ( r  1)·r i con base r=2
Zi
i0
n 1
Ze= c - Xe=
n 1
 ( r  1)·r - 
i
i0
i0
Zi
n 1
i
Xi ·r =
 (r  1 
n 1
i
Xi )·r =
i0
 (2  1 
i0
n 1
Xi )·r =  (1  Xi )·r
i
i
i0
El cambio de signo queda como sigue:
- Si Xi=0  1-Xi=1  Zi=1
- Si Xi=1  1-Xi=0  Zi=0
Por lo tanto Zi =Xi, es decir se han de cambiar ceros por unos y unos por ceros.
CAMBIO DE SIGNO EN COMPLEMENTO A DOS
c= rn y Ze=c-Xe=rn-Xe=rn-1+Xe+1
Donde rn-1+Xe es el cambio de signo en complemento a uno, y por lo tanto en cambio de signo en
complemento a dos consiste en cambiar ceros por unos y unos por ceros, y después sumar al resultado un
uno.
OVERFLOW EN EL CAMBIO DE SIGNO
En complemento a uno nunca se puede producir overflow, ya que el rango es simétrico.
En cambio en complemento a dos no puede haber overflow cuando se cambia de signo un número
positivo, pero en cambio si se puede producir a la hora de cambiar de signo el número mas pequeño
negativo, es decir, el número -2n-1.
AC - 9
Ahora podemos observar el caso descrito: x =-2n-1 = 100...0
si hacemos el cambio de signo tenemos: x=011....1
+
1
100....0
Como podemos observar obtenemos el mismo número al cual queríamos cambiar el signo, por lo
tanto obtenemos overflow cuando queremos cambiar de signo un número negativo y como resultado nos
da otro número negativo.
RESTA DE ENTEROS EN SISTEMAS COMPLEMENTADOS
Podemos deducir que la suma se puede convertir en una suma, veámoslo:
z =x – y = x + (-y)
El valor –y que se suma es un simple cambio de signo y por lo tanto hemos reducido la resta a una
suma de los enteros. Para realizar esta resta por lo tanto tenemos dos etapas:
- Cambio de sign.o de y
- Suma de x+(-y).
La implementación de la resta en complemento a dos queda como sigue:
X3
Cout
Y3
X2
FA
Y2
X1
FA
Y1
X0
FA
Y0
Cin=1
FA
Z3
Z2
Z1
Z0
Esquema de un restador en complemento a dos
La implementación de la resta en complemento a uno es la siguiente:
X3
Y3
X2
Y2
X1
Y1
X0
Y0
Cout
Cin
FA
Z3
FA
FA
FA
Z2
Z1
Z0
Esquema de un restador en complemento a uno
OVERFLOW EN LA RESTA
En complemento a uno en el cambio de signo no puede haber overflow y solo se puede producir
en la suma. En cambio en complemento a dos puede haber overflow en el cambio de signo y en la suma,
pero según como se implemente se puede evitar el overflow en la etapa del cambio de signo, la forma de
implementarlo es primero haciendo el cambio de signo de y en una etapa y sumarle uno, y en la segunda
etapa hacer la suma.
REPRESENTACIÓN DE ENTEROS EN SIGNO Y MAGNITUD
REPRESENTACIÓN
Los números enteros en signo y magnitud se representan mediante dos números, uno que indica el
signo (Xs) y el otro que indica la magnitud (Xm).
Ejemplo: -6  1 110
6  0 110
Mapeo directo
Mapeo indirecto
Z  N2
Z  N  Nn
 Nn
x  (Xs,Xm)  x=(Xn-1, Xn-2, ..., X0)
x  Xe  X
Mapeo indirecto:
x si x0
Xe si Xe2n-1
Xe= n-1
x= n-1
2 -x si x0
2 -Xe si Xe  2n-1
AC - 10
Mapeo directo:
n2

x=
Xi ·2
i
si Xn-1=0
i0
n2
2n-1-2n-1-  Xi ·2 i si Xn-1=1
n2
x=(1-2·Xn-1)

Xi ·2
i
i0
i0
Con esta representación tenemos un rango simétrico: -(2n-1-1)  x  2n-1-1
SUMA EN SIGNO MAGNITUD
4
+3
7
0100
-4
1100
4
0100
-4
1100
0011
+(-3)
1011
+(-3)
1011
+3
0011
0111
-7
1111
1
0001
-1
1001
Si los dos sumandos son del mismo signo la suma se realiza mediante la suma de magnitudes y
donde se mantiene el signo de cualquiera de ellos.
Si los dos sumandos son de diferentes signos la suma se realiza mediante la resta de magnitudes y
se coge el signo del número mayor en valor absoluto.
Z’m=Xm-Ym
Z’m > 0  Zm=Z’m
Zs=Xs
Z’m < 0  Zm=-Z’m
Zs=Ys
El algoritmo queda como sigue:
If (Xs =Ys) then Zm =(Xm +Ym) mod (2n-1-1) /* por tener los números codificados en Ca1*/
Zs =Xs
OVF =Cn-1
Else Z’m =Xm-Ym
OVF =no hay
If (Z’m 0) then Zm =Z’m
Zs =Xs
Else Zm =-Z’m
Zs =Ys
Endif
Endif
0 Xn-2 Xn-3 ..... X1 X0 Cn-2 =Cn-1
 Xm -Ym= Xm + (-Ym) 1 Yn-2 Yn-3 ..... Y1 Y0
Z’n-2 Z’n-3 ... Z’1 Z’0 El carry out se introduce en carry in
0 Xn-2 Xn-3 ..... X1 X0
0 Yn-2 Yn-3 ..... Y1 Y0
OVF  Cn-2  Cn-1
 Xm +Ym
El carry out se introduce en carry in, porque se hace la
suma en Ca1.
OTRAS OPERACIONES
-
Cambio de signo: cambiar solo el bit de signo. x =(Xs, Xm)
-x =(Xs, Xm)
Resta: x- y =x+ (-y)
REPRESENTACIÓN DE ENTEROS EN EXCESO O POLARIZADO
REPRESENTACIÓN
Z  N  Nn
Xe = x +c
x  Xe  X
En general para que el sistema sea simétrico el valor de c será 2n-1-1 o 2n-1.
Por lo tanto la formula de la expresión será: Xe=x+2n-1-1.
Ejemplo con 3 bits:
Xe x
AC - 11
000
001
010
011
100
101
110
111
0
1
2
3
4
5
6
7
-3
-2
-1
0
1
2
3
4
N =3
2n-1-1=3
Xe =x +3
x =Xe -3
El cero es el número: 2n-1-1
Los x  0 tienen Xn-1=0
Los x > 0 tienen Xn-1=1
El rango es asimétrico. Tenemos un número positivo mas que negativo:
-(2n-1-1)  x  2n-1
SUMA EN EXCESO
Ze =(x +y)+ 2n-1-1
Xe =x +2n-1-1  x =Xe –(2n-1-1)
Ye =y +2n-1-1  y= Ye –(2n-1-1)
Ze= (Xe –(2n-1-1) + Ye –(2n-1-1)) + 2n-1-1 = Xe -2n-1 +1 +Ye –2n-1 +1 +2n-1 –1= Xe +Ye –(2n-1-1)
Ze =Xe +Ye –2n-1 +1
*
Z e =Xe +Ye +1  Esto se implementa con un solo sumador poniendo
Xe
Ye
en la señal Cin un uno.
n
n
Ze=Z*e-2n-1
Cout Z*n-1 Z*n-2 .... Z*1 Z*0
Z*n-1 =1  Zn-1 =0; carry =0
Cout
++ 1 0 .............. 0
2n-1  0
Z*n-1 =0  Zn-1 =1, carry =1
*
*
*
*
Ze 
Z n-1 Z n-2 .....Z 1 Z 0
OVF= Cout  Zn-1
n-1
z =x +y ;
Cin=’1’
Xe
OTRAS OPERACIONES
-
Cambio de signo: Z =-X
Ze = -x +2n-1 –1
Xe = x +2n-1-1  -x = -Xe +2n-1-1
Cambio de signo en Ca1
Ze
Esquema del sumador en exceso
- 2n -1 –Xe -1= Xe-1
Ze =-Xe +2 -1 + 2 -1
- 2n -1 –(Xe +1)= Xe+1
Resta en exceso: z =x –y =x +(-y)
Ze = x –y +2n-1 –1
Cout
Xe = x +2n-1 –1 = Xe –2n-1 +1
Ye = y +2n-1 –1  -y = 2n-1-1-Ye
Ze = (Xe –2n-1 +1) + (2n-1-1-Ye) + 2n-1 –1 = Xe –2n-1 +1
+2n-1 -Ye-1 = Xe +Ye -2n-1
n-1
-
n
Ye
Xe
Ye
n-1
n
n
++
Cin=’1’
Xe
n-1
n
Ze
Esquema del restador en exceso
AC - 12
RESUMEN
Xe  representación del número
Xe
x+y
Xe = x mod (2n-1)
Ca1
Xe +Ye +Cout
x si x  0
2n-1+x si x  0
Xe = x mod(2n)
Ca2
(Xe + Ye) mod 2n
x si x  0
n
2 +x si x < 0
x si x  0
SyM
Algoritmo
2n-1-x si x  0
Xe = x +2n-1-1
Z*e = Xe +Ye +1
Ex 2n-1-1
Ze =(Z*n-1 Z*n-2 ... Z*1 Z*0)
-x
x-y
Xe
Xe +Ye
Xe+1
Xe+Ye+1
(Xs, Xm)
(Xs, Xm) + (Ys, Ym)
Xe-1
Xe+1
Z*e = Xe +Ye
Ze =(Z*n-1 Z*n-2 ... Z*1 Z*0)
TEMA 4 – ACELERACIÓN DE LA SUMA
GENERACIÓN Y PROPAGACIÓN DEL ACARREO
Tenemos que de un sumador completo la salida es función de tres elementos:
Si = f( Xi, Yi, Ci-1)
Ci+1 = g(Xi, Yi, Ci)= g’(Xi, Yi, Xi-1, Yi-1, Ci-1)= gn(Xi, Yi, ..., X0, Y0, Cin)
Primero calcular todos los acarreos (a dos niveles) y después calcular la suma.
Xi
Yi
Ci
FA
Ci+1
Si
Esquema de un Full Adder
X
0
0
1
1
Y
0
1
0
1
Cout
0
Cin
Cin
1
El acarreo de entrada se absorbe
El acarreo de entrada se propaga
El Cin se genera para la siguiente etapa
CSA. CARRY SAVE ADDER
El CSA es un sumador con retraso en la propagación del acarreo, en cambio el CPA es el sumador
con propagación de acarreo, el visto hasta ahora.
El CSA permite la suma de tres números diferentes (X, Y, C), y devuelve dos números (C 0, S) los
cuales se han de sumar como si fuera una multiplicación, es decir el número Co se suma un bit desplazado
a la izquierda.
xxxxxxx A
+ xxxxxxx B O (1)
xxxxxxx C
xxxxxxx S O(n)
xxxxxxx C0
xxxxxxxx A+B+C
Utilizamos un solo CPA al final, y por lo tanto se guarda el carry hasta el final.
Estos sumadores se utilizan a la hora de realizar los multiplicadores.
AC - 13
CLA. CARRY LOOKAHEAD ADDER (transparencias grupo 10)
El CLA es un sumador con anticipación de acarreo.
Xi
Yi
xi yi
Ci
X Y Cout
0 0 0
FA
0 1 Cin
1 0 Cin
Ci+1
Si
1 1 1
Esquema de un Full Adder Gi =Xi ·Yi
Pi =Xi  Yi
Gi
0
0
0
1
Pi
0
1
1
0
pi
gi
Esquema de un HA que da los
valores de Gi y Pi
Ci+1 = Xi·Yi + (Xi  Yi)· Ci
Si = Xi  Yi  Ci
Ci+1 = Gi + Pi · Ci
Si = Pi  Ci
En estas dos ultimas formulas es en las que se basa el CLA.
Necesitamos un modulo que calcule todos los acarreos y que después realice la suma solo con una
puerta XOR.
Ci+1 = Gi + Pi · Ci = Gi + Pi · (Gi-1 + Pi-1 · Ci-1) = Gi + Pi · Gi-1 + Pi · Pi-1 · Ci-1 = Gi + Pi · Gi-1 + Pi ·
Pi-1 · (Gi-2 + Pi-2 · Ci-2) = Gi + Pi · Gi-1 + Pi · Pi-1 · Gi-2 + Pi · Pi-1 · Pi-2 · Ci-2 = ........
De esta formula podemos desprender que tendremos carry si se genera en el bloque, si se genera
en el bloque anterior y se propaga, etc. Esta fórmula se puede reformular de la siguiente forma.
n 1
k
Ci+1 =
G
n0
in
· Pi  m
Gi-k =Ci-k+1
m 0
En el caso de particular de k sea 3 tenemos que:
Gi
Ci+1 = Gi + Pi · Gi-1 + Pi · Pi-1 · Gi-2 + Pi · Pi-1 · Pi-2 · Ci-
Gi-1Pi
Gi-2 Pi-1 Pi
Ci-2Pi-2 Pi-1 Pi
2
El método para sumar con CLA sigue los tres
siguientes pasos:
1.- Calcular Pi y Gi con un primer nivel formado por
el semisumador.
2.- Calcular los acarreos Ci en dos niveles. Esquema
de la derecha a dos niveles.
3.- Calcular Si mediante una XOR entre Ci i Pi.
Mediante esta forma de sumar obtenemos 4 niveles de
puertas que dan un tiempo de:
4 niveles  4
Con la propagación del acarreo (CPA) obteníamos un
tiempo de 9.
Ci+
1
Calculo del carry
en función Gi y Pi
SUMADOR CLA Y PROPAGACIÓN ENTRE MÓDULOS
Con los CLA solo se tiene que propagar el acarreo y por lo tanto solo se propaga el segundo paso.
Es decir, el paso 1 y 3 se hace de forma paralela y por lo tanto solo se espera la propagación de los Ci.
Por lo tanto el tiempo total dedicado a la suma es el siguiente:
T =  + n/p· 2 +  = 2· (n/p+1)
calculo de Si
calculo de Ci
Calculo de Gi y Pi
AC - 14
Ejemplo de la ganancia en tiempo que se obtiene al utilizar un sumador CLA en frente del
sumador habitual, CPA
SCLA
CPA Ganancia
P=4 N=16 T= 10 T= 33
3,3
Obtenemos una ganancia con el SCLA de mas del doble
N=32 T= 18 T= 65
3,6
N=64 T= 34 T=129
3,8
Aun de esta forma tenemos que propagar el acarreo mediante los diferentes módulos sumadores
CLA. Para evitar esta propagación se puede obtener otro CLA superior a los bloques SCLA, y así
sucesivamente, hasta sumar el número de bits que queramos.
La ecuación de un CLA para sumar niveles de SCLA es la siguiente:
C4 =G3 +G2P3 +G1P2P3 +G0P1P2P3 +C0P0P1P2P3 =G*0 + C0 P*0
G*0
P*0
C8= G7 +G6P7 +G5P6P7 +G4P5P6P7 +C4P4P5P6P7 =G*1 +C4P*1 =G*1 +(G*0 +C0P*0)P*1 =G*1 +G*0P*1 +C0P*0P*1
TEMA 5 – OTRAS OPERACIONES
EXTENSIÓN DE RANGO
La extensión de rango consiste en codificar un mismo número con más dígitos que los iniciales,
tiene que ver con el overflow, ya que se considera que hay overflow si el resultado necesita más dígitos
que el rango inicial, y con la extensión de rango podemos hacer que las operaciones sean correctas.
Esto es útil para la multiplicación ya que sí no se perderían muchos de los posibles resultados de la
operación y de esta forma podemos obtener el valor correcto.
x=(Xn-1, .... X1, X0)
y=(Ym-1, Ym-2, ... Yn, ....., Y0)
y =x pero codificado con más dígitos, es decir: y =x  m>n.
 Naturales: todos los dígitos que añadimos a la izquierda tendrán el valor 0.
n 1
m 1
M>n
Yi=Xi si i=0, ..., n-1
x=  X i ·r i
y=  Y i ·r i
X=y
Yi=0 si i=n, ..., m-1
i0
i0
En resumen tenemos que la extensión de rango de naturales es como sigue:
y=(0, 0, ...., 0, Xn-1, Xn-2, ...., X1, X0)
 Enteros: tenemos dos casos, ya que pueden estar codificados en complemento a 1 o
complemento a dos:
- Ca2: Xe =x mod 2n Ye =y mod 2m, donde y =x i m > n
Xe =x
m m-1
n
x 0
Ye =Xe es el mismo caso que con los
Ye = y
1 0 ...... 0 ........... 0 (2m)
naturales
y =x
0 0 ....... 1 0......... 0 (2n)
0 1 ....... 1 0 .........0 (2m-2n)
x <0
Xe =x + 2n
0 .........0 Xn-1 ....X0
Ye = y+ 2m Ye =y +2m =x +2m =Xe –2n +2m
1 .........1 Xn-1 ....X0 (2m-2n+Xe)
y=x
Por lo tanto la extensión de signo queda como sigue:
y =(Xn-1, Xn-1, ...., Xn-1, Xn-2, ...X0)
- Ca1: y =(Xn-1, Xn-1, ...., Xn-1, Xn-2, ...X0) se realiza de la misma forma que en complemento a dos
ya que estamos en un sistema de base dos.
DESPLAZAMIENTOS ARITMÉTICOS
Un desplazamiento es una operación de escalado que equivale a multiplicar o dividir por la base.
- Desplazamiento a la izquierda: z =r · x donde r es la base.
- Desplazamiento a la derecho: z= (x/r) +  ; || < 1.
AC - 15
NATURALES
 Desplazamiento a la izquierda: z = 2 · x
n 1
n 1
i0
i0
z = 2 · x = 2(  Xi ·2 i ) =  Xi ·2 i  1 = (Xn-12n + Xn-22n-1+ .... + X122+X021+0·20)
y = (Xn-1, Xn-2, ..., X1, X0, 0)
Podemos tener overflow ya que necesitamos un bit mas para representar el valor. El overflow se
mira comprobando el bit n+1, es decir el bit de mas peso.
 Desplazamiento a la derecha: z=(x/2) +
n 1

z=
Xi ·2
i0
i
+ =
2
X n 1 2
n 1
 ....  X 1 2  X 0
1
+= Xn-12n-1 +Xn-22n-3 +.... +X1 +(
2
X
2
0
+);  =-
X
0
2
y =(0, Xn-1, Xn-2, ..., X2, X1) donde nunca podrá haber overflow.
SISTEMAS COMPLEMENTADOS
CA2
 Desplazamiento a la izquierda: z = 2 · x
Xe = x mod 2n ; Ze = x mod 2n+1
Xe =x
x 0
Ze = z
Ze =2·x = 2·Xe caso de los naturales z = (Xn-1, Xn-2, ..., X1, X0, 0)
z =2·x
x <0
Xe =x + 2n
Ze = 2·x +2n+1 =2(Xe-2n)+2n+1=2Xe-2n-1+2n+1=2Xe
n+1
Ze = z + 2
Igual que con los naturales. Necesitamos un bit mas para que no se
z =2·x
produzca overflow y el resultado sea valido.
Si Xn-2 fuera 0 habría overflow.
 Desplazamiento a la derecha: z =(x/2) +
Xe = x mod 2n ; Ze = x mod 2n
Xe =x
x 0
Ze = z
Igual que los naturales z = (0, Xn-1, Xn-2, ..., X1)
z =(x/2) +
x <0
Xe =x + 2n
Ze = x +2n =(x/2) + +2n =(Xe -2n)/2 +2n + = (Xe/2) –2n-1+2n + = 2n-1 +
n
Ze = z + 2
(Xe/2) +
z =(x/2) + z = ( 1, Xn-1, Xn-2, ..., X1)
Conclusión es que se replica el bit de signo en el desplazamiento a la derecha:
(Xn-1, Xn-1, Xn-2, ... X1)
CA1
 Desplazamiento a la derecha: se realiza de la misma forma que en complemento a dos.
z = (x/r) + ; || < 1 donde r es la base y en nuestro caso vale dos.
Si tenemos el siguiente valor x=(Xn-1, Xn-2, ..., X1, X0) obtendremos el desplazamiento de la
siguiente forma:
z =(Xn-1, Xn-1, ..., X2, X1)
 Desplazamiento a la izquierda: z= r · x
z = 2·x = x+ x donde x =(Xn-1, ..., X0)
Xn-1, Xn-2, ..., X1, X0
Xn-1
Xn-1, Xn-2, ..., X1, X0
Xn-2, Xn-3, ..., X0, Xn-1
Los posibles valores de sumar dos dígitos iguales son: la suma es el acarreo que venga y el acarreo
siguiente es el valor del dígito que se suma, es decir:
Si = Xi
Ci+1 = Xi
De esta forma el desplazamiento a la izquierda en complemento a uno es el siguiente:
z =(Xn-2, ..., X1, X0, Xn-1)
AC - 16
TEMA 6 – ALGORITMOS PARA MULTIPLICAR NATURALES
Para realizar la multiplicación de dos naturales primero miraremos cuantos dígitos necesitaremos
para representar la solución de la multiplicación. Dicho de número de dígitos necesarios es:
zmin = xmin · y = x· ymin = 0
zmax = xmax ·ymax = (rn-1)(rn-1)= r2n+1-2rn.
Todos los valores posibles de la multiplicación están entre: [0 .. r2n+1-2rn]
Con 2n dígitos podremos codificar todos los posibles resultados pero desaprovecharemos números
sin representación.
MULTIPLICACIÓN SECUENCIAL
n 1
n 1
n 1
z =x·y = x  Y i ·r i = (  X i ·r i )(  Y i ·r i ) = ...... =
i0
i0
n 1
z =x·y = x  Y i ·r i =
i0
i0
2 n 1
Z
·r
j
j0
n 1
 x ·Y
i
·r
i
x·ri=((((x·r)·r)·r)....)
son
desplazamientos
i0
consecutivos.
 Algoritmo aritmetico:Existen dos versiones.
z=0
z=0
do i =0...n-1
do i =0...n-1
z =z +x(Yi)·ri
aux =x·Yi·rn
edndo
z = (z+aux)·r-1
endo
 Implementación secuencial
z = (z +x·Yi·rn)·r1
Primer algoritmo
Segundo algoritmo
z = (z +x·Yi·rn)·r-1
n 1
z =x·y =  x ·Y i ·r i
i0
Primero haremos la extensión de rango a los
multiplicadores hasta los 2n dígitos y despues
haremos la suma.
x
x
y
n
n
n
1
*
n+1
1
ri
Sumador de 2n
dígitos
2n
1
*
y
DESPL
2n
j
Sumador de n
dígitos
n
1
n
bit menos peso
Carry
2n
z
z
En el primer algoritmo:
Utiliza 2n Full-Adders y realmente solo necesitaríamos n+1 sumador que es lo que suma el
algoritmo (solo n bits). Sumamos dos filas i generamos una fila nueva.
La forma que sigue a la hora de multiplicar es la siguiente:
AC - 17
0000 0 0 0 0 ACC0
0000 x x x x xY020
00 0A4A3A2A1A0 ACC1
00 0 y y y y 0 xY121
00B4B3B2B1B0A0 ACC2
00z z z z 0 0 xY222
0C4 C3C2C1C0B0A0 ACC3
0 v v v v 0 0 0 xY323
D4D3D2D1D0C0B0A0 ACC4  resultat
En el segundo algoritmo:
Tenemos que A4 es el carry de la suma de los últimos dígitos. Ahora no hacemos ningún
desplazamiento, ya que desplazamos el bit a la derecha del acumulador. Y por lo tanto no lo hacemos
después de realizar la multiplicación. El resultado de la multiplicación son los bits desplazados del
acumulador mas los bits que queden en el acumulador.
0 0 0 0 ACC0
x x x x xY020
A4A3A2A1A0 (desplazamiento a la derecha, nos quedamos con A0)
A4A3A2A1 ACC1
y y y y xY121
B4B3B2B1B0 (desplazamiento a la derecha, nos quedamos con B0)
B4B3B2B1 ACC2
z z z z xY222
C4C3C2C1C0 (desplazamiento a la derecha, nos quedamos con C0)
C4C3C2C1 ACC3
v v v v xY323
D4D3D2D1D0 ACC4
El modulo de multiplicación consiste en una batería de ANDs por la siguiente razón:
Yi=0  0
Yi=1  x
Por lo tanto el multiplicador secuencial queda como sigue: O(n2)
xYi
X
FA
FA
Y
FA
FA
0
ACC
Esquema de un multiplicador secuencial binario
ACCELERACIÓN DE LA MULTIPLICACIÓN SECUENCIAL
Para acelerar la multiplicación podemos realizar dos operaciones:
- Hacer las sumas más rápidas, utilizando CSA
- O haciendo menos iteraciones, utilizando una base más grande (base 2k).
MULTIPLICACIÓN CON CSA
Un Full Adder tiene tres entradas (contador de 3 bits) y lo que hace es contar el número de
entradas que están a uno y da el numero codificado en binario. Las entradas tienen todas el mismo peso,
pero una de las salidas tienen un peso mayor que la otra. La función que realiza el CSA es la siguiente:
AC - 18
Xn-1 Yn-1 Zn-1
C5
x
x
x
S4
C4
x
x
x
S3
C3
x
x
x
S2
C2
x
x
x
S1
C1
x
x
x
S0
FA
.............
X0 Y0 Z0
FA
Sn-1
Cn
S0
C1
Esquema de un CSA
El multiplicador con CSA queda como sigue: O(2n)
X
Y
n
1
1
bit de menos peso
n
CSAn
‘0’
CP
n-1
SP
CPAn
0
n
Esquema de un multiplicador con CSA
UTILIZANDO UNA BASE MÁS GRANDE (BASE 2K)
Partiendo de una base que sea potencia de dos, porque así trabajaremos con bloques de bits y
tendremos que hacer menos iteraciones.
Para k =2 tendremos que: YRj=2·Y2j+1+Y2j a este hecho se le llama recodificación ya que se pasa
de la base 2 a 2k.
n 1
n
k 
 
i0
j0
z =x·y = x·  Yi ·2 i  x · Y jR ·( 2 k ) j
Para k=2 el esquema de la implementación quedaría como sigue:
AC - 19
0
x 2x
n+2
n+2
n+2
2x
x
y
+
n+2
Y2j+1
Y2j
2 bits menos peso
00
n+2
+ n+2
0
n+2
n
n
ACC
Esquema de un multiplicador con base 2k
ALGORITMOS PARALELOS PARA LA MULTIPLICACIÓN (ARRAYS)
Tenemos que la expresión de la multiplicación es la siguiente:
z =x·y =
x3 x2 x1 x0
n 1
n 1
n 1 n 1
y3 y2 y1 y0
=  X i ·2 i · Y j ·2 j    X i ·Y j ·2 i  j ;
30 20 10 00
i0
j0
i0 j0
Matriz de subíndices X Y 2i+j = n2 ANDS en paralelo.
31 21 11 01
i i
de la multiplicación
32 22 12 02
La suma de los índices de una de una
33 23 13 03
columna ha de dar el mismo valor i este valor es
Peso 3
el peso del dígito.
Existen dos métodos para aplicar
algoritmos paralelos:
REPLICANDO LOS CPA
Generamos los productos en paralelo mediante una batería de AND’s y después hacemos la suma
pertinente. Se necesitan n-1 CPA para poder multiplicar dos números e n bits.
En la siguiente figura vemos el esquema general de la replicación de CPA.
Ex: n=4 replicar CPA (diseño a la figura 1.1)
xy4 xy3 xy2 xy1 xy0
0 30 20 10 00
31 21 11 01
CPA
32 22 12 02
función de
33 23 13 03
un CPA
CPA
C S S S S 00
0 –extensión
32 22 12 02
de rango
CPA
33 23 13 03
C S S S S S 00
33 23 13 03
C S S S S S S 00
En la figura 1.1 podemos ver el esquema de un multiplicador replicando los CPA de 4 bits.
El tiempo general que tarda en realizar la multiplicación es:
(n + n-2 + n-2) Tfa =(3n-4) Tfa
CPA
AC - 20
fotocopia 1
AC - 21
REPLICANDO CSA
El método de la multiplicación es el mismo que en la replicación de CPA, se hacen todas las
AND’s en paralelo y después se realiza la suma, ahora mediante CSA. Utilizando CSA necesitamos n-2
sumadores CSA (siendo n el numero de bits de los números a multiplicar). En la siguiente figura vemos el
esquema general de la replicación de CSA.
xy4 xy3 xy2 xy1 xy0
Ex: n=4 replicar CSA (diseño a la figura 1.2)
0 30 20 10 00
CSA
31 21 11 01
función de
32 22 12 02 0
un CSA
CSA
33 23 13 03
0 –extensión
32 S S S S 00
de rango
C C C C
CSA
33 23 13 03 0
33 S S S S S 00
función de
CSA
C C C C
un CPA
C S S S S S S 00
CPA
El tiempo total que se tarda en realizar la multiplicación en este tipo de circuitos es:
(n-2+n)·Tfa= (2n-2)·Tfa
Donde n-2 es tiempo de los CSA y n es el tiempo del CPA (n-2+n). Tfa es el tiempo de un FullAdder.
MULTIPLICACIÓN EN ARBOL
xy8 xy7 xy6 xy5 xy4 xy3 xy2 xy1 xy0
CSA
CSA
CSA
CSA
CSA
CSA
Estos dos algoritmos que acabamos de ver (la
replicación de CPA’s y la replicación de CSA’s) son algoritmos
lineales pero existen otros tipos de algoritmos que son los que
utilizan la multiplicación en árbol.
Si el CPA ultimo fuera un CLA el multiplicador seria
mas rápido que los que hemos visto hasta ahora, pero con un
CPA normal la multiplicación tarda más tiempo en realizar la
multiplicación que si empleamos la replicación de CSA.
CSA
CPA
Esquema de un multiplicador en árbol
TEMA 7 – MULTIPLICACIÓN DE ENTEROS EN C’2
Queremos hacer la multiplicación de dos enteros codificados en complemento a dos de n bits y
queremos tener el resultado siempre correcto. Para saber el rango hacemos lo siguiente:
z = x·y; x,y  [-2n-1..2n-1-1]
zmax = xmin·ymin = (-2n-1)(-2n-1) = (-2n-1)2
zmin = xmin·ymax = xmax·ymin = (-2n-1)(2n-1-1)
El rango es el mismo que en los naturales pero ahora tenemos un solo número mas que hace que
necesitemos un bit mas para codificarlo. En total necesitamos 2·n bits para poder expresar el resultado de
forma correcta.
AC - 22
MULTIPLICACIÓN SECUENCIAL
El algoritmo secuencial que se obtiene es el siguiente:
n2
z = x·y = x·(-2n-1·Yn-1 +
 Yi ·2 ) = -2n-1·Yn-1·x +
i
0
n2
 x ·Y ·2
i
i
0
La siguiente explicación es respecto a la implementación secuencial con CPA’s
Ex: n=4 .
x =-3 C=24=16 Xe=16-3=13  1101
y =-5
Ye=16-5=11  1011
0 0 0 0 0 AC 1- Resultado
1 1 1 0 1 xY0
1 1 1 1 0 1
0- Extensión de
1 1 1 0 1
xY1
rango
1 1 1 0 1 1
0 0 0 0 0
xY2
1 1 1 1 0 1
0 0 0 1 0
xY3
1
1 para completar la resta
0 0 0 0 1
Resultado final = 00001111
Todas las sumas se hacen con CPA’s
x
y
1
n
1-bit menos peso
s/r
n
1
n
1
n
+ n+1
ACC
Esquema de un multiplicador secuencial de
enteros en C’2
La implementación de la multiplicación secuencial para enteros en C’2 con CSA es análoga a la
implementación de la multiplicación secuencial para naturales por lo tanto solo se ha de seguir los pasos
siguientes al realizar la multiplicación:
Todas las sumas se hacen con CSA’s excepto la ultima (que utiliza un CPA) que suma los carry’s
con las sumas.
Ex: n=4 .
x =-3 C=24=16 Xe=16-3=13  1101
y =-5
Ye=16-5=11  1011
0 0 0 0 S
1- Resultado
0 0 0 0 C
1 1 0 1 xY0 0-Extensión de
1 1 1 0 1
rango
0 0 0 0
1 1 0 1
xY1
0 0 0 1 1
1 1 0 0
0 0 0 0
xY2
1 1 1 0 1
0 0 0 0
0 0 1 0
xY3
1 1 1 0 0
0 0 1 0 1
1 para completar la resta
0 0 0 0 1
CPA
Resultado final = 00001111
AC - 23
ALGORITMOS PARALELOS
(ARRAYS)
PARA MULTIPLICACIONES EN C’2
Estos algoritmos paralelos consisten en las dos siguientes reglas:
- Hacemos todas las operaciones AND (multiplicación de un bit) en paralelo, es decir, se
construye la matriz (n2 AND’s en paralelo)
- Reducimos la matriz a un número de 2n bits. Se puede hacer con CSA y CPA, o con
implementaciones lineales o con implementaciones en árbol.
El esquema general de lo que se tendría que hacer es el siguiente:
x x x x
x x x x
x x x x
x x x x
0 1
Una primera opción seria extender todos los números hasta 2n bits i realiza la suma, pero este
método tarda mucho y por lo tanto es muy ineficiente. Otra forma de realizar la multiplicación es como
sigue:
Pasos ha realizar con CSA:
Pasos ha realizar con CPA:
30 30 30 20 10 00
x
x
x
x
x
x
31 31 21 11 01
x
x
x
x
x
32 22 12 02
x
x
x
x
33 23 13 03
x x x x
1
1
S
S
S
S
S
S
00
x
S
S
S
S
S
x
C
C C
C C
x
x
x
x
x
33 23 13 03
x x x x
1
1
S
S
S
S
S
S
S
00
S
S
S
S
S
S
S
00
C C
C C
C
x x x x x
1
1
S
S
S
S
S
S
S
00
S
S
S
S
S
S
S
00
Hacemos dos extensiones de rango en el
La suma del uno es para terminar de hacer la
primer paso ya que 30 y 31 tienen peso
resta y ademas en los CPA’s entra po el Cin del
negativo y se estaría sumando con dígitos
sumador.
de peso positivo dando así un error.
x- extensión de rango.
Aquí solo se utilizan CSA’s
S- parte del resultado
Otra forma de multiplicar los enteros de forma paralela es formando el array optimo:
n2
n2
z = x·y = x (-2n-1Yn-1+  Y i ·2 i )=-2n-1Yn-1·x+  x ·Y i ·2 i
0
0
n2
n2
n2
z = x·y = x (-2n-1Yn-1+  Y i ·2 i )=(-2n-1Xn-1+  X i ·2 i )(-2n-1Yn-1+  Y i ·2 i ) =
0
0
0
n2
n2
n2
n2
0
0
0
0
= 2n-2Xn-1Yn-1 + (  X i ·2 i )(  Y i ·2 i ) -2n-1Xn-1·  Y i ·2 i -2n-1Yn-1·  X i ·2 i
Los dos primeros términos de la suma son positivos y los dos últimos son negativos.
En la parte positiva pondremos por delante ceros, que seria la
x x x x
extensión de signo del complemento a dos pero para números positivos.
x x x x
Por lo tanto lo que s hace es extender el rango de los números positivos
x x x x
hasta el número de bits deseado y se realiza la suma. Después se ha de restar
x x x x
los dos números negativos lo que se consigue complementando todos los bits y
Números positivos
sumando uno (estamos en complemento a dos).
Números negativos
El esquema seria el siguiente:
AC - 24
0 0 0 0 0
0 0 0 0 x
0 0 0 x x
0 x
0 0 x x x
1
0 0 x x x
1
x
x
x
x
x
x
11
1
+11
+1
x10
10
x no nos interesa
0 0 0 0 0
0 0 0 0 x
0 0 0 x x
0 x
1 0 x x x
0 0 x x x
1 0
x
x
x
x
x
x
TEMA 8 – REPRESENTACIÓN Y OPERACIONES CON REALES
Los números reales para el procesador no hacen falta, solo hicieron falta por una necesidad de los
usuarios. Con los naturales i los enteros tenemos el problema del overflow y la representación tenia un
rango donde el cero se encontraba en el centro. Pero con los reales no podemos representar todo el rango
posible, ya que entre dos reales hay infinitos números). Con los reales aparece el concepto de precisión
que indica el número de números que queremos, y también aparece el redondeo (codificar un número para
el que no tenemos suficientes bits con su error).
REPRESENTACIÓN DE NÚMEROS REALES
PUNTO FIJO
Este sistema considera que el punto que diferencia la parte real de la imaginaria esta siempre fijo
en un lugar y por lo tanto solo podemos representar los números con ese punto.
Hasta ahora el punto siempre lo hemos tenido a la derecha del todo, por lo tanto solo trabajábamos
con la parte entera de un número:
23 22 21 20
x x x x.
Esta representación esta bien para número grandes ya que el error será pequeño, pero en cambio
para número muy pequeños el error será mas alto.
Con el punto a la derecha del todo el rango es el siguiente: [0..2n-1]
Y la distancia entre dos números representables es 1.
Con el punto fijo a la izquierda del todo
2-1 2-2 2-3 2-4
0.x x x x.
n
El rango es [0..1-2 ]  [0 .. 0.111..1]
Y la distancia entre dos números representables es de 2-n = 1/2n.
La codificación de un número en punto fijo es:
r 1
x=

X i ·2
i
m
Donde –m es el bit de menos peso y r-1 el bit más peso. Des del bit m hasta el r-1 han de salir los
n bits utilizados para la representación.
En punto fijo, todas las operaciones se pueden realizar con el hardware destinado a realizar las
operaciones de los números enteros y de los naturales.
PUNTO FLOTANTE
El punto flotante permite escoger donde queremos que vaya el punto según que número queramos
representar. En este sistema, una palabra del computador se divide en tres partes, el signo, un exponente y
una mantisa (número con el punto fijo). Es decir, este sistema esta basado en la notación científica que
necesita:
- El signo.
- Un exponente dentro de un rango; e [emin, emax]
- Una mantisa.
AC - 25
x =0.a1a2a3...at·be
Donde 0.a1a2a3...at es la mantisa, b es la base, e es el exponente i t el número de bits.
La fórmula para obtener el numero que representa una tira de bits un punto flotante es:
t
x= (  a i ·b  i )·be
1
e
Ejemplo: 0.xx·2x
Dist =0.5
Todos los números que
se pueden representar con el
mismo exponente están a la
misma distancia.
1
Dist =0.25
0
Dist =0.125 -1
*
*
*
*
*
*
*
*
*
*
Man
00
01
10
11
00
01
10
11
00
01
10
11
x
0
0.5
1
1.5
0
0.25
0.5
0.75
0
0.125
0.25
0.375
0.00*21
0.01*21 = (0·20+0·2-1+1·2-2)*21= 2-1
0.10*21
0.00*20
0.01*20
0.00*2-1
0.01*2-1
*
*
1
0 0.125 0.25 0.375 0.5
0.75
1.5
Como se puede observar el sistema es redundante, ya que podemos representar un mismo número
con diferentes codificaciones (el cero tiene tres codificaciones).
MANTISA NORMALIZADA CON BIT ESCONDIDO
La mantisa normalizada con bit escondido tiene la siguiente formula:
 1.xx*2x
Donde xx es la fracción y la mantisa es 1.fracción.
Este sistema elimina la redundancia que producía el punto flotante. Esto se consigue con un 1 a la
izquierda del punto, pero este uno no se guarda ja que se pone mediante hardware. El poner este uno
implica que no podemos representar el número 0.
Punto flotante
Mantisa normalizada
1-2=-1 # bits desplazados
0.01*21
1.00*2-1
0,5
0
0.10*2
1.00*2-1
REPRESENTACIÓN PUNTO FLOTANTE IEEE 754
Este estándar especifica cuatro precisiones: simple, simple extendido, doble y doble extendido.
Los dos primeros disponen de 32 bits para la representación y los dos últimos de 64 bits.
Los números en simple precisión se representan utilizando 32 bits: 1 para el signo, 8 para el
exponente y 23 para la fracción. El exponente es un número con signo que se representa, utilizando el
exceso en 127. La fracción representa un número menor que uno, pero la mantisa del número es uno más
la parte fraccionaria.
31 30
23 22
0
1
8
23
s
EXPe
Fracción
 Tenemos la mantisa en signo y magnitud.
 El exponente está en exceso 2n-1-1. Exceso 127  EXPe = EXP+127
 La mantisa esta normalizada con bit escondido.
La ecuación de la codificación queda como sigue:
x =(-1)s*1.F*2EXPe-127
Con esta codificación hay dos valores para el exponente que no podemos utilizar y que estan
reservados para codificar otros valores.
El rango de EXPe es el siguiente: [1..254]
AC - 26
Los exponente 0 y 255 son los exponentes reservados, que permiten codificar:
- Los Not-a-Number (NaN) que son los números que se producen al realizar un raiz de un
número negativo. (-)
- El valor infinito, pudiendo realizar la operación 1/=0
- Como hemos visto en la línea de arriba, estos exponentes también permiten, codificar el
número 0.
- También permite codificar los números denormales o subnormales, que serian los números
más pequeños que utilizando el exponente mas pequeño, estos números están muy cerca del
valor cero.
La codificación del cero es:
· EXPe=0, F=0  0
Y la codificación de los denormales es:
· EXPe=0, F 0  Denormales.
x =(-1)s·0.F*2-127
Esta es una codificación de los denormales pero con redundancia.
La codificación del infinito es:
· EXPe=255, F=0  
La codificación de los NaN es:
· EXPe=255, F0  NaN
El rango que obtenemos con la norma IEEE 754 es el siguiente:
max = 1.11....1*2254-127 = 11.....1.*2254-127-23= (224-1)*2104= 2128-2104
23
24
min (normalizado) = 1.00.....0*21-127= 21-127=2-126
min (denormales) = 0.00.....01*2-127= 2-127-23 = 2-150
El estándar también define cuatro formas de hacer el redondeo pero nosotros solo nos basaremos
en una:
-
Redondeo al más próximo (Round to nearest) que redondea al número mas cercano, y en caso
de empate se redondea al número par.
38
39
40
41
42
38,3  38; 38,6  39; 38,5  38
La precisión (o error) consiste en que si sale un número que no podemos codificar, cual es la
diferencia entre el número codificado mas cercano al deseado con dicho número.
Error absoluto:
2
 23
·2
EXP
= 2-24·2EXP
2
Error relativo: 2-24
MULTIPLICACIÓN EN PUNTO FLOTANTE
- x   1 .F1 x 2 e
y   1 .F 2 x 2
1
e2
z  xy  (  1 .F1 )(  1 .F 2 ) 2
e1  e 2
Se ha de normalizar, redondear y obtener la máxima precisión del resultado.
x
1.
X

X
1.
Y

Y
x
x

x

1
z
z.
z
x
x
x

x
x

z
z
z

G
R

z
AC - 27
-
Redondeo
(después
v

v
1 .xxxxz | vyyyy  
v
v

de
normalizar)
 0  1 .xxxxz
 1 , yyyy  0  1 .xxxxz  1
 1 , yyyy  0 , z  0  1 .xxxxz
 1 , yyyy  0 , z  1  1 .xxxxz  1
-
Algoritmo
1.
Multiplicar mantisas.
Sumar exponentes en exceso a 127.
2.
Test de casos especiales de mantisa (normalizar).
Si bit mas peso de la mantisa es 1, desplazar 1 bit a la derecha y sumar 1 al exponente.
3.
Redondear.
4.
Test de overflow de mantisa. Si overflow volver al punto 2.
5.
Test de casos especiales de overflow del exponente.
6.
Test de valores especiales del resultado.
Tenemos 48 bits y solo podemos almacenar 23 por lo tanto tenemos que redondear. La
multiplicación se realiza multiplicación la mantisa y los exponentes por separado.
3*102
5*10-3
15*10-1
SUMA/RESTA EN PUNTO FLOTANTE
-
Algoritmo
1.
Si e 1  e 2 intercambiar x por y. d  e 1  e 2 . e  e 1
2.
3.
Desplazar m 2 ‘d=e1-e2’ posiciones a la derecha. Activar bits G,R i S
Sumar o restar les nuevas mantisas en un sumador de n+3 bits en SyM
4.
 0  Codificar el 0. Goto 9

 OVF de mantisa  Goto 5a
Test de valores especiales 
 k  1 zeros en major pes  Goto 5a
 Normalitza t  Goto 6

5.
Normalizar 
 a ) desplaçar
m 1 posició a la dreta. Exp  1. Goto 6
 b ) desplaçar
m k posicions
a la dreta. Exp - k. Goto 6
6.
Redondear.
7.
Si overflow mantisa: normalizar.
8.
Test de casos especiales de overflow al exponente.
9.
Test de valore especiales.
Primero tenemos que pasa el punto flotante a punto fijo y después hacer la suma normal.
x = 3*102 3,00000 *102
y = 5*10-3 0,00005 *102
3,00005 *102
AC - 28
Documentos relacionados
Descargar