Professional Documents
Culture Documents
x i { 0 ,1 }
(EQ 1)
x 2
Xu =
(EQ 2)
i=0
(el subndice u indica que estamos interpretando el vector de bits como un nmero natural (unsigned)
representado en binario. Por ejemplo, el vector X = 11001 representa en binario el valor
4
0 Xu 2 1
(EQ 3)
En la tabla de la Figura 4.1 se muestran todos los posibles vectores de 3 bits y su valor asociado al
interpretar cada vector como un nmero natural codificado en binario. Las entradas de esta tabla se han
ordenado en funcin del valor de Xu, de menor a mayor.
X
x2 x1 x0 Xu
0
0
0
0
1
1
1
1
c3 = 1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
1
2
3
4
5
6
7
Y
n
cn
ADDn
c0
n
W
Fig. 4.1 Tabla de representacin de nmeros naturales codificados en binario con 3 bits
y sumador binario de n bits.
En la Figura 4.1 tambin se representa el smbolo del sumador binario de n bits. Las entradas de este
bloque combinacional son dos vectores de n bits X e Y, que representan dos nmeros naturales Xu e Yu,
y un bit, c0, denominado acarreo de entrada (en ingls carry in). El sumador calcula el valor Wu,
representado mediante el vector de n bits W = wn-1...w1w0 y el bit cn, denominado acarreo de salida,
tales que:
Wu = Xu + Y u + c0
0
cn =
1
si
X u + Yu + c0 2 1 y
(EQ 4)
si
X u + Yu + c0 2 1
si
X u + Yu + c0 > 2 1
(EQ 5)
Esto es, el vector de bits W representa el valor correcto de la suma X u + Y u + c 0 , cuando este resultado
puede representarse en binario con n bits. Cuando el acarreo de salida, cn, se activa indica que el
resultado correcto de la suma no es representable con n bits en binario (resultado no representable) y
por lo tanto wn-1...w1w0 no representa el resultado correcto, W u X u + Y u + c 0 . Usando la tabla de la
Figura 4.1 para realizar algunas sumas que produzcan resultados no representables, observamos que
siempre la diferencia entre el resultado correcto y el que se obtiene con 3 bits es de 8 (= 23) unidades.
Llevando esta conclusin al caso general de n bits, tenemos:
W u = Xu + Yu + c0 2
si
X u + Yu + c0 > 2 1
(EQ 6)
(EQ 7)
Denotamos las funciones lgicas que obtienen los bits de salida del sumador binario de n bits, en
funcin de los bits de entrada, como:
W = ADD n ( X, Y, c 0 )
(EQ 8)
c n = CARRY n ( X, Y, c 0 )
(EQ 9)
En el nombre de los operadores ADDn y CARRYn no pondremos el subndice n (tamao del sumador
binario) para el caso comn en este curso de n = 16.
La tabla de la representacin de nmeros naturales para n = 3 de la Figura 4.1 puede ayudarnos a
entender como funciona el sumador binario. Esta visin que damos a continuacin nos ser til en la
seccin siguiente. Consideremos dos situaciones:
Si tomamos una fila de la tabla, un vector de bits X (que representa el nmero Xu) y le sumamos,
con el sumador binario, el vector 001 (que representa el 1), obtenemos un nmero que est una
posicin adelante (ms hacia abajo) en la tabla, siguiendo la direccin que indica la flecha de trazo
continuo de la izquierda de la tabla. Si repetimos esta operacin, vamos avanzando en la tabla hasta
que llegamos a la fila 111 (que representa al nmero 7). En cada uno de estos casos, la
representacin de Xu+1 se obtiene correctamente y el acarreo de salida del sumador binario, c3, vale
0.
Si ahora al vector 111 le sumamos el vector 001, intentando obtener la representacin del valor 7+1,
obtenemos el vector 000 que representa el valor 0. Esto es as porque el 8, que es el resultado
correcto, no puede representarse con 3 bits. El paso del 111 al 000 se indica mediante una flecha
discontinua1 que une el final de la tabla con el principio. Este paso se detecta en el sumador binario
porque c3 vale 1, indicando resultado no representable.
Esto se puede generalizar, de forma que la representacin binaria de Xu + Yu con 3 bits puede
encontrarse contando Yu posiciones en la direccin de la flecha a partir de la fila que codifica el valor
de Xu en la tabla de la Figura 4.1. Si durante este proceso de contar pasamos del final de la tabla al
principio, el resultado no es representable con 3 bits y c3 valdr 1 (al sumar dos nmeros de 3 bits, a lo
sumo se pasa una sola vez del final de la tabla al principio).
1. Pasar la frontera del 111 al 000 en la tabla, es equivalente a hacer la operacin mod 8. As que el
sumador binario ha calculado ( 7 + 1 )modulo ( 8 ) = 0 .
La representacin de un nmero entero mediante un vector de bits ms familiar para nosotros, puesto
que es similar a la que usamos normalmente en base 10, es la representacin en signo y magnitud en
base 2. Dado un vector X de n bits que representa al nmero entero Xsm en signo y magnitud (en ingls
sign and magnitude), el bit de ms a la izquierda del vector de bits codifica el signo, si xn-1 vale 0,
indica que el nmero es positivo y si vale 1 que es negativo, y los n-1 bits restantes representan en
binario el valor absoluto de Xsm (la magnitud de Xsm), que es un nmero natural.
La Figura 4.2 muestra en una tabla los 8 posibles vectores de 3 bits y el valor del nmero entero que
representan en signo y magnitud. La expresin algebraica general para obtener el valor de un nmero a
partir del vector de bits que lo representa tambin se muestra en la figura. De esta frmula es fcil
deducir que el rango de nmeros representables positivos y negativos es el mismo,
( 2
n1
1 ) X sm 2
n1
Repasemos ahora el algoritmo que usamos habitualmente para sumar en signo y magnitud:
cuando los operandos tienen el mismo signo, la magnitud del resultado es la suma de las
magnitudes de los operandos y el signo del resultado es el signo de los operandos;
cuando los operandos son de distinto signo, para obtener la magnitud del resultado se resta a la
magnitud mayor la menor y el signo del resultado es el signo del operando de mayor magnitud.
Este algoritmo requiere un sumador de nmeros naturales codificados en binario con n-1 bits, para
cuando los dos operandos son del mismo signo y un comparador y un restador de nmeros naturales
X
x2 x1 x0 Xsm
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
1
2
3
-0
-1
-2
-3
n2
xi 2
i=0
=
n2
i
xi2
i = 0
X sm
si
xn 1 = 0
si
xn 1 = 1
codificados en binario con n-1 bits, para cuando los nmeros tienen distinto signo. Aunque la
comparacin y la resta pueden hacerse con pequeas modificaciones del sumador binario y aunque
existen algoritmos ms ptimos, podemos intuir que la suma de nmeros enteros en signo y magnitud
es ms costosa en hardware y/o en tiempo de propagacin que la suma de nmeros naturales en binario.
Por esta razn, los computadores actuales no usan la representacin en signo y magnitud para los
nmeros enteros, aunque para los humanos sea la ms familiar.
4.2.2
Los computadores usan una representacin en la que la suma de nmeros enteros se puede realizar con
el mismo sumador que se usa para los nmeros naturales codificados en binario, que hemos
denominado sumador binario. Sabras encontrar una representacin con estas caractersticas?
Desde luego, la representacin en signo y magnitud no cumple este objetivo para todos los nmeros. La
Figura 4.3 muestra dos ejemplos de suma de nmeros representados en signo y magnitud usando el
sumador binario. En el primer ejemplo se suman dos nmeros positivos y se obtiene el resultado
correcto. Esto es as porque la representacin en signo y magnitud de los nmeros enteros positivos es
la misma que la de los nmeros naturales representados en binario. En el segundo ejemplo, en el que se
suman dos nmeros de distinto signo, el resultado de la suma usando un sumador binario no es correcto
(a pesar de que el resultado correcto s que es representable en signo y magnitud con 3 bits).
Un posible razonamiento para encontrar una representacin en la que la suma se realice correctamente
con el sumador binario es el siguiente:
a)
Vectores de
bits
+
0 0 1
0 0 1
0 1 0
Suma
correcta en
Sign. y Mag.
+
=
1
1
2
b)
Vectores de
bits
+
1 0 1
0 0 1
1 1 0
Suma
correcta en
Sign. y Mag.
+
-1
1
0
Codificamos los nmeros positivos como en binario (como ocurre en la codificacin en signo y
magnitud en base 2), con lo que nos aseguramos que la suma de positivos ser correcta con el
sumador binario (siempre que el resultado sea representable, claro).
Cmo codificamos los negativos? Si recordamos la visin que dimos antes de como opera el
sumador binario, contando en la direccin de la flecha en la tabla de la Figura 4.1 podemos deducir
que el valor -1 se tiene que codificar como 111 (para n=3). Este es el nico vector de bits que al
sumarle, con el sumador binario, el vector 001, que como hemos dicho en el punto anterior
representa al 1, obtenemos el vector 000, que representa el 0 y es el resultado correcto de -1+1. Una
vez que hemos decidido que los positivos se codifican como en binario, tenemos que codificar los
nmeros negativos de forma que la codificacin del nmero Xs+1 sea la siguiente en la tabla a la de
Xs, avanzando en la direccin de la flecha. Por ello, el -2 debe codificarse como 110, para que al
sumarle, con el sumador de binario, el vector 001 se obtenga el vector 111, que acabamos de decidir
que representa al -1 (Llamamos Xs al valor que se representa por el vector de bits X en la
representacin que estamos buscando para nmeros enteros; la s del subndice viene de signed
integers).
En la Figura 4.4 se muestran tres posibles representaciones para los nmeros enteros con 3 bits que
cumplen la condicin de que la suma en estos sistemas se puede realizar con el sumador binario,
obtenindose el resultado correcto, excepto cuando el resultado no puede representarse con tres bits, en
cada uno de los sistemas. Podis comprobar esto con facilidad.
En qu difieren las tres representaciones, a), b) y c), de la Figura 4.4? Se diferencian en el rango, en
qu nmeros pueden representarse con 3 bits. Para cada una de las representaciones el rango es:
a) 3 X a 4 ,
b) 5 X b 2 ,
c) 4 X c 3 .
Ello hace que la deteccin de resultado no representable con 3 bits difiera en cada uno de estos tres
sistemas de representacin y sea diferente tambin con el caso de binario. Adems, en ninguno de estos
a)
b)
c)
X
x2 x1 x0
Xa
X
x2 x1 x0 X b
X
x2 x1 x0 X c
0
0
0
0
1
1
1
1
0
1
2
3
4
-3
-2
-1
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
1
2
-5
-4
-3
-2
-1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
1
2
3
-4
-3
-2
-1
Fig. 4.4 Tres posibles representaciones de nmeros enteros con 3 bits. Se diferencian en el rango
de valores representables pero en los tres casos la suma puede realizarse con el sumador binario
(para resultados dentro del rango).
tres sistemas, pasar de 111 al 000 (del -1 al 0) indica resultado no representable, a diferencia del caso de
binario. Esto es, el acarreo de salida del sumador binario, para estas tres representaciones, no indica
resultado de la suma no representable con n bits.
4.2.3
Complemento a 2
Cul de las representaciones de la Figura 4.4 se usa para codificar un nmero entero en un
computador? Aunque alguno de los primeros computadores no la usaba, actualmente todos usan la
representacin c), que se denomina Complemento a 2 (de forma abreviada Ca2). El Ca2, a diferencia
de las representaciones a) y b) o de otras similares que podramos inventarnos, tiene las siguientes
caractersticas:
Tiene un rango ms simtrico que las otras representaciones, aunque no es simtrico del todo ya que
puede representar un negativo mayor en valor absoluto que el mayor de los positivos (esto es
inevitable porque en este sistema el 0 tiene una sola representacin (ver Figura 4.4).
Saber el signo del nmero representado por un vector de bits es sencillo. Para saber si un nmero es
positivo o negativo slo hay que observar el valor del dgito de ms a la izquierda, si vale 0 el
nmero es positivo y si vale 1 es negativo (ver Figura 4.4). Con esto estamos considerando, como
es usual, que el 0 es un nmero positivo.
La deteccin de resultado no representable es ms sencilla que en los otros casos (esto es as por la
facilidad en la identificacin del signo y lo estudiamos ms adelante).
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
00000000
0
1
2
3
-4
-3
-2
-1
=> 0
01111111
10000000
11111111
=> -1
Sabras encontrar una frmula que nos de el valor de un nmero entero a partir de los n dgitos
binarios con que est representado en Ca2? Una frmula en funcin de n es la mejor generalizacin!
En primer lugar, consideremos por separado el caso en que el valor representado, Xs, es positivo y el
caso en que es negativo.
Nmero positivo
Como la representacin de un nmero positivo en Ca2 es igual que la representacin en binario, la
frmula tiene que ser la misma que para el caso de naturales representados en binario, EQ (2). No
obstante, en este caso no hace falta que intervenga el bit de ms a la izquierda, xn-1, puesto que para
los positivos siempre vale cero.
n2
Xs =
x 2
i
para x n 1 = 0
i=0
Nmero negativo
Para la representacin de un nmero Xs negativo (xn-1 = 1) observemos la Figura 4.5. Si al dgito de
mas a la izquierda le damos el mismo peso que le corresponde en binario (2n-1) pero con signo
negativo y al resto de dgitos el peso y el signo positivo correspondiente a binario, obtenemos los
valores correctos de los nmeros -128 (-128 = -128 + 0) y -1 (-1 = -128 + 127, ya que de la
n2
= 2
n1
1 ). Generalizando
i=0
Xs = 2
n1
x 2
para x n 1 = 1
i=0
As pues, una nica frmula, tanto para los positivos ( x n 1 = 0 ) como para los negativos
( x n 1 = 1 ), es:
n2
Xs = xn 1 2
n1
x 2
(EQ 10)
i=0
4.3.1
Rango
Cul es el rango de la representacin en Ca2 para n bits? El nmero negativo con mayor valor
absoluto que se puede obtener de la EQ (10) se encuentra dando valor 1 a xn-1 y valor 0 a todos los
dems dgitos. Este nmero es el -2n-1. Por otro lado, el positivo mayor se obtiene dando valor 0 a xn-1
para que no reste nada y valor 1 a todos los dems dgitos que suman. Este nmero es el 2n-1-1. Como
todos los nmeros enteros entre estos dos estn representados, el rango es:
2
4.3.2
n1
Xs 2
n1
(EQ 11)
Extensin de rango
Dado el vector X de n bits que representa en Ca2 al nmero entero Xs, cmo se obtiene en vector W de
n+1 bits que representa a ese mismo nmero, Ws = Xs? La Figura 4.6 muestra todos los nmeros
representables en Ca2 con 3 y 4 bits. Las flechas indican como se representa con 4 bits cada uno de los
8 posibles nmeros representados con 3 bits. Generalizando esta idea, se dice que la extensin de rango
se efecta extendiendo el bit de signo. Esto es, los n bits de menos peso de la nueva representacin son
los mismos que los de la representacin original y como bit de ms peso de la nueva representacin se
replica el bit de ms peso de la original. Por ejemplo, el nmero 3 con 3 bits se representa como 011 y
con 4 bits como 0011. El nmero -3 se representa con 3 bits como 101 y con 4 como 1101. Para los
nmeros positivos la demostracin es trivial usando la EQ (10) y para demostrar el caso de los
negativos slo hay que saber que 2
n1
= 2 +2
n1
10
X
x2 x1 x0
Xs
0
0
0
0
1
1
1
1
0
1
2
3
-4
-3
-2
-1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
2
3
4
5
6
7
-8
-7
-6
-5
-4
-3
-2
-1
X
n
SE
Ws = Xs
n+1
W
x2 x1 x0
w3 w2 w1 w0
Extension). Obsrvese que este bloque se implementa sin ninguna puerta lgica, slo requiere cables.
Que sencillo!
Sabras hacer ahora la extensin de rango de n a n + k bits? La Figura 4.7 muestra el bloque que
extiende el rango en Ca2 de 3 a 6 bits.
4.3.3
11
x2 x1 x0
3
Ws = Xs
SE
6
W
w5 w4 w3 w2 w1 w0
n2
Xs = xn 1 2
n1
x 2
i=0
Ejemplo 1
Qu nmero entero representa el vector de 8 bits 11001010 en complemento a 2? Aplicando la
frmula anterior tenemos que:
7
X s = 2 + 2 + 2 + 2 = 54
De decimal en signo y magnitud a complemento a dos
Vamos a ver ahora dos procedimientos para obtener los bits de la representacin de un nmero entero.
Despus de ver el algoritmo de cambio de signo veremos otra forma ms de hacerlo.
Procedimiento de las divisiones por dos. De la misma forma que se demostr como pasar un nmero
natural de decimal a binario, se puede demostrar el procedimiento para pasar un nmero entero de
decimal en signo y magnitud a Ca2. La formula de la representacin en binario y en Ca2 es casi la
misma, un sumatorio de todos los dgitos cada uno de ellos multiplicado por su peso, excepto que el
Ca2 el dgito de mas peso se resta en vez de sumarse. Esto se puede interpretar como que el dgito de
ms peso vale 0 o -1 en vez de 0 o 1. Por ello, el procedimiento para obtener los dgitos binarios de la
representacin en Ca2 a partir de un nmero decimal es similar al caso binario. En ambos casos se
obtienen los dgitos comenzando por el de ms peso hasta obtener finalmente el de menos peso. Para
binario, se divide el nmero entre 2 y el resto es el dgito de menos peso, el cociente se divide a su vez
por 2 y el resto es el siguiente dgito y se repite el proceso hasta que el cociente vale 0 y el resto es el
dgito de ms peso. Las divisiones se efectan de forma que los restos sean positivos (0 o 1, pues son
los dgitos). Esto no hace falta decirlo ya que el nmero es siempre positivo y hacerlo as es lo normal).
12
Pero para obtener la representacin en Ca2 hay que efectuar las divisiones de forma que los restos sean
positivos (y esto no es lo que hacemos normalmente al dividir un nmero negativo entre un positivo)
hasta que el cociente pueda ser cero y el resto de esta ultima divisin sea 0 o -1. La Figura 4.8
ejemplifica este algoritmo para dos casos, -5 y 5.
-5 2
-6 -3 2
1 -4 -2 2
1 -2 -1 2
0 0 0
-1
5
4
1
2
2
2
0
2
1
0
1
2
0
0
0
-5
=>
1011
=>
0101
2
0
Procedimiento de obtener X pasando por el clculo de Xu a partir de Xs. Dado un vector de n bits,
X, podemos encontrar el valor que representa interpretndolo como un nmero natural codificado en
binario aplicando la EQ (2) y tambin podemos encontrar el valor que representa X interpretndolo
como un nmero entero codificado en Ca2 aplicando la EQ (10).
Veamos la relacin que existe entre estas dos interpretaciones. La EQ (2) se puede expresar, quitando
del sumatorio el trmino de ms peso, como:
n2
Xu = xn 1 2
n1
x 2
i=0
Si en esta ecuacin sustituimos el valor del sumatorio que se obtiene de despejar la EQ (10),
n2
x 2
i
= X s + xn 1 2
n1
, obtenemos que:
i=0
Xu = Xs + xn 1 2
(EQ 12)
13
Dado un nmero entero Xs y un nmero de bits n tal que Xs pueda representarse en Ca2 con n bits (n tal
que 2
n1
Xs 2
n1
entonces xn-1 es 1. Esto hace que la relacin de la EQ (12) pueda escribirse como:
Xs
Xu =
n
Xs + 2
si X s es positivo
si X s es negativo
(EQ 13)
Aplicando esta frmula, dado el nmero entero Xs encontramos fcilmente el valor natural Xu. Ahora
mediante el procedimiento de las divisiones sucesivas entre 2 que vimos en el captulo 1 para pasar de
decimal a binario encontramos el vector de n bits X que representa a Xu en binario, pero que tambin
representa a Xs en Ca2.
Ejemplo 2
Vamos a encontrar el vector de bits que representa en Ca2 al nmero entero Xs = -54. Para representar
71
71
Xu
Xs
11001011
203
-53
00101110
46
46
11100110
230
-26
00011010
26
26
14
entre el 0 y el 2n-1-1 (entre el 0 y el 3), que son los casos de resultados correctos, o
entre el -2n-1 y el -1 (entre el -4 y el -1), que son los casos de resultados incorrectos, ya que en estos
casos no se pueden representar los resultados correctos, que van del 2n-1 al 2n-1 (del 4 al 7).
15
Nunca, por muy grandes que sean los operandos positivos y con cin = 1 (por ejemplo, 3+3+1),
pasaremos la frontera del 111 al 000. O sea, que si al sumar dos nmeros positivos el resultado es
positivo este resultado es correcto, pero si el resultado es negativo, este resultado no es correcto,
porque el resultado correcto no es representable con n bits en Ca2.
Suma de negativos. Un razonamiento parecido puede hacerse al sumar dos negativos. Para n=3, al
sumar dos negativos (del -4 al -1) ms el acarreo ms desfavorable (para este caso cin = 0), el resultado
en Ca2 con 3 bits que nos entrega el sumador binario se encuentra:
(EQ 14)
Por ello, si queremos saber si la salida W del sumador binario es correcta cuando interpretamos los
vectores de bits X, Y y W como nmeros enteros representados en Ca2, debemos aadirle al circuito
sumador el bit de salida vn. Denotamos a la funcin lgica que lo calcula, operador OVFn:
v n = OVF n ( X, Y, c0 )
(EQ 15)
16
Ejemplo 4
Sabras demostrar que es vlida la siguiente expresin lgica alternativa para la deteccin de resultado
no representable en Ca2?
vn = cn cn 1
(EQ 16)
Para demostrarlo, construimos la tabla de verdad del Full-adder de ms peso del sumador binario
construido con Full-adders conectados con propagacin del acarreo, ya que es el que genera las seales
cn y wn-1 a partir de xn-1, yn-1 y cn-1. El resultado puede verse en las cinco primeras columnas de la tabla
de la Figura 4.9. Por ltimo, puede observarse que la columna vn de la tabla de la Figura 4.9 se obtiene
tanto a partir de la expresin EQ (14) como de la expresin EQ (16), con lo que queda demostrado que
ambas expresiones del overflow son vlidas.
xn-1 yn-1 cn-1 cn wn-1
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
0
0
1
0
1
1
1
0
1
1
0
1
0
0
1
vn
0
1
0
0
0
0
1
0
xn-1 yn-1
cn
Fa
cn-1
vn
wn-1
Ejemplo 5
Encuentra la expresin algebraica del valor Ws que obtiene el sumador binario cuando el resultado de la
suma de Xs + Ys + c0 no es representable con n bits en Ca2.
Vamos a proceder como hicimos en el caso de los nmeros naturales, observando casos concretos de
sumas con desbordamiento para el caso de n = 3 (ver tabla de la Figura 4.5). En la Tabla 4.1 se
muestran algunos casos. En los casos en que se debera obtener un valor positivo y se obtiene uno
negativo, se cumple que Ws = Xs + Ys - 8, mientras que en los casos en que se debera obtener un valor
negativo y se obtiene uno positivo, se cumple que Ws = Xs + Ys + 8.
17
Ys
Xs + Ys
Ws
-2
-4
-4
-4
-8
-3
-2
-5
Generalizando para n bits, tenemos que el comportamiento del sumador binario para el caso de
resultado no representable en Ca2 es:
n
Xs + Ys + c0 2
Ws =
Xs + Ys + c0 + 2n
si
Xu + Y u + c 0 > 2
si
n1
n1
1
(EQ 17)
> Xu + Yu + c0
El sumador binario: para naturales y para enteros. De lo visto hasta ahora en este captulo
podemos decir que el bloque combinacional de la Figura 4.10 es un sumador tanto de nmeros
naturales representados en binario como de nmeros enteros representados en Ca2. En la figura se
muestra su implementacin interna para n = 3 bits. Para detectar cundo el resultado no es
representable con n bits, se proporciona el bit de salida cn para el caso de sumar nmeros en binario y el
bit vn para el caso de Ca2. A continuacin, se formaliza la funcionalidad del sumador:
Xu + Yu + c0
Wu =
Xu + Yu + c0 2n
0
vn =
1
si
si
Xu + Yu + c0 2 1
n
si
si
Xs + Ys + c0
Ws = Xs + Ys + c 0 2n
X s + Ys + c0 + 2n
0
cn =
1
si
2
si
Xu + Yu + c0 > 2 1
n1
Xs + Ys + c0 2
X s + Ys + c0 > 2
si
n1
n1
n1
> Xs + Ys + c0
(EQ 18)
si
Xu + Yu + c0 2 1
si
Xu + Yu + c0 > 2 1
n1
n1
Xs + Ys + c0 2
n1
> Xs + Ys + c0 > 2
n1
A los operadores que calculan el vector de bits W y los bits de condicin cn y vn, los denotamos como:
W = ADD n ( X, Y, c 0 )
(EQ 19)
18
Y
n
cn
vn
ADDn
c0
n
W
c3
x2 y2
x1 y1
x0 y0
Fa
Fa
Fa
c0
v3
w2
w1
w0
c n = CARRY n ( X, Y, c 0 )
(EQ 20)
v n = OVF n ( X, Y, c0 )
(EQ 21)
Ejemplo 6
Disea un sumador de 2 nmeros enteros representados en Ca2 con n bits que obtenga el resultado de
la suma en Ca2 con n+1 bits. Por qu en este sumador no se produce nunca overflow?
Porque si los operandos estn representados con n bits, incluso si el acarreo de entrada vale 1, el
resultado de la suma siempre se puede representar con n+1 bits. Si 2
2
n1
y2
n1
n1
x2
n1
1 e
1 entonces 2 x + y + 1 2 1 .
Una forma directa de disear el circuito consiste en usar un sumador binario de 2 nmeros de n+1 bits
(por ejemplo conectando n+1 Full-adders con propagacin del acarreo) y alimentarlo con los dos
19
nmeros despus de extender el rango de cada uno de ellos a n+1 bits. Los n+1 bits de salida de este
sumador representan el resultado sin overflow.
Hacen falta realmente n+1 Full-adders, o con n Full-adders y una pequea lgica sera suficiente? Este
diseo puede optimizarse, ya que la salida del acarreo del Full-adder de ms peso, cn+1, no se est
usando para nada. Una implementacin con menos hardware consiste en usar un sumador de n bits e
implementar directamente w n = x n y n c n mediante la expresin:
wn = xn 1 yn 1 c n .
(EQ 22)
Si el sumador de n bits que estamos usando tiene salida de overflow, podemos usar la siguiente
expresin alternativa para wn:
wn = wn 1 v n
(EQ 23)
Dicho con palabras, wn es igual a wn-1 si no hay overflow y es igual a wn si hay overflow, usando el
sumador binario de n bits. Se puede obtener la expresin EQ (23) a partir de EQ (22) usando las
igualdades lgicas: x 0 = x y x x = 0 y conociendo la expresin del overflow de la EQ (16) y la
expresin del bit de suma del Full-adder de ms peso: w n 1 = x n 1 y n 1 c n 1 .
La columna Xs tiene una simetra respecto del -4. Los nmeros simtricos son el Xs y el -Xs. Por
ejemplo, el 2 se encuentra a 2 posiciones hacia arriba del -4 y el -2 a 2 posiciones hacia abajo. Esto
es, cambiar de signo un nmero representado en Ca2 con 3 bits, tanto positivo como negativo,
consiste en encontrar su simtrico en la tabla respecto de la fila 100, que representa el -4. Esto se
muestra en la figura con trazo muy grueso sombreado.
La columna X = x2x1x0 tiene una simetra respecto de la lnea que separa la representacin de los
nmeros positivos de los negativos. Las representaciones simtricas son la x2x1x0 y la x2x1x0. Esto
se muestra en la figura con trazo grueso discontinuo. Esto es, complementar1 (cambiar ceros por
unos y unos por ceros) la representacin de un nmero, tanto positivo como negativo, es
20
equivalente a encontrar la representacin simtrica respecto de la lnea que separa los positivos de
los negativos. Por ejemplo, complementando el 010 (que representa al 2) se obtiene el 101 (que
representa el -3).
De lo anterior se deduce que para obtener la representacin en Ca2 de -Xs a partir de la representacin
en Ca2 de Xs, tanto para valores de Xs positivos como negativos, solamente hay que complementar la
representacin de Xs y sumar 1 (001 para n=3) utilizando el sumador binario. Por supuesto que al
sumar 1 con el sumador binario nos quedamos con los 3 bits del resultado, sin tener en cuenta el
acarreo de salida. La suma de +1 se muestra en la figura mediante una flecha de trazo continuo. Por
ejemplo, si complementamos el 010 (que representa al 2), obtenemos el 101 y si al 101 le sumamos 001
nos da el 110, que representa el -2.
X
x2 x1 x0 X s
x2 x1 x0
+1
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
1
2
3
-4
-3
-2
-1
-Xs
Ejemplo 7
Si queremos obtener la representacin del -(-1) a partir de la representacin del -1 (que es 111)
hacemos:
1.
21
Ejemplo 8
Si efectuamos el complemento de la representacin del 0 y sumamos 1 obtenemos el 0, cosa que es
correcta, ya que -0 = +0:
ADD3(0 0 0, 0 0 1, 0) = ADD3(1 1 1, 0 0 1, 0) = 0 0 0.
4.5.1
Nos indica el acarreo de salida del sumador binario que ha habido overflow en la operacin de cambio
de signo? No, el acarreo de salida cuando trabajamos en Ca2, tanto en el cambio de signo como en la
suma, no indica que el resultado no pueda representarse con n bits. El nico caso en el que se produce
acarreo de salida es en el cambio de signo del 0 y el resultado obtenido es correcto.
En qu casos se produce overflow? Al cambiar de signo al nmero ms negativo que se puede
n1
n1
n1
(EQ 24)
Implementacin de un negador
Despus de tener claro el algoritmo de cambio de signo, su implementacin es sencilla. La Figura 4.12
muestra un negador en Ca2 para n=3 bits usando el sumador binario de la Figura 4.1. Para la deteccin
de overflow se ha usado la EQ (24).
Ejemplo 9
Una expresin alternativa a la EQ (24), para la deteccin de overflow en la negacin en Ca2 es:
vn = cn cn 1
(EQ 25)
Para demostrarlo, en las cuatro primeras columnas de la tabla de la Figura 4.13 construimos la tabla de
verdad de la rebanada de ms peso del negador de la Figura 4.12 ya que es este hardware (que se
muestra a la derecha en la Figura 4.13) el que genera las seales cn y wn-1 a partir de xn-1, y cn-1. Puede
observarse que la columna de vn se obtiene tanto a partir de la expresin EQ (24) como de la expresin
EQ (25), con lo que queda demostrado que ambas expresiones son vlidas.
22
x2
x1
x0
Fa
Fa
Fa
vn
w2
w1
w0
x2
xn-1 cn-1 cn wn-1
0
0
1
1
0
1
0
1
0
1
0
0
1
0
0
1
vn
0
0
0
1
c3
Fa
c2
vn
w2
Fig. 4.13 Tabla de verdad del Full-adder de ms peso del negador de la Figura 4.12.
Deteccin de overflow.
Ejemplo 10
Hacen falta n FAs para implementar el negador? Para sumar el vector 001 al vector x2x1x0 no hace
falta un sumador construido con 3 Full-Adders. En el negador de la Figura 4.14 la suma del valor 1 se
ha efectuado con Half-adders en vez de usar Full-adders y adems se ha usado la EQ (25) para vn.
23
x2
x1
x0
Ha
Ha
Ha
w2
w1
w0
vn
Ejemplo 11
Veamos ahora cmo el cambio de signo nos puede ayudar a obtener la representacin en Ca2 de un
nmero negativo, por ejemplo el nmero -5.
Usaremos el siguiente algoritmo, ya que el nmero es negativo:
Primero obtendremos la representacin en Ca2 del valor absoluto del nmero en cuestin. Como el
valor absoluto es un nmero positivo, la representacin en Ca2 es como la representacin en binario,
pero asegurndonos que hay un 0 como bit de ms peso. Esto se hace mediante divisiones sucesivas
entre 2, empezando por el nmero y siguiendo por los cocientes hasta que el cociente es 0 y el resto es
tambin 0. Los sucesivos restos son los dgitos de la representacin, empezando por el dgito de menos
peso y terminando por el de ms peso que es 0. Despus aplicaremos el algoritmo de cambio de signo a
la representacin en Ca2. Estas divisiones se indican en la Figura 4.15 (parte de la izquierda). A la
izquierda de la figura se obtiene la representacin del -5 a partir de la representacin del 5 mediante el
algoritmo de cambio de signo (cambiar ceros por unos y unos por ceros y sumar 1). El resultado es:
1011 = ADD3(0 1 0 1, 0001, 0).
Ejemplo 12
Encontrar el nmero entero que se representa en Ca2 por el vector de bits X = 10110111.
Utilizando la frmula de la representacin, EQ (10), se obtiene:
X s = 128 + 32 + 16 + 4 + 2 + 1 = 73
(EQ 26)
24
=>
2
0
0
0
2
0
-5
=>
2
1
0
1
0101
complementar
1010
=>
2
2
2
0
=>
5
4
1
+ 0001
1011
se cambia de signo la representacin, sin que se produzca overflow (para ello se complementa y
suma 1 previa extensin de rango, si es necesario que no es el caso del ejemplo),
01001001 = ADD 8 ( 10110111, 00000001, 0 ) ,
(EQ 27)
(EQ 28)
(EQ 29)
En el Full-adder de menor peso, el bit a 1 que entra por una de las entradas superiores lo hacemos
entrar ahora por la entrada de c0 (esto no es ningn problema, pues las tres entradas de un Fulladder son intercambiables).
Por las entradas de la derecha de todos los Full-adders, en vez de entrar ceros ahora entraran los n
bits de X.
25
x2 y2
x1 y1
x0 y0
Fa
Fa
Fa
vn
w2
w1
w0
Fig. 4.16 Restador de enteros de 3 bits en Ca2 usando Full-adders con propagacin
del acarreo.
si
b = 0
si
b = 1
Sustituimos, ahora, las puertas NOT de la Figura 4.16 por puertas XOR y conectamos la entrada de
control s/r a la entrada de control y de las puertas XOR y al acarreo de entrada del Full-adder de menos
peso. Adems, para que este sumador/restador sirva tambin para la suma y resta de nmeros naturales
codificados en binario, se ha negado el acarreo de salida en caso de resta, para obtener el borrow, y
efectuar la deteccin de resultado no representable para la resta de naturales (como se estudio en el
captulo de Representacin y operaciones bsicas de nmeros naturales). El sumador/restador
resultante se muestra en la Figura 4.17.
26
x2
y2
x1
y1
x0
y0
s/r
b3
c3
Fa
Fa
Fa
v3
w2
w1
w0
Fig. 4.17 Sumador/restador de 3 bits tanto para nmeros naturales en binario como para
enteros en Ca2 con deteccin de resultado no representable para las dos representaciones.
4.8
n1
Xs 2
n1
1,
n2
n1
i
wn 2 +
wi 2 = 2 w n 1 2
+
wi 2
i=0
i=0
n
(EQ 30)
(EQ 31)
Como 2x2i = 2i+1, la EQ (30) expandida, para que se vea ms claro, y despus de multiplicar todos los
sumandos del sumatorio por 2, queda:
27
w n 2 + wn 1 2
n1
+ + w 2 2 + w 1 2 + w 0 2 = x n 1 2 + x n 2 2
n1
+ + x 1 2 + x 0 2
para
1in,
cumple con la ecuacin anterior, que es la EQ (30), y con la EQ (31), ya que los dgitos de X la
cumplen (son bits) y w0=0 tambin.
Por lo tanto, multiplicar por 2 un nmero entero representado en Ca2 consiste en desplazar los
bits de la representacin una posicin a la izquierda y poner un 0 como bit de menor peso.
Ejemplo 13
La figura 4.18 muestra un ejemplo de aplicacin del algoritmo aritmtico de la multiplicacin por 2 en
Ca2, el operando representado con 4 bits y el resultado con 5.
Valor
Representacin en Ca2
Bit 4
Xs= -7
2Xu= -14
Bit 3
Bit 2
Bit 1
Bit 0
Dado que multiplicar un nmero por 2k consiste en multiplicarlo por 2 repetidamente k veces, el
algoritmo aritmtico para multiplicar por 2k consiste en aplicar el algoritmo de multiplicacin por dos k
veces consecutivas. Esto es, desplazar k posiciones a la izquierda los bits que representan al nmero y
poner k ceros en los k bits de menor peso. Adems, el resultado no es representable en Ca2 con n bits
excepto si los k+1 bits de ms peso del operando son todos ceros o todos unos.
28
Ejemplo 14
En la siguiente tabla se muestra la representacin en Ca2 con 8 bits del nmero 23 y sus
multiplicaciones por 2k para k = 1, 3 y 5. Es de resaltar que 23x23 y 23x25 requieren 9 y 11 bits para
representarse correctamente en Ca2: 010111000 y 01011100000, por lo que los 8 bits de menor peso,
10111000 y 11100000, no dan el resultado correcto. El resultado no es representable en 8 bits en estos
dos casos porque los k bits de ms peso del operando (00010111), para k igual a 3 y a 5
respectivamente, no son k ceros ni k unos.
Valor:
Xs = 23
2Xs = 46
23Xs = 184
25Xs = 736
00010111
00101110
10111000
11100000
No representable
No representable
Ejemplo 15
En la siguiente tabla se muestra la representacin en Ca2 con 8 bits del nmero -12 y sus
multiplicaciones por 2k para k = 1, 3 y 5 y la indicacin de cundo el resultado con 8 bits no es
representable.
Valor:
Xs = -12
2Xs = -24
23Xs = -96
11110100
11101000
10100000
25Xs = -384
10000000
No representable
4.9
29
x8
x7
x6
x5
x4
x3
x2
x1
x0
X
SL-4
W
representar correctamente en Ca2 con n-1 bits, por lo que el resultado con n bits que vamos a obtener
siempre ser correcto, no tiene sentido hablar de deteccin de resultado no representable. As que,
encontrar el algoritmo aritmtico de la divisin por 2 en Ca2 es equivalente a encontrar los bits de
W = w n 1 w n 2 ... w 2 w 1 w 0 tales que:
n2
w n 1 2
n1
n2
n1
i
+
wi 2 = wn 1 2
+
wi 2 2
i=0
i=0
(EQ 32)
(EQ 33)
Como 2i/2 = 2i-1, la EQ (32) expandida y despus de dividir todos los sumandos del sumatorio por 2, y
recordando que x0/2 = 0 (divisin entera), queda:
wn 1 2
n1
+ wn 2 2
n2
+ + w 2 2 + w 1 2 + w 0 2 = x n 1 2
n2
+ xn 2 2
n3
+ + x 2 2 + x 1 2
n2
= xn 1 2
n1
+ xn 1 2
n2
para
0in2 y
wn 1 = xn 1
cumple con la EQ (32) y tanbin con la EQ (33) ya que los dgitos de X la cumplen (son bits).
30
Por lo tanto, dividir por 2 un nmero entero representado en Ca2 consiste en desplazar los bits de
la representacin una posicin a la derecha replicando el bit de signo (el bit de menor peso del
operando desaparece).
Ejemplo 16
La figura 4.18 muestra un ejemplo de aplicacin del algoritmo aritmtico de la divisin por 2 en Ca2.
Valor
Representacin en Ca2
Bit 3
Bit 2
Bit 1
Bit 0
Xs = 7
Xs / 2 = 3
Ejemplo 17
La figura 4.18 muestra un ejemplo de aplicacin del algoritmo aritmtico de la divisin por 2 en Ca2.
Valor
Representacin en Ca2
Bit 3
Bit 2
Bit 1
Bit 0
Xs = -7
Xs / 2 = -4
Es muy importante darse cuenta de qu tipo de divisin entera estamos realizando. En las deducciones
anteriores hemos dicho que x0/2 =0. x0 es el resto positivo de dividir Xs entre 2. Cuando Xs es un
nmero positivo (como en el ejemplo 16) el resultado que obtenemos es el de la parte entera por abajo
del resultado, o lo que se denomina el primer entero ms prximo hacia el 0. Pero cuando Xs es
negativo (como en el ejemplo 17) es el entero ms prximo hacia . En cualquier caso es el entero
ms prximo hacia . Dicho de otra forma, el algoritmo de divisin por 2 que hemos encontrado
calcula el cociente entero tal que el resto sea siempre positivo, sea cual sea el signo del operando. Si al
dividir -7 entre 2 obtenemos el cociente -3 es porque el resto es -1, ya que de la prueba de la divisin:
-7 = -3x2-1. Sin embargo, si tal como hacemos aqu, al dividir -7 entre 2 nos da el cociente -4 es porque
el resto es 1, ya que: -7 = -4x2+1.
4.9.2
Dado que dividir un nmero por 2k consiste en dividirlo por 2 repetidamente k veces, el algoritmo
aritmtico consiste en aplicar el algoritmo de divisin por dos k veces consecutivas. Esto es, desplazar
31
k posiciones a la derecha los bits que representan al nmero y poner el bit de signo del operando en las
k posiciones de ms peso del resultado. Adems, el resultado siempre es representable en los mismos
bits que el operando.
Ejemplo 18
En la siguiente tabla se muestra la representacin en Ca2 con 8 bits del nmero 23 y sus divisiones por
2k para k = 1, 3 y 5. Al ser un nmero entero positivo en Ca2 el algoritmo y la representacin del
operando y del resultado son los mismos que en binario.
Valor:
Xs = 23
Xs /2 = 11
Xs /23 = 2
Xs /25 = 0
00010111
00001011
00000010
00000000
Ejemplo 19
En la siguiente tabla se muestra la representacin en Ca2 con 8 bits del nmero -13 y sus divisiones por
2k para k = 1, 3 y 5 (la divisin es al entero ms prximo hacia ).
Valor:
Xs = -13
Xs /2 = -7
Xs /23 = -2
Xs /25 = -1
11110011
11111001
11111110
11111111
x8
x7
x6
x5
x4
x3
x2
x1
x0
X
SRA-4
32
La figura 4.23a muestra el bloque LT que tiene dos buses de m bits, X e Y, y cuya salida de un bit w vale
1 cuando Xs es menor que Ys junto con el circuito interno del bloque. Hay que reslatar que el resultado
de la comparacin es siempre correcto, aunque no lo sea el resultado de la resta.
En la figura 4.23b se muestra el bloque LE con sus dos buses de entrada de m bits y su salida de un bit
w. En este caso, w vale 1 cuando Xs es menor o igual que Ys. Si denominamos z a la variable lgica que
vale 1 cuando Ws es 0, la expresin lgica que vale 1 cuando Xs es menor o igual que Ys es:
(v ^ n ) + z
El circuito interno del bloque se forma aadiendo al circuito LT un bloque Zero, para obtener z y
poderle hacer la operacin Or con (v ^ n). La figura 4.23b muestra el esquema lgico interno del bloque
LE.
1.
Hemos denotado con m al nmero de bits de los vectores X e Y ya que en este apartado reservamos la letra n para la variable
lgica negativo que aparecer ms tarde y que se usa asiduamente para representar el bit de signo (bit de ms peso) o bit de
negativo, del resultado de una resta.
33
a) LT
b) LE
X
b+ v SUB
LE
b15
LT
X Y
b15
b+ v SUB
X Y
z
n
Fig. 4.23 Smbolo y esquema interno de los comparadores de nmeros enteros en Ca2:
a) LT y b LE.
Tanto para el bloque LT como para el LE hemos usado un restador con salida de borrow, b, y de
overflow, v. En estos diseos la salida de borrow no se usa ya que no estamos considerando nmeros
naturales sino enteros, por lo que usamos la salida de overflow, v.
34