Você está na página 1de 25

Universidad

Rey Juan Carlos


ESTRUCTURA Y TECNOLOG ESTRUCTURA Y TECNOLOG A DE A DE
COMPUTADORES COMPUTADORES
Circuitos para multiplicacin y
divisin de nmeros en coma fija
Luis Rincn Crcoles
Licesio J. Rodrguez-Aragn
Circuitos para multiplicacin y divisin de nmeros en coma fija
2
Programa
Bibliografa.
1. Multiplicacin binaria en coma fija.
2. Multiplicacin por una constante.
3. Multiplicacin por suma - desplazamiento.
4. Multiplicacin por grupos solapados.
5. Circuitos para multiplicacin rpida.
6. Divisin binaria en coma fija.
7. Divisin por una constante.
8. Divisin con restauracin.
9. Instrucciones para multiplicacin y divisin en ensamblador.
Circuitos para multiplicacin y divisin de nmeros en coma fija
3
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.
Bibliografa
Circuitos para multiplicacin y divisin de nmeros en coma fija
4
La operacin de multiplicacin de nmeros en coma fija no suele estar
contemplada directamente por las UAL, sino que se suele realizar mediante
circuitos especficos:
Construir un circuito multiplicador rpido exige una circuitera compleja, y las
UAL slo realizan directamente las operaciones aritmticas y lgicas ms
bsicas.
La multiplicacin se puede realizar en la UAL mediante una secuencia de
sumas y desplazamientos controlados por la unidad de control (UC), si bien
no resulta demasiado eficiente.
La multiplicacin puede realizarse tambin mediante un programa en
ensamblador que conste de un bucle con una secuencia de sumas y
desplazamientos, aunque esto es mucho menos eficiente an.
Terminologa de la multiplicacin:
M x m =P
M: multiplicando.
m: multiplicador.
P: producto o resultado.
1. Multiplicacin binaria en coma fija
Circuitos para multiplicacin y divisin de nmeros en coma fija
5
12
6
72
1 1 0 0
1 1 0
0 0 0 0
1 1 0 0
1 1 0 0
1 0 0 1 0 0 0
64 + 8 =72

multiplicando
resultado
A
B
PRODUCTO
BINARIO
()
0 1
0 0 0
1 0 1
multiplicador
Productos
parciales

Multiplicacin binaria en coma fija


M
3
M
2
M
1
M
0
m
2
m
1
m
0
M
3
m
0
M
2
m
0
M
1
m
0
M
0
m
0
M
3
m
1
M
2
m
1
M
1
m
1
M
0
m
1
M
3
m
2
M
2
m
2
M
1
m
2
M
0
m
2
R
6
R
5
R
4
R
3
R
2
R
1
R
0

multiplicando
resultado
multiplicador
Productos
parciales

M
m
R
Circuitos para multiplicacin y divisin de nmeros en coma fija
6
Multiplicacin binaria en coma fija
La multiplicacin en coma fija es una secuencia de desplazamientos y sumas
con extensin de signo.
Si los operandos estn en binario puro, se rellenan con ceros a la izquierda.
Los operandos en complemento a 2 se rellenan a su izquierda con el bit de signo.
En cualquier caso, a la derecha se rellena con ceros.
Ejemplo: multiplicar M=10100110
2
=166
10
por m=00011001
2
=25
10
0000000010100110 M*m
0
*2
0
=M*1: M sin desplazar
+0000000000000000 M*m
1
*2
1
=0
+0000000000000000 M*m
2
*2
2
=0
+0000010100110000 M*m
3
*2
3
=M*8: M desplazado 3 lugares
+0000101001100000 M*m
4
*2
4
=M*16: M desplazado 4 lugares
+0000000000000000 M*m
5
*2
5
=0
+0000000000000000 M*m
6
*2
6
=0
+0000000000000000 M*m
7
*2
7
=0
0001000000110110 M*m
El producto de dos nmeros binarios de n bits produce un resultado que puede
tener hasta 2n bits de ancho.
Circuitos para multiplicacin y divisin de nmeros en coma fija
7
La multiplicacin es una operacin costosa en tiempo de ejecucin. Por tanto, es
aconsejable evitar las multiplicaciones en los programas siempre que sea posible.
Si uno de los operandos (por ejemplo el multiplicador) es una constante conocida
en tiempo de compilacin (o ensamblaje), es frecuente que el compilador (o
ensamblador) sustituya la multiplicacin por otras operaciones.
Cuando el multiplicador es una constante potencia de 2, la multiplicacin se
puede sustituir por un desplazamiento del multiplicando hacia la izquierda.
Si el multiplicador es 2
k
, se desplazar el multiplicando k lugares a la izquierda.
Ejemplo: 1101001
2
2
3
=1101001000
2
2. Multiplicacin por un valor constante
0
0
1 - n
1 - n
2 a ........ 2 a N + + =
m 0
0
m 1 - n
1 - n
m
2 a ........ 2 a 2 N
+ +
+ + =
Circuitos para multiplicacin y divisin de nmeros en coma fija
8
Cuando el multiplicador es una constante que no es una potencia de 2, la
multiplicacin puede descomponerse en una secuencia de instrucciones de
desplazamiento y de suma.
Ejemplo: multiplicar M=10100110
2
=166
10
por m=00011001
2
=25
10
Descomponemos el multiplicador m=25=16+8+1. As, la operacin ser
M*25 =M*(16+8+1) =M*16+M*8+M
que se traduce en dos desplazamientos (de 3 y 4 lugares respectivamente) y
dos sumas (consumiramos una variable intermedia).
101001100000 Desplazamiento de M cuatro posiciones
+010100110000 Desplazamiento de M tres posiciones
+000010100110 M sin desplazar
1000000110110 Resultado de la suma (del producto)
Multiplicacin por un valor constante
Circuitos para multiplicacin y divisin de nmeros en coma fija
9
Vamos a ver:
1) El algoritmo de lpiz y papel (o de suma-desplazamiento) para
multiplicar nmeros en binario puro (sin signo) de n bits.
2) Un circuito que permite realizar la operacin utilizando dicho algoritmo.
3) Una versin optimizada del algoritmo, con el correspondiente circuito.
4) La versin final del algoritmo, an ms optimizada, acompaada del
correspondiente circuito.
Los circuitos se basan en:
Un sumador, que puede ser el de la UAL.
Varios registros de desplazamiento.
Un circuito secuencial de control, que puede ser parte de la UC.
3. Multiplicacin por suma desplazamiento
Circuitos para multiplicacin y divisin de nmeros en coma fija
10
Multiplicacin por S D: 1 versin
La multiplicacin ser un proceso iterativo, y en cada ciclo se realizarn las
siguientes operaciones:
1. Se realiza el producto del multiplicando por el bit 0 del multiplicador, con lo cual
obtendremos productos parciales que pueden valer lo mismo que el multiplicando
desplazado (cuando el bit del multiplicador sea 1) o bien 0 (cuando dicho bit sea nulo).
2. Se desplazar el multiplicando un lugar hacia la izquierda para alinear correctamente los
productos parciales, que estarn convenientemente rellenados con ceros a la izquierda y/o
a la derecha (para ello, doblaremos el tamao del multiplicando, e inicialmente lo
rellenaremos con ceros a la izquierda).
3. Se desplaza o se rota el multiplicador un lugar hacia la derecha (por esto siempre se
multiplica por el bit 0 del multiplicador).
4. Se sumar el producto parcial con la suma acumulada de los productos parciales
obtenidos en los pasos anteriores (al principio el producto acumulado ser 0).
Circuitos para multiplicacin y divisin de nmeros en coma fija
11
Multiplicacin por S D: 1 versin
Circuitera necesaria:
Un registro de 2n bits capaz de realizar desplazamientos unitarios hacia la izquierda
para el multiplicando.
Un registro de n bits capaz de realizar desplazamientos unitarios hacia la derecha
para el multiplicador.
Un registro de 2n bits para el producto.
Un contador de 0 a n para contar el nmero de iteraciones.
Un sumador de 2n bits.
Un controlador para generar la secuencia de seales necesaria.
64-bit ALU
Control test
Multiplier
Shift right
Product
Write
Multiplicand
Shift left
64 bits
64 bits
32 bits
Circuito para n =32 bits con
las conexiones y seales de
control necesarias.
Circuitos para multiplicacin y divisin de nmeros en coma fija
12
Multiplicacin por S D: 1 versin
64-bit ALU
Control test
Multiplier
Shift right
Product
Write
Multiplicand
Shift left
64 bits
64 bits
32 bits
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
Ejercicio: dibujar el diagrama de estados del controlador del circuito.
Producto Producto +
Multiplicando
Inicio
Bit 0 del
Multiplicador =0?
Desplazamiento del registro Multiplicandoa la izquierda
Contador =n ?
S
1
0
Contador Contador+1
No
Desplazamiento del registro Multiplicador a la derecha
Fin
Circuitos para multiplicacin y divisin de nmeros en coma fija
13
Multiplicacin por S D: 1 versin
Ejemplo: n=4, multiplicar M=1010
2
=10
10
por m=0011
2
=3
10
Ninguna operacin 4
1010 0000 Desplazar Multiplicando a la izqda.
0001 1110 0000 Desplazar Multiplicador a la derecha
0000 Desplazar Multiplicador a la derecha
0101 0000 Desplazar Multiplicando a la izqda.
Ninguna operacin 3
0000 Desplazar Multiplicador a la derecha
0010 1000 Desplazar Multiplicando a la izqda.
0001 1110 Producto Producto +Multiplicando 2
0001 Desplazar Multiplicador a la derecha
0001 0100 Desplazar Multiplicando a la izqda.
0000 1010 Producto Producto +Multiplicando 1
0000 0000 0000 1010 0011 Valores iniciales 0
Producto Multiplicando Multiplicador Paso Iteracin
Circuitos para multiplicacin y divisin de nmeros en coma fija
14
Multiplicacin por S D: 2 versin
En el circuito anterior sucede que:
La mitad de los bits del registro Multiplicando siempre son 0, con lo cual slo
la mitad contiene datos tiles.
Tambin sobra la mitad de la UAL, pues est sumando en cada paso el doble
de datos de lo estrictamente necesario.
Por tanto, se ide un algoritmo similar al anterior, pero sin duplicar el tamao
del multiplicador, y utilizando un sumador de n bits.
Puesto que las sumas son de n bits, el registro Producto estar dividido en dos
mitades (Producto
izq
: mitad izquierda; Producto
der
: mitad derecha; P: registro
completo).
En cada iteracin se suma slo sobre la mitad izquierda.
Los desplazamientos se realizan sobre el registro completo.
Deja de ser necesario desplazar el registro Multiplicando.
Sigue siendo preciso desplazar el registro Multiplicador para consultar siempre
su bit 0.
Circuitos para multiplicacin y divisin de nmeros en coma fija
15
Multiplicacin por S D: 2 versin
Circuitera necesaria:
Un registro de n bits para el multiplicando.
Un registro de n bits capaz de realizar desplazamientos lgicos unitarios hacia la
derecha para el multiplicador.
Un sumador de n bits.
Un biestable para guardar el acarreo de las sumas (no aparece en el dibujo).
Un registro de 2n bits para el producto, que pueda cargarse en paralelo en su mitad
izquierda dejando intacta la mitad derecha; este registro admitir desplazamientos
lgicos unitarios hacia la derecha del registro completo concatenando el biestable de
acarreo por la izquierda.
Un contador de 0 a n para contar el nmero de iteraciones.
Un controlador para generar la secuencia de seales necesaria.
Circuito para n =32 bits con
las conexiones y seales de
control necesarias.
Multiplier
Shift right
Write
32 bits
64 bits
32 bits
Shift right
Multiplicand
32-bit ALU
Product Control test
Circuitos para multiplicacin y divisin de nmeros en coma fija
16
Multiplicacin por S D: 2 versin
Operaciones de la fase de inicio:
1. Iniciar el registro Multiplicando
2. Iniciar el registro Multiplicador
3. Producto 0
4. Contador 0
Multiplier
Shift right
Write
32 bits
64 bits
32 bits
Shift right
Multiplicand
32-bit ALU
Product Control test
Ejercicio: dibujar el diagrama de estados del controlador del circuito.
Producto
izq
Producto
izq
+
Multiplicando
Inicio
Bit 0 del
Multiplicador =0?
Desplazamiento del registro Productoa la derecha
Contador =n ?
S
1
0
Contador Contador+1
No
Desplazamiento del registro Multiplicador a la derecha
Fin
Circuitos para multiplicacin y divisin de nmeros en coma fija
17
Multiplicacin por S D: 2 versin
Ejemplo: n=4, multiplicar M=1010
2
=10
10
por m=0011
2
=3
10
Ninguna operacin 4
0 0001 1110 Desplazar Producto a la derecha
0001 1110 0000 Desplazar Multiplicador a la derecha
0000 Desplazar Multiplicador a la derecha
0 0011 1100 Desplazar Producto a la derecha
Ninguna operacin 3
0000 Desplazar Multiplicador a la derecha
0 0111 1000 Desplazar Producto a la derecha
0 1111 0000 Producto
izq
Producto
izq
+Multiplicando 2
0001 Desplazar Multiplicador a la derecha
0 0101 0000 Desplazar Producto a la derecha
0 1010 0000 Producto
izq
Producto
izq
+Multiplicando 1
0 0000 0000 1010 0011 Valores iniciales 0
Producto Multiplicando Multiplicador Paso Iteracin
Circuitos para multiplicacin y divisin de nmeros en coma fija
18
Multiplicacin por S D: 3 versin
En el circuito anterior sucede que:
Al principio, el registro Producto tiene la mitad de sus bits desperdiciados.
A medida que van realizndose pasos del algoritmo, el espacio
desaprovechado del registro Producto se va reduciendo.
Los bits del multiplicador van dejando de ser tiles a medida que se van
realizando los productos parciales (en realidad se van perdiendo si hacemos
desplazamientos sobre el registro Multiplicador y no rotaciones).
El espacio desaprovechado del registro Producto es exactamente igual que el
nmero de bits del multiplicador que necesitamos mantener en cada instante.
Por tanto, se incorpor una mejora al circuito, de forma que el registro
Multiplicador desaparece, y el multiplicador se carga inicialmente en la mitad
derecha del registro Producto.
En cada iteracin, cuando vayamos a consultar un bit del multiplicador,
consultaremos el bit menos significativo del registro Producto.
Circuitos para multiplicacin y divisin de nmeros en coma fija
19
Multiplicacin por S D: 3 versin
Circuitera necesaria:
Un registro de n bits para el multiplicando.
Un sumador de n bits.
Un biestable para guardar el acarreo de las sumas (no aparece en el dibujo).
Un registro de 2n bits para el producto, que pueda cargarse en paralelo en su mitad
izquierda dejando intacta la mitad derecha, o cargarse en paralelo en su mitad
derecha dejando intacta su mitad izquierda; este registro admitir desplazamientos
lgicos unitarios hacia la derecha del registro completo concatenando el biestable de
acarreo por la izquierda.
Un contador de 0 a n para contar el nmero de iteraciones.
Un controlador para generar la secuencia de seales necesaria.
Circuito para n =32 bits con
las conexiones y seales de
control necesarias.
Control
test Write
32bits
64bits
Shift right
Product
Multiplicand
32-bit ALU
Circuitos para multiplicacin y divisin de nmeros en coma fija
20
Multiplicacin por S D: 3 versin
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)
3. Contador 0
Producto
izq
Producto
izq
+
Multiplicando
Inicio
Bit 0 del
Producto =0?
Desplazamiento del registro Productoa la derecha
Contador =n ?
S
1
0
Contador Contador+1
No
Fin
Control
test Write
32bits
64bits
Shift right
Product
Multiplicand
32-bit ALU
Ejercicio: dibujar el diagrama de estados del controlador del circuito.
Circuitos para multiplicacin y divisin de nmeros en coma fija
21
Multiplicacin por S D: 3 versin
Ejemplo: n=4, multiplicar M=1010
2
=10
10
por m=0011
2
=3
10
Ninguna operacin 4
0001 1110 Desplazar Producto a la derecha
0 0011 1100 Desplazar Producto a la derecha
Ninguna operacin 3
0 0111 1000 Desplazar Producto a la derecha
0 1111 0001 Producto
izq
Producto
izq
+Multiplicando 2
0 0101 0001 Desplazar Producto a la derecha
0 1010 0011 Producto
izq
Producto
izq
+Multiplicando 1
0 0000 0011 1010 Valores iniciales 0
Producto Multiplicando Paso Iteracin
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.
Circuitos para multiplicacin y divisin de nmeros en coma fija
22
Multiplicacin por S D: ruta de datos 3 versin
Producto c
A3
A0
A1
A2
Sumador de 4 bits
B3
B0
B1
B2
Multiplicador
Multiplicando
Z7 Z4 Z5 Z6 Z3 Z0 Z1 Z2
Reloj
L
S
L
S
Clr
CE
L
INICIO
Clr
Ini
Contador 0-3
CE
TC
Clr
Cuenta
Fin
Desplaza
Carga
CONTROLADOR
BitZ0
D
Circuitos para multiplicacin y divisin de nmeros en coma fija
23
El algoritmo de lpiz y papel (o suma desplazamiento) considera los bits del
multiplicador uno a uno, y va generando productos parciales que va sumando y
acumulando.
Los algoritmos de multiplicacin por grupos solapados (G-S) generan productos
parciales considerando los bits del multiplicador por grupos.
Los algoritmos de multiplicacin por G-S analizan una ventanao grupo de n
bits del multiplicador en cada iteracin.
En funcin de los bits de la ventana, se generan uno o varios productos
parciales.
De cara a la siguiente iteracin, la ventana de bits analizados se desplaza un
lugar hacia la derecha (las ventanas o grupos de bits del multiplicador se solapan
en las sucesivas interaciones).
El caso de G-S ms sencillo es el algoritmo de Booth, que considera grupos
solapados de 2 bits en el multiplicador para generar los productos parciales.
4. Multiplicacin por grupos solapados
Circuitos para multiplicacin y divisin de nmeros en coma fija
24
Algoritmo de Booth
... =2
k+1
-2
j
j j+1 k-1 k
0 ... 1 1 ... 1 1 0
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.
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).
Nada (en medio de cadena de unos) 1 1
Restar (final de cadena de unos) 0 1
Sumar (inicio de cadena de unos) 1 0
Nada (en medio de cadena de ceros) 0 0
Operacin Multiplicador
i-1
Multiplicador
i
Circuitos para multiplicacin y divisin de nmeros en coma fija
25
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.
Ejemplo: recodificacin del nmero 01001110
C2
Ejemplo: recodificacin del nmero 11100011
C2
Los nmeros en binario puro se recodifican aadiendo un bit a 0 a la izquierda del
todo (ejercicio: probarlo).
Nmero recodificado
Nmero original 0 1 1 1 0 0 1 0
0 1 -1 0 0 1 0 -1
Nmero recodificado
Nmero original 1 1 0 0 0 1 1 1
-1 0 0 1 0 0 -1 0
Circuitos para multiplicacin y divisin de nmeros en coma fija
26
Ejemplo: multiplicar M=10100110
C2
=-90
10
por m=00011001
C2
=25
10
Recodificamos el multiplicador y realizamos la operacin:
0000000001011010 M*m
0
*(-2
0
) =-1*M
+1111111101001100 M*m
1
*2
1
=2*M
+0000000000000000 M*m
2
*2
2
=0
+0000001011010000 M*m
3
*(-2
3
) =-8*M
+0000000000000000 M*m
4
*2
4
=0
+1111010011000000 M*m
5
*2
5
=32*M
+0000000000000000 M*m
6
*2
6
=0
+0000000000000000 M*m
7
*2
7
=0
1111011100110110 M*m
Algoritmo de Booth
Multiplicador recodificado
Multiplicador original 1 0 0 1 1 0 0 0
-1 0 1 0 -1 0 1 0
Circuitos para multiplicacin y divisin de nmeros en coma fija
27
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).
Control
test Write
32bits
64bits
Shift right
Product
Multiplicand
32-bit ALU
Circuitos para multiplicacin y divisin de nmeros en coma fija
28
Algoritmo de Booth
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
Aclaraciones:
p
0
: 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
.
Control
test Write
32bits
64 bits
Shift right
Product
Multiplicand
32-bit ALU
Ejercicio: dibujar el diagrama
de estados del controlador del
circuito.
Producto
izq
Producto
izq
-
Multiplicando
Inicio
p
0
p
-1
?
Desplazar Producto #p
-1
a la derecha
Contador =0 ?
Fin
00
11
S
Contador Contador+1
10 01
Producto
izq
Producto
izq
+
Multiplicando
No
Circuitos para multiplicacin y divisin de nmeros en coma fija
29
Algoritmo de Booth
Ejemplo: n=4, multiplicar M=1010
C2
=-6
10
por m=0011
C2
=3
10
El multiplicando cambiado de signo es M=0110
C2
Ninguna operacin 4
1110 1110 Desplazar Producto a la derecha
1101 1100 0 Desplazar Producto a la derecha
1011 1000 1 Producto
izq
Producto
izq
+Multiplicando 3
0001 1000 1 Desplazar Producto a la derecha
Ninguna operacin 2
0011 0001 1 Desplazar Producto a la derecha
0110 0011 0 Producto
izq
Producto
izq
- Multiplicando 1
0000 0011 0 1010 Valores iniciales 0
Producto Multiplicando Paso Iteracin
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.
Circuitos para multiplicacin y divisin de nmeros en coma fija
30
En vez de ejecutar la multiplicacin a travs de un proceso iterativo de sumas y
desplazamientos regulado por un controlador secuencial, el producto se puede
realizar a partir de un sumador de mltiples sumandos (los productos parciales)
convenientemente organizados.
Para construir multiplicadores de altas velocidades caben dos posibilidades:
Sumar los productos parciales rpidamente.
Reducir el nmero de productos parciales que hay que sumar.
Para sumar los productos parciales ms rpido se puede recurrir por ejemplo a:
Las matrices de sumadores.
Los sumadores en rbol.
Para reducir el nmero de productos parciales se puede recurrir por ejemplo a:
Multiplicadores en base mayor que 2 (normalmente en base 4).
Recodificacin de Booth utilizando grupos solapados de 3 ms bits.
Otra tcnica: guardar todos los posibles resultados en una ROM.
La ROM tendra 2
2n
posiciones de 2n bits cada una!
5. Circuitos para multiplicacin rpida
Circuitos para multiplicacin y divisin de nmeros en coma fija
31
Multiplicar consiste en sumar varios productos
parciales desplazados.
Primer enfoque para multiplicar rpidamente:
1) Calcular los productos parciales mediante
puertas AND
2) Sumar dichos productos parciales
mediante sumadores tradicionales.
Pega: retardo total grande.
Para mejorar las prestaciones del circuito,
pueden utilizarse otros enfoques:
Matriz de CSA.
rbol de Wallace.
rbol de Dadda.
Tambin es posible multiplicar nmeros con
signo:
Multiplicador de Pezaris.
Multiplicador de Baugh-Wooley.
Matriz de sumadores con acarreo propagado
Circuitos para multiplicacin y divisin de nmeros en coma fija
32
La operacin de divisin de nmeros en coma fija no suele estar contemplada
directamente por las UAL, sino que se suele realizar mediante circuitos
especficos:
Construir un circuito divisor rpido es an ms complicado que en el caso del
multiplicador.
La divisin se puede realizar en la UAL mediante una secuencia de sumas,
restas, comparaciones y desplazamientos controlados por la unidad de
control (UC), si bien no resulta demasiado eficiente.
La divisin puede realizarse tambin mediante un programa en ensamblador
que conste de un bucle con una secuencia de sumas, restas, comparaciones
y desplazamientos, aunque esto es mucho menos eficiente an.
Antes de dividir, los circuitos deben comprobar obligatoriamente si el divisor
es igual o distinto de 0 para evitar desbordamientos.
Terminologa de la divisin: D / d =C d x C +R =D
D: dividendo.
d: divisor.
C: cociente.
R: resto.
6. Divisin binaria en coma fija
Circuitos para multiplicacin y divisin de nmeros en coma fija
33
Es fcil elegir cada dgito del cociente, ya que slo puede valer 0 1.
Si el dividendo parcial es mayor o igual que el divisor, el siguiente
dgito del cociente es 1, si no es 0.
112 8
0 14
1 1 1 0 0 0 0 1 0 0 0
1 0 0 0 1 1 1 0
0 1 1 0 0
1 0 0 0
0 1 0 0 0
1 0 0 0
0 0 0 0 0
0 0 0 0
0 0 0 0
cociente
resto
divisor
dividendo
-
-
-
-
Divisin binaria en coma fija
Circuitos para multiplicacin y divisin de nmeros en coma fija
34
La divisin es una operacin costosa en tiempo de ejecucin. Por tanto, es
aconsejable evitar las multiplicaciones en los programas siempre que sea posible.
Si el divisor es una constante conocida en tiempo de compilacin (o ensamblaje),
el compilador (o ensamblador) puede sustituir la divisin por otras operaciones.
Cuando el divisor es una constante potencia de 2, el cociente de la divisin se
puede obtener mediante por un desplazamiento del dividendo hacia la derecha
(esto es cierto slo para nmeros en binario puro!).
Si el divisor es 2
k
, el cociente se obtiene desplazando el dividendo k lugares a
la derecha.
Los bits sobrantes (parte fraccionaria del resultado) constituiran el resto de la
divisin entera, convenientemente escalado por 2
k
.
Ejemplo: 1101001
2
/ 2
3
cociente =1101
2
, resto =001
2
Si el divisor es una constante que no es potencia de 2, el clculo es complicado.
7. Divisin por un valor constante
0
0
1 - n
1 - n
2 a ........ 2 a N + + =
m 0
0
m 1 - n
1 - n
m
2 a ........ 2 a
2
N

+ + =
Circuitos para multiplicacin y divisin de nmeros en coma fija
35
8. Divisin con restauracin
En primer lugar se presentar un algoritmo bsico para dividir nmeros en
binario puro (sin signo) de n bits.
A continuacin se presentar un circuito que permite realizar la operacin
utilizando dicho algoritmo.
Seguidamente se presentar una versin optimizada del algoritmo, con el
correspondiente circuito.
Se incluir una tercera versin del algoritmo an ms optimizada acompaada
del correspondiente circuito.
Finalmente se indicarn las modificaciones que ser preciso introducir en los
circuitos para poder dividir nmeros con signo.
Los circuitos que vamos a ver a continuacin se basan en:
Un sumador/restador, que puede ser el de la UAL.
Varios registros de desplazamiento.
Un circuito secuencial de control, que puede ser parte de la UC.
Circuitos para multiplicacin y divisin de nmeros en coma fija
36
Divisin con restauracin: 1 versin
La divisin se realizar ms o menos igual que como se hace con lpiz y papel.
Ser un proceso iterativo de n+1 ciclos, en cada uno de los cuales se realizarn
las siguientes operaciones:
1. Se resta el dividendo parcial menos el divisor. Si la resta es positiva seguimos
por el paso 2, y si es negativa vamos al paso 3.
2. Resta positiva: el dividendo parcial cabe en el divisor. Por tanto, se aade un 1
al cociente, y se desplaza el mismo un lugar a la derecha. Ir a 4.
3. Resta negativa: el dividendo parcial no cabe en el divisor. Por tanto, se aade
un 0 al cociente y se desplaza el mismo un lugar a la derecha. Se restaura el
dividendo parcial sumndole el divisor. Ir a 4.
4. Se desplaza el divisor un lugar a la derecha.
Circuitos para multiplicacin y divisin de nmeros en coma fija
37
Circuitera necesaria:
Un registro de 2n bits que inicialmente contendr el dividendo.
Un registro de 2n bits capaz de realizar desplazamientos unitarios hacia la derecha
para el divisor.
Un registro de n bits capaz de realizar desplazamientos unitarios hacia la izquierda
para el cociente.
Un contador de 0 a n+1 para contar el nmero de iteraciones.
Un sumador / restador de 2n bits.
Un controlador para generar la secuencia de seales necesaria.
Circuito para n =32 bits con
las conexiones y seales de
control necesarias.
Divisin con restauracin: 1 versin
64-bit ALU
Control
test
Quotient
Shift left
Remainder
Write
Divisor
Shift right
64 bits
64 bits
32 bits
Circuitos para multiplicacin y divisin de nmeros en coma fija
38
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
Divisin con restauracin: 1 versin
64-bit ALU
Control
test
Quotient
Shift left
Remainder
Write
Divisor
Shift right
64 bits
64 bits
32 bits
Ejercicio propuesto: dibujar el diagrama de estados del controlador del circuito.
Inicio
RestoResto-Divisor
Resto <0? No S
No
S
Desplazar Cociente 1 bit
hacia la izquierda
Cociente
0
1
RestoResto+Divisor
Desplazar Cociente 1 bit
hacia la izquierda
Cociente
0
0
ContadorContador+1
Contador=n+1?
Fin
Desplazar Divisor 1 bit
hacia la derecha
Circuitos para multiplicacin y divisin de nmeros en coma fija
39
Ejemplo: n=4, dividir D=1010
2
=10
10
por d=0011
2
=3
10
0000 0001 Resto Resto - Divisor 5
0000 0011 Desplazar Divisor a la derecha
0011 Resto0sll Cociente, Cociente
0
=1
0000 0100 Resto Resto - Divisor 4
0001 Resto0sll Cociente, Cociente
0
=1
0000 0001 0000 0001 0011 Desplazar Divisor a la derecha
0000 0110 Desplazar Divisor a la derecha
0000 1010 0000 Resto<0+Divisor, sll Cociente, Cociente
0
=0
1111 1110 Resto Resto - Divisor 3
0000 1100 Desplazar Divisor a la derecha
0000 1010 0000 Resto<0+Divisor, sll Cociente, Cociente
0
=0
1111 0010 Resto Resto - Divisor 2
0001 1000 0001 Desplazar Divisor a la derecha
0000 1010 0000 Resto<0+Divisor, sll Cociente, Cociente
0
=0
1101 0000 Resto Resto - Divisor 1
0000 1010 0011 0000 0000 Valores iniciales 0
Resto Divisor Cociente Paso Iteracin
Divisin con restauracin: 1 versin
Circuitos para multiplicacin y divisin de nmeros en coma fija
40
En el circuito anterior sucede que:
La mitad de los bits del divisor no contienen informacin til.
Como consecuencia de lo anterior, tambin sobra la mitad de la UAL, pues
est sumando y/o restando en cada paso el doble de datos de lo estrictamente
necesario.
Por tanto, se ide un algoritmo similar al anterior, pero sin duplicar el tamao
del divisor, y utilizando un sumador / restador de n bits.
Puesto que las sumas y restas son de n bits, el registro Resto estar dividido en
dos mitades (Resto
izq
: mitad izquierda; Resto
der
: mitad derecha; Resto: registro
completo).
En cada iteracin se suma y/o resta slo sobre la mitad izquierda.
Los desplazamientos se realizan sobre el registro completo.
Deja de ser necesario desplazar el registro Divisor.
Sigue siendo preciso desplazar el registro Cociente para escribir en su bit 0 el
nuevo dgito calculado en cada paso.
El resto queda en la mitad izquierda del registro Resto.
Nunca puede haber un 1 en el primer dgito del cociente: por consiguiente,
pueden reordenarse el desplazamiento y la resta de forma que se elimine una
iteracin del algoritmo.
Divisin con restauracin: 2 versin
Circuitos para multiplicacin y divisin de nmeros en coma fija
41
Circuitera necesaria:
Un registro de n bits para el divisor.
Un registro de n bits capaz de realizar desplazamientos lgicos unitarios hacia la
izquierda para el cociente.
Un sumador / restador de n bits.
Un registro de 2n bits para el resto, que pueda cargarse en paralelo en una mitad
dejando intacta la otra mitad; este registro admitir desplazamientos lgicos unitarios
del registro completo hacia la izquierda.
Un contador de 0 a n para contar el nmero de iteraciones.
Un controlador para generar la secuencia de seales necesaria.
Circuito para n =32 bits con
las conexiones y seales de
control necesarias.
Divisin con restauracin: 2 versin
Control
test
Quotient
Shift left
Write
32bits
64bits
32bits
Shift left
Divisor
32-bit ALU
Remainder
Circuitos para multiplicacin y divisin de nmeros en coma fija
42
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
Control
test
Quotient
Shift left
Write
32bits
64bits
32bits
Shift left
Divisor
32-bit ALU
Remainder
Divisin con restauracin: 2 versin
Ejercicio propuesto: dibujar el diagrama de estados del controlador del circuito.
Inicio
Desplazar Resto 1 bit
hacia la izquierda
Resto
izq
Resto
izq
-Divisor
Resto <0? No S
No
S
Desplazar Resto 1 bit
hacia la izquierda
Desplazar Cociente 1 bit
hacia la izquierda
Cociente
0
1
Resto
izq
Resto
izq
+Divisor
Desplazar Resto 1 bit
hacia la izquierda
Desplazar Cociente 1 bit
hacia la izquierda
Cociente
0
0
ContadorContador+1
Contador=n?
Desplazar Resto
izq
1 bit
hacia la derecha
Fin
Circuitos para multiplicacin y divisin de nmeros en coma fija
43
Ejemplo: n=4, dividir D=1010
2
=10
10
por d=0011
2
=3
10
Divisin con restauracin: 2 versin
0011
0011
0001

0000

0000

0000
Cociente
0000 1010 0011 Valores iniciales 0
0001 0100 Desplazar Resto a la izquierda
0001 0000 Desplazar Resto
izq
a la derecha Ajuste final
0010 0000 Resto0sll Resto, sll Cociente, Cociente
0
=1
0001 0000 Resto
izq
Resto
izq
Divisor 4
0100 0000 Resto0sll Resto, sll Cociente, Cociente
0
=1
0010 0000 Resto
izq
Resto
izq
Divisor 3
0101 0000 Resto<0+Divisor, sll Resto, sll Cociente, Cociente
0
=0
1111 1000 Resto
izq
Resto
izq
Divisor 2
0010 1000 Resto<0+Divisor, sll Resto, sll Cociente, Cociente
0
=0
1110 0100 Resto
izq
Resto
izq
Divisor 1
Resto Divisor Paso Iteracin
Circuitos para multiplicacin y divisin de nmeros en coma fija
44
En el circuito anterior sucede que:
Al principio, el registro Resto est completamente ocupado.
A medida que van realizndose pasos del algoritmo, parte del contenido del
registro Resto comienza a estar desaprovechado.
Segn realizamos pasos, obtenemos los bits del cociente uno a uno.
El espacio desaprovechado del registro Resto es exactamente igual que el
nmero de bits del cociente que tenemos calculados en cada instante.
Por tanto, se incorpor una mejora al circuito, de forma que el registro Cociente
desaparece.
El dividendo se carga inicialmente en la mitad derecha del registro Resto.
En cada iteracin, cuando obtengamos un bit del cociente, lo almacenaremos
en el bit menos significativo del registro Resto.
Al final el cociente queda en la mitad menos significativa del registro Resto,
mientras que el resto queda en la mitad ms significativa de dicho registro.
Divisin con restauracin: 3 versin
Circuitos para multiplicacin y divisin de nmeros en coma fija
45
Circuitera necesaria:
Un registro de n bits para el divisor.
Un sumador / restador de n bits.
Un registro de 2n bits para el resto y el cociente, que pueda cargarse en paralelo en
su mitad izquierda dejando intacta la mitad derecha, o cargarse en paralelo en su
mitad derecha dejando intacta su mitad izquierda; este registro admitir
desplazamientos lgicos unitarios hacia la izquierda del registro completo.
Un contador de 0 a n para contar el nmero de iteraciones.
Un controlador para generar la secuencia de seales necesaria.
Circuito para n =32 bits con
las conexiones y seales de
control necesarias.
Divisin con restauracin: 3 versin
Write
32bits
64bits
Shift left
Shift right
Remainder
32-bit ALU
Divisor
Control
test
Circuitos para multiplicacin y divisin de nmeros en coma fija
46
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
Divisin con restauracin: 3 versin
Write
32bits
64bits
Shift left
Shift right
Remainder
32-bit ALU
Divisor
Control
test
Ejercicio propuesto: dibujar el diagrama de estados del controlador del circuito.
Inicio
Desplazar Resto 1 bit
hacia la izquierda
Resto
izq
Resto
izq
-Divisor
Resto <0? No S
No
S
Desplazar Resto 1 bit
hacia la izquierda
Resto
0
1
Resto
izq
Resto
izq
+Divisor
Desplazar Resto 1 bit
hacia la izquierda
Resto
0
0
ContadorContador+1
Contador=n?
Desplazar Resto
izq
1 bit
hacia la derecha
Fin
Circuitos para multiplicacin y divisin de nmeros en coma fija
47
Ejemplo: n=4, dividir D=1010
2
=10
10
por d=0011
2
=3
10
Divisin con restauracin: 3 versin
0000 1010 0011 Valores iniciales 0
0001 0100 Desplazar Resto a la izquierda
0001 0011 Desplazar Resto
izq
a la derecha Ajuste final
0010 0010
0010 0011
Resto0Desplazar Resto a la izquierda
Resto
0
=1
0001 0001 Resto
izq
Resto
izq
Divisor 4
0100 0000
0100 0001
Resto0Desplazar Resto a la izquierda
Resto
0
=1
0010 0000 Resto
izq
Resto
izq
Divisor 3
0010 1000
0101 0000
0101 0000
Resto<0Resto
izq
Resto
izq
+Divisor
Desplazar Resto a la izquierda
Resto
0
=0
1111 1000 Resto
izq
Resto
izq
Divisor 2
0001 0100
0010 1000
0010 1000
Resto<0Resto
izq
Resto
izq
+Divisor
Desplazar Resto a la izquierda
Resto
0
=0
1110 0100 Resto
izq
Resto
izq
Divisor 1
Resto Divisor Paso Iteracin
Circuitos para multiplicacin y divisin de nmeros en coma fija
48
Divisin con restauracin
Los algoritmos y circuitos mostrados dividen nmeros dados en binario puro.
Puede hacerse divisin con restauracin para nmeros en complemento a 2,
aunque el algoritmo es complicado.
Divisin de nmeros en complemento a 2: se puede hacer pasando los
operandos a positivos antes de hacer la divisin, y ajustando los signos del cociente
y/o el resto si es preciso:
Si el signo del dividendo y el del divisor coinciden, el cociente es positivo, y en
caso contrario es negativo.
El signo del resto es el mismo que el del dividendo.
Circuitos para multiplicacin y divisin de nmeros en coma fija
49
MIPS
La multiplicacin y la divisin emplean dos registros especiales para guardar
los resultados: Hi y Lo.
En la multiplicacin, la parte ms significativa del resultado queda en Hi y la
menos significativa en Lo.
En la divisin, el cociente queda en Lo y el resto en Hi.
Instrucciones de multiplicacin:
Con signo: mult.
Sin signo: multu.
Instrucciones de divisin:
Con signo: div.
Sin signo: divu.
MC68000:
Multiplicacin (muls, mulu): operandos de 16 bits, resultado de 32 bits.
Divisin (divs, divu): dividendo de 32 bits, divisor de 16 bits, cociente de 16
bits, resto de 16 bits.
9. Multiplicacin y divisin en ensamblador

Você também pode gostar