Documentos de Académico
Documentos de Profesional
Documentos de Cultura
23 1 Multiplicadoresdivisores
23 1 Multiplicadoresdivisores
Programa
1. 2. 3. 4. 5. 6. 7. 8. 9. Bibliografa. Multiplicacin binaria en coma fija. Multiplicacin por una constante. Multiplicacin por suma - desplazamiento. Multiplicacin por grupos solapados. Circuitos para multiplicacin rpida. Divisin binaria en coma fija. Divisin por una constante. Divisin con restauracin. Instrucciones para multiplicacin y divisin en ensamblador.
Bibliografa
D.A. PATTERSON, J.L. HENNESSY. Estructura y Diseo de Computadores. Revert, 2000. DORMIDO, S. CANTO M.A., MIRA J., DELGADO A.E. Estructura y Tecnologa de Computadores. 2 edicin. Sanz y Torres, 2000. PARHAMI, B. Computer Arithmetic. Oxford University Press, 2000. P. DE MIGUEL. Fundamentos de los Computadores. 7 edicin. Paraninfo, 1999. W. STALLINGS. Organizacin y Arquitectura de Computadores. 5 edicin, Prentice Hall, 2000.
A
0 0 0 1 0 1
12 6 72
1 1 0 0 1 1 0 0 0 0 0
multiplicando multiplicador
B
1
1 1 0 0 1 1 0 0 1 0 0 1 0 0 0 64 + 8 M3
M m R
= 72 M1 m1 M1 m0 M0 m1 R1 R0 M0 m0 M0 m0
multiplicando multiplicador Productos parciales
M2 m2 M2 m0 M1 m1 M0 m2 R2
R6
R5
resultado
5
Ejemplo: multiplicar M=101001102=16610 por m=000110012=2510 0000000010100110 + 0000000000000000 + 0000000000000000 + 0000010100110000 + 0000101001100000 + 0000000000000000 + 0000000000000000 + 0000000000000000 0001000000110110 M*m0*20 = M*1: M sin desplazar M*m1*21 = 0 M*m2*22 = 0 M*m3*23 = M*8: M desplazado 3 lugares M*m4*24 = M*16: M desplazado 4 lugares M*m5*25 = 0 M*m6*26 = 0 M*m7*27 = 0 M*m
El producto de dos nmeros binarios de n bits produce un resultado que puede tener hasta 2n bits de ancho. 6
10
64-bit ALU
Control test
11
Operaciones de la fase de inicio: 1. Iniciar el registro Multiplicando (mitad superior con todos los bits a 0, mitad inferior con el multiplicando) 2. Iniciar el registro Multiplicador 3. Producto 0 4. Contador 0
Multiplicand Shift left 64 bits
Contador Contador+1
64-bit ALU Multiplier Shift right 32 bits
Contador = n ?
Product Write Control test
64 bits
Fin
12
14
32 bits
32-bit ALU
Multiplier Shift right 32 bits Product 64 bits Shift right Write Control test
15
Contador Contador+1
Multiplier Shift right 32 bits Product Shift right Write Control test
32-bit ALU
Contador = n ?
S
Fin
64 bits
16
18
32-bit ALU
Product 64 bits
Control test
19
1. Iniciar el registro Multiplicando 2. Iniciar el registro Producto (mitad izquierda a 0, mitad derecha con el multiplicador) 3. Contador 0
Multiplicand 32 bits
Contador Contador+1
32-bit ALU
Contador = n ?
S
Product 64 bits
Control test
Fin
20
Los nmeros utilizados estn en binario puro. El algoritmo se puede adaptar a nmeros en complemento a 2.
Con multiplicador negativo en la ltima iteracin hay que restar en vez de sumar.
21
CONTROLADOR
INICIO
Fin Cuenta
Contador 0-3
A3 A2 A1 A0
Multiplicando
Sumador de 4 bits
B3 B2 B1 B0
Clr
Reloj
D CE
Clr
Producto
L S
Multiplicador
L S
Z7 Z6 Z5 Z4
Z3 Z2 Z1 Z0
22
23
Algoritmo de Booth
El algoritmo de Booth presentado funciona para operandos en complemento a 2 (para binario puro habra que realizar una pequea adaptacin). En un nmero binario, una cadena de bits a 1 equivale a una diferencia de dos potencias de 2 (es una suma de elementos de una progresin geomtrica de razn 2). k k-1 j+1 j ... 0 1 1 ... 1 1 0 ... = 2k+1-2j El algoritmo analiza los bits del multiplicador 2 a 2 de derecha a izquierda:
Si detecta que est al final de una cadena de bits a 1 resta la mitad izquierda del registro producto menos el multiplicando Si detecta que est al principio de una cadena de bits a 1 suma la mitad izquierda del registro producto ms el multiplicando. Multiplicadori Multiplicadori-1 Operacin 0 0 1 1 0 1 0 1 Nada (en medio de cadena de ceros) Sumar (inicio de cadena de unos) Restar (final de cadena de unos) Nada (en medio de cadena de unos)
24
Algoritmo de Booth
En definitiva, el algoritmo de Booth se basa en recodificar el multiplicador y convertirlo en una secuencia de dgitos con valores 1, 0 y 1 (codificacin de dgitos con signo).
1 cuando comienza cadena de bits a 1 (implica hacer una suma). -1 cuando termina cadena de bits a 1 (implica hacer una resta). 0 en otro caso.
Los nmeros en binario puro se recodifican aadiendo un bit a 0 a la izquierda del todo (ejercicio: probarlo). 25
Algoritmo de Booth
Ejemplo: multiplicar M=10100110C2=-9010 por m=00011001C2=2510 Recodificamos el multiplicador y realizamos la operacin:
Multiplicador original Multiplicador recodificado 0 0 0 0 0 1 1 0 1 0 0 1 1 -1
-1 0
M*m0*(-20) = -1*M M*m1*21 = 2*M M*m2*22 = 0 M*m3*(-23) = -8*M M*m4*24 = 0 M*m5*25 = 32*M M*m6*26 = 0 M*m7*27 = 0 M*m
26
Algoritmo de Booth
Podra emplearse la circuitera del algoritmo de suma-desplazamiento con algunas pequeas modificaciones (se parte de la versin 3):
Utilizar un sumador-restador. Despreciar el bit de acarreo superior, ya que se manejan datos en complemento a 2. Realizar desplazamientos aritmticos (extendiendo el signo). Aadir un bit que se concatenar a la derecha del registro Producto, iniciado con un 0 y que se modificar cada vez que se haga un desplazamiento sobre Producto (la ventana de bits analizada en cada iteracin est formada por el bit menos significativo del registro Producto y el bit aadido a su derecha).
Multiplicand 32 bits
32-bit ALU
Product 64 bits
Control test
27
Algoritmo de Booth
Inicio
Multiplicand 32 bits
32-bit ALU
10
p0p-1 ?
00 11
01
Product 64 bits
Control test
Operaciones de la fase de inicio: 1. Iniciar el registro Multiplicando 2. Iniciar el registro Producto (mitad izquierda a 0, mitad derecha con el multiplicador, bit p-1 a 0) 3. Contador 0 Ejercicio: dibujar el diagrama de estados del controlador del circuito. 28
Contador Contador+1
Contador = 0 ?
S
Fin
Aclaraciones: p0: bit menos significativo del registro Producto. p-1: bit aadido a la derecha del registro Producto. Producto # p-1: registro Producto concatenado con el bit p-1.
Algoritmo de Booth
Ejemplo: n=4, multiplicar M=1010C2= -610 por m=0011C2=310 El multiplicando cambiado de signo es M=0110C2
Iteracin 0 1 Valores iniciales Productoizq Productoizq - Multiplicando Desplazar Producto a la derecha 2 Ninguna operacin Desplazar Producto a la derecha 3 Productoizq Productoizq + Multiplicando Desplazar Producto a la derecha 4 Ninguna operacin Desplazar Producto a la derecha Paso Multiplicando 1010 Producto 0000 0011 0 0110 0011 0 0011 0001 1 0001 1000 1 1011 1000 1 1101 1100 0 1110 1110
Los nmeros utilizados estn en complemento a 2. El algoritmo se puede adaptar a nmeros en binario puro.
Si el multiplicador comienza por 1, realizar un ajuste final sumando el multiplicador a la mitad izquierda del registro Producto. 29
30
31
32
112 0
8 14
dividendo
1 1 1 0 1 0 0 0 0 1 1 0 -100 0 1 0 - 10 0 0 - 0 0
0 0 0 0 0 0 0 0 0 0
1 0 0 0 1 1 1 0
divisor cociente
0 0 0 0 0 0 0 0
resto
33
35
36
64-bit ALU
Control test
37
Operaciones de la fase de inicio: 1. Iniciar el registro Resto (mitad superior con todos los bits a 0, mitad inferior con el dividendo). 2. Iniciar el registro Divisor (mitad superior con el divisor, mitad inferior con todos los bits a 0). 3. Cociente 0 4. Contador 0
Divisor Sh ift right 64 bits
Resto Resto-Divisor
No
Resto < 0?
No
Contador=n+1?
S
64-bit ALU
Fin
Control test
38
Paso
Cociente
0000 0000 0001 0000 0000 0001 0011 0011
Divisor
0011 0000 0001 1000 0000 1100 0000 0110 0000 0011 0000 0001
Resto
0000 1010 1101 0000 0000 1010 1111 0010 0000 1010 1111 1110 0000 1010 0000 0100 0000 0001 0000 0001 39
32-bit ALU
Remainder 64 bits
Control test
41
Operaciones de la fase de inicio: 1. Iniciar el registro Divisor 2. Iniciar el registro Resto (mitad inferior con el dividendo, mitad superior con todos sus bits a 0) 3. Cociente 0 4. Contador 0
Divisor 32 bits
Restoizq Restoizq-Divisor
No
Resto < 0?
No
Desplazar Resto 1 bit hacia la izquierda Desplazar Cociente 1 bit hacia la izquierda Cociente0 1
Restoizq Restoizq+Divisor Desplazar Resto 1 bit hacia la izquierda Desplazar Cociente 1 bit hacia la izquierda Cociente0 0
Contador Contador+1
32-bit ALU Quotient Shift left 32 bits Remainder 64 bits Shift left Write Control test
Contador=n?
S
42
Paso
Cociente
0000 0000 0000 0001
Divisor
0011
Resto
0000 1010 0001 0100 1110 0100 0010 1000 1111 1000 0101 0000 0010 0000 0100 0000 0001 0000 0010 0000 0001 0000
43
32-bit ALU
Remainder 64 bits
Control test
45
Restoizq Restoizq-Divisor
No
Resto < 0?
Operaciones de la fase de inicio: 1. Iniciar el registro Divisor 2. Iniciar el registro Resto (mitad izquierda a 0, mitad derecha con el dividendo) 3. Contador 0
Divisor 32 bits
No
Contador Contador+1
32-bit ALU
Contador=n?
S
Remainder 64 bits
Control test
46
Paso
Divisor
0011
Resto
0000 1010 0001 0100 1110 0100 0001 0100 0010 1000 0010 1000 1111 1000 0010 1000 0101 0000 0101 0000 0010 0000 0100 0000 0100 0001 0001 0001 0010 0010 0010 0011 0001 0011 47
48