Documentos de Académico
Documentos de Profesional
Documentos de Cultura
6 de mayo de 2011
Captulo 1
CAPTULO 1.
0 1
B 0 0 1
1 1 (0,1)
1.1.1. Semisumador
Un mdulo bsico usado en elementos de aritmtica binaria es el semisumador. La funcin del semisumador es sumar dos dgitos binarios, produciendo una salida de suma y un arrastre o acarreo de acuerdo con las reglas de la tabla anterior. A B S C 0 0 1 1 0 1 0 1 0 1 1 0 0 0 0 1
S =A+B =AB+AB
(1.1) (1.2)
C =AB
1.1.2. Semirestador
El semirestador es muy parecido al semisumador, ya que slo se diferencia en el bit de prstamo respecto al semisumador. A B D P 0 0 1 1 0 1 0 1 0 1 1 0 0 1 0 0
D =A+B =AB+AB
(1.3) (1.4)
P =AB
Esto permite implementar un semirestador a partir de un semisumador. Esto se va a utilizar como manera de abaratar el hardware.
CAPTULO 1.
Ai
Bi
Ci1
Si
Ci
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 En trminos del acarreo anterior, las ecuaciones lgicas se pueden escribir como:
Si = Ai Bi Ci1 + Ai Bi Ci1 + Ai Bi Ci1 + Ai Bi Ci1
(1.5) (1.6)
C = Ai Ci1 + Ai Bi + Bi Ci1
1 0
0 1 0
1 0 0 0
Las operaciones utilizadas son sumas y desplazamientos. El algoritmo anterior es ineciente dado que los productos de 1 bit xj2iy deben almacenarse hasta que se ha completado la ltima adicin. (Se puede utilizar la resta para tratar nmeros en complemento a dos).
CAPTULO 1.
Figura 1.1: Circuito Multiplicador c) En las implementaciones es deseable sumar cada trmino a los anteriores para formar un nmero Pi+1 denominado producto parcial. 1 1 0 1 1 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 1 0 1 1 1 0 1 0 0 0 0 0 0 multiplicando y multiplicador x P0=0 x3*y P1=P0+x3*y x2*y*2 P2=P1+x2*y*2 x1*y*22 P3=P2+x1*y*22 x0*y*23 P4=P3+x0*y*23
0 0 0 0 1
0 0 0 0 1 0
0 0 0 1 1 0 0
0 0 0 0 0 1 1 0
Los clculos anteriores pueden describirse mediante una sentencia de transferencia entre registros de la forma:
Pi+1 = Pi + xj 2i y
(1.7)
Donde multiplicar y por 2i es equivalente a desplazar y en i posiciones hacia la izquierda. El circuito siguiente se va a utilizar para multiplicar dos nmeros x e y expresados en la forma magnitud-signo. Cada nmero es una palabra de 8 bits. 1) El bit ms a la izquierda es el bit de signo
CAPTULO 1.
C 0 0 0
1
0 0
A3 0 1 0 1 0
1
A2 0 1 1 1 0 0 1 1 0 0
A1 0 0 1 0
1
A0 0
1
1 1
0 1
Q3 1 1
1 1 1
Q2 0 0 1
1
Q1 1 1 0 0 1
1 1 1
Q0
1 1
C0 0 0 0 1 1 2 2 3 3
M3 1
M2 1
SHIFT SHIFT
NO ADD ADD
ADD
M1 0
M0 1
0 1 0
0 0 0 0
0 1 1 PRODUCTO
0 1
1 1
1 1
SHIFT SHIFT
ADD
Cuadro 1.1: Ejemplo 2) Los 7 bits restantes representan la magnitud del nmero. Esta se supone, si es fraccional, que el punto binario est a la izquierda del bit ms signicativo. 3) Por simplicidad hemos obviado el circuito que procesa el bit de signo. 4) Hay tres registros principales a) El registro M almacena el multiplicando Y. b) El registro Q almacena el multiplicador X. c) El acumulador de 8 bits se utiliza como un registro de trabajo en combinacin con el registro para almacenar resultados intermedios. La mitad ms signicativa del resultado nal se almacena en A. d) Los registros Q y A estn conectados fsicamente para formar un nico registro de desplazamiento que recibiendo la seal de control RIGHT-SHIFT desplaza su contenido en una posicin a la derecha. e) El acarreo del sumador es almacenado en el ip-op C, que se muestra en el ejemplo a la izquierda del Acumulador.
Ejemplo de multiplicacin de dos nmeros de 4 bits
Un algoritmo potente para la multiplicacin de nmeros con signo es el algoritmo de Booth. Este genera un producto de 2n bits y trata igual a los nmeros positivos que a los negativos. Consideremos una operacin de multiplicacin en la cual un nmero positivo tiene un bloque simple de unos con al menos un cero en cada nal, por ejemplo 0011110. Para obtener el producto podemos aadir cuatro versiones apropiadamente desplazadas del multiplicando como en el procedimiento estandar. Sin embargo, el nmero de operaciones puede reducirse observando que el multiplicador de esta forma se puede considerar como la diferencia de dos nmeros como sigue:
Algoritmo de Booth
CAPTULO 1.
0 0 0
1 0 0
0 0 1
0 0 1
0 0 1
0 1 1
0 0 0
32 2 30
Esto sugiere generar el producto por una operacin de adicin y otra de sustraccin. En particular, en el caso anterior haciendo 25 x multiplicando 21 x multiplicando se obtiene el resultado deseado. Por conveniencia en posteriores discusiones representaremos en el esquema estndar el multiplicador como 0, 0, +1, +1, +1, +1, 0, y en el nuevo esquema como 0, +1, 0, 0, 0, 1, 0. Notemos que en el nuevo esquema debemos seleccionar 1 x multiplicando desplazado en las fronteras de 0 a 1 y +1 x multiplicando desplazado en las fronteras de 1 a 0 segn se escanea el multiplicador de derecha a izquierda. La siguiente gura ilustra los dos esquemas: 0 0 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 1 0 0 0 1 +1 0 1 0 0 0 1 0 0 +1 0 1 1 0 1 1 +1 0 1 0 1 1 +1 0 0 1 0 +1 0 1 1 0 0
0 0
0 0 0
0 0 0 1
0 1 0 0 0
0 1 0 0 0 1
0 1 0 1 0 0 0
0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 1 0 0 1 0
1 0 -1 0 1
1 1 0 0
0 1 0 0 0 0 0 0
0 1 0 0 0 0 0 0
0 1 0 0 0 0 0 0
0 1 0 0 0 1 0 1
0 1 0 0 0 0 0 0
0 1 0 0 0 1 0 1
0 1 0 0 0 1 0 0
Multiplicando 0 0 1 1 0
Esto claramente se puede extender a cualquier nmero de bloques de unos en el multiplicador, incluyendo la situacin donde un uno simple se considera como un bloque. Hasta ahora hemos mostrado nmeros positivos. Puesto que al menos hay un cero al extremo izquierdo de cualquier multiplicador, una operacin +1 puede ser puesta a la izquierda de cada operacin -1 para preservar la correccin de la operacin. Tambin es cierto que si aplicamos el mtodo a un multiplicador negativo, tendremos la respuesta correcta. Para mostrar la correccin de esta tcnica necesitamos introducir una propiedad de la representacin de nmeros negativos en complemento a dos.
CAPTULO 1.
La siguiente tabla resume la tcnica de Booth: Multiplicador Bit i 0 0 1 1 Bit i-1 0 1 0 1 Operacin
0xM 1xM 1xM 0xM
La transformacin que hemos visto para el algoritmo de Booth se denomina la tcnica de "saltar sobre unos". El motivo es que en los casos en que el multiplicador tiene unos agrupados en un pocos bloques contiguos, slose necesita sumar dos versiones del multiplicando para obtener el resultado nal. En este caso la multiplicacin se ve acelerada. Sin embargo, en el peor caso de unos y ceros alternantes en el multiplicador, cada bit del multiplicador selecciona un sumando. De hecho esto resulta en ms sumandos que si no usamos el algoritmo de Booth. Este algoritmo persigue dos caractersticas principalmente: 1. Tratamiento uniforme tanto de los nmeros positivos como de los negativos 2. Alguna eciencia en el nmero de sumandos generados cuando el multiplicador tiene unos pocos bloques grandes de unos. La aceleracin posible debido al salto sobre los unos es claramente dependiente de los datos.
D = QxV + R
(1.8)
donde el resto R se requiere que sea ms pequeo que V, . Si se utiliza un formato de fraccin, el nmero de bits en el cociente no tiene por qu estar limitado:
0,2 : 0,3 = 0,6666666...
Se necesita, por tanto, limitar el nmero de bits del cociente generados en el proceso de divisin. Los circuitos de divisin se disean para producir cocientes de alguna longitud especca. En la inmensa mayora de los casos, slo se necesita el cociente y el resto se desprecia (R puede ser utilizado para generar dgitos en el cociente mediante una segunda divisin R : V ). La relacin D = QxV sugiere que hay una gran similitud entre la multiplicacin y la divisin. Esta correspondencia signica que se pueden utilizar circuitos y algoritmos similares para implementar la multiplicacin y la divisin. MULTIPLICACIN: El multiplicando desplazado se suma para producir el resultado DIVISN: El divisor desplazado se resta para producir el cociente.
CAPTULO 1.
Uno de los mtodos ms simples es el algoritmo secuencial dgito a dgito, similar al utilizado con lpiz y papel. D, V enteros positivos,Q = q0 , q1 , q2 , ..., Se calcula un bit cada vez. En el paso i, se compara 2i xV , que representa el divisor desplazado i bits a la derecha, con el resto parcial actual Ri . El bit qi del cociente se ja a 0 (1) si es mayor (menor) que Ri y se calcula un nuevo resto parcial Ri+1 de acuerdo a la relacin:
Algoritmo secuencial.
Ri+1 Ri qi 2i V
(1.9)
En la implementacin es ms fcil desplazar el resto parcial a la izquierda con respecto al divisor jo y entonces (1) es equivalente a:
Ri+1 2Ri qi V
(1.10)
Veamos un ejemplo: 1 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1 0 1 1 1 0 0 0 1 0 1 0
q0 = 0
1
q1 = 1 R0 = D R1 = R0 q0 V R2 = R1 q1 V 2 R3 = R2 q2 V 4 R4 = R3 q3 V 8
0
q2 = 1
1
q3 = 1
R1 1 1 0 0 1 R2 0 1 1 R3 R4
El problema central en la divisin es determinar el dgito qi del cociente. Si utilizamos la base r, entonces qi debe escogerse de los posibles valores de R. Si r=2, qi puede obtenerse comparando V y 2Ri en el paso i-simo. Si V > 2Ri entonces qi = 0. Si V < 2Ri entonces qi = 1. Si V es grande la implementacin de un circuito comparador pude ser imposible, y entonces qi se obtiene realizando una resta entre V y 2Ri y examinando el signo de la diferencia. Los circuitos utilizados en el captulo anterior para la multiplicacin pueden modicarse fcilmente para realizar la divisin. El par de registros de n bits A y Q se utilizan para almacenar los resultados parciales. Inicialmente el dividendo, que puede tener 2n bits de longitud, se alamacena en estos dos registros. El divisor V se ubicar en el registro M donde permanecer a lo largo de todo el proceso de divisin. En cada paso A y B se desplazan a la izquierda. Las celdas que van quedando vacas por la derecha del registro Q se utilizarn para almacenar los bits del cociente que estn siendo generados. Cuando el proceso de divisin termina el registro Q contendr el cociente, mientras que el registro A contendr el resto.
Divisin con restauracin
Sumando V al resultado se puede obtener Ri+1 . Esta tcnica se denomina divisin con restauracin. A continuacin describiremos el mtodo
CAPTULO 1.
(1.11)
(1.12)
Si la probabilidad de qi = 1 es 1/2 entonces este algoritmo requiere n restas y un promedio de n/2 adiciones. Ejemplo Inicializar 0 0 0 0 0 1 0 0 0 0 0 0 1 1 L-Shift Resta Restaurar q0=0 L-Shift Resta Restaurar q1=0 L-Shift Resta q2=1 L-Shift Resta Restaurar q3=0 0 1
1
0 1 1 0 0 1 1 0 0 1 0 0 0 1 1 0 0
0 1 1 0 0 1 1 0 1 1 0 0 0 1 1 0
0 0 1
1
0 0 1 1 0 1 0 1 1 1 0 0 0 0 1 0 1 1 1
1 1 0 1 1 0 1 1 1 0 0 1 1 1 0 1 1 1 0 0
0 0
0 0
0 0
0 0 1
0
0 0
0 0
0 0
0 0 1
1
0 0
0 0
0 1
0 0
0 0
0 1 Resto
0 1 0 Cociente