Estructura y tecnología de computadores.
description
Transcript of Estructura y tecnología de computadores.
-
Universidad Rey Juan Carlos
ESTRUCTURA Y TECNOLOGA DE ESTRUCTURA Y TECNOLOGA DE COMPUTADORESCOMPUTADORES
Circuitos para multiplicacin ydivisin de nmeros en coma fija
Luis Rincn Crcoles
-
Circuitos para multiplicacin y divisin de nmeros en coma fija
2
ProgramaBibliografa.
1. Multiplicacin binaria en coma fija.2. Multiplicacin por una constante.3. Multiplicacin por suma - desplazamiento.4. Multiplicacin por grupos solapados.5. Divisin binaria en coma fija.6. Divisin por una constante.7. Divisin con restauracin.8. 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
126
72
1 1 0 01 1 0
0 0 0 01 1 0 0
1 1 0 0 1 0 0 1 0 0 064 + 8 = 72
multiplicando
resultado
A
B
PRODUCTOBINARIO
() 0 1
0 0 0
1 0 1
multiplicador
Productos parciales
Multiplicacin binaria en coma fija
M3 M2 M1 M0m2 m1 m0
M3m0 M2 m0 M1 m0 M0 m0M3m1 M2 m1 M1 m1 M0 m1
M3m2 M2 m2 M1 m2 M0 m2R6 R5 R4 R3 R2 R1 R0
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=101001102=16610 por m=000110012=25100000000010100110 M*m0*20 = M*1: M sin desplazar
+ 0000000000000000 M*m1*21 = 0+ 0000000000000000 M*m2*22 = 0+ 0000010100110000 M*m3*23 = M*8: M desplazado 3 lugares+ 0000101001100000 M*m4*24 = M*16: M desplazado 4 lugares+ 0000000000000000 M*m5*25 = 0+ 0000000000000000 M*m6*26 = 0+ 0000000000000000 M*m7*27 = 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 2k, se desplazar el multiplicando k lugares a la izquierda.
Ejemplo: 11010012 23 = 11010010002
2. Multiplicacin por un valor constante
00
1-n1-n 2a........2aN ++=
m00
m1-n1-n
m 2a........2a2N ++ ++=
-
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=101001102=16610 por m=000110012=2510Descomponemos 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 versinCircuitera 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
MultiplierShift right
ProductWrite
MultiplicandShift 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
MultiplierShift right
ProductWrite
MultiplicandShift 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 Multiplicador3. Producto 04. Contador 0
Ejercicio: dibujar el diagrama de estados del controlador del circuito.
Producto Producto +Multiplicando
Inicio
Bit 0 delMultiplicador = 0?
Desplazamiento del registro Multiplicando a 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=10102=1010 por m=00112=310
Ninguna operacin41010 0000Desplazar Multiplicando a la izqda.
0001 11100000Desplazar Multiplicador a la derecha
0000Desplazar Multiplicador a la derecha0101 0000Desplazar Multiplicando a la izqda.Ninguna operacin30000Desplazar Multiplicador a la derecha0010 1000Desplazar Multiplicando a la izqda.
0001 1110Producto Producto + Multiplicando20001Desplazar Multiplicador a la derecha0001 0100Desplazar Multiplicando a la izqda.
0000 1010Producto Producto + Multiplicando10000 00000000 10100011Valores iniciales0
ProductoMultiplicandoMultiplicadorPasoIteracin
-
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 (Productoizq: mitad izquierda; Productoder: 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 versinCircuitera 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. MultiplierShift 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 versinOperaciones de la fase de inicio:
1. Iniciar el registro Multiplicando
2. Iniciar el registro Multiplicador
3. Producto 0
4. Contador 0
MultiplierShift 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.
Productoizq Productoizq +Multiplicando
Inicio
Bit 0 delMultiplicador = 0?
Desplazamiento del registro Producto a 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=10102=1010 por m=00112=310
Ninguna operacin40 0001 1110Desplazar Producto a la derecha0001 11100000Desplazar Multiplicador a la derecha
0000Desplazar Multiplicador a la derecha0 0011 1100Desplazar Producto a la derecha
Ninguna operacin30000Desplazar Multiplicador a la derecha
0 0111 1000Desplazar Producto a la derecha0 1111 0000Productoizq Productoizq + Multiplicando2
0001Desplazar Multiplicador a la derecha0 0101 0000Desplazar Producto a la derecha0 1010 0000Productoizq Productoizq + Multiplicando10 0000 000010100011Valores iniciales0
ProductoMultiplicandoMultiplicadorPasoIteracin
-
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 versinCircuitera 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.
ControltestWrite
32 bits
64 bits
Shift rightProduct
Multiplicand
32-bit ALU
-
Circuitos para multiplicacin y divisin de nmeros en coma fija
20
Multiplicacin por S D: 3 versinOperaciones de la fase de inicio:1. Iniciar el registro Multiplicando2. Iniciar el registro Producto (mitad izquierda a 0, mitad derecha con el multiplicador)3. Contador 0
Productoizq Productoizq +Multiplicando
Inicio
Bit 0 delProducto = 0?
Desplazamiento del registro Producto a la derecha
Contador = n ?
S
1
0
Contador Contador+1
No
Fin
ControltestWrite
32 bits
64 bits
Shift rightProduct
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=10102=1010 por m=00112=310
Ninguna operacin40001 1110Desplazar Producto a la derecha
0 0011 1100Desplazar Producto a la derechaNinguna operacin3
0 0111 1000Desplazar Producto a la derecha0 1111 0001Productoizq Productoizq + Multiplicando20 0101 0001Desplazar Producto a la derecha0 1010 0011Productoizq Productoizq + Multiplicando10 0000 00111010Valores iniciales0
ProductoMultiplicandoPasoIteracin
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
-
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 ventana o grupo de nbits 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
... = 2k+1-2jjj+1k-1k
0... 11...110
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 delregistro producto menos el multiplicandoSi 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)11Restar (final de cadena de unos)01Sumar (inicio de cadena de unos)10Nada (en medio de cadena de ceros)00OperacinMultiplicadori-1Multiplicadori
-
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 01001110C2
Ejemplo: recodificacin del nmero 11100011C2
Los nmeros en binario puro se recodifican aadiendo un bit a 0 a la izquierda del todo (ejercicio: probarlo).
Nmero recodificadoNmero original 01110010
01 -10010-1
Nmero recodificadoNmero original 11000111
-10 0100-10
-
Circuitos para multiplicacin y divisin de nmeros en coma fija
26
Ejemplo: multiplicar M=10100110C2=-9010 por m=00011001C2=2510Recodificamos el multiplicador y realizamos la operacin:
0000000001011010 M*m0*(-20) = -1*M+ 1111111101001100 M*m1*21 = 2*M+ 0000000000000000 M*m2*22 = 0+ 0000001011010000 M*m3*(-23) = -8*M+ 0000000000000000 M*m4*24 = 0+ 1111010011000000 M*m5*25 = 32*M+ 0000000000000000 M*m6*26 = 0+ 0000000000000000 M*m7*27 = 0
1111011100110110 M*m
Algoritmo de Booth
Multiplicador recodificadoMultiplicador original 10011000
-10 10-1010
-
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).
ControltestWrite
32 bits
64 bits
Shift rightProduct
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 Multiplicando2. Iniciar el registro Producto (mitad izquierda a 0, mitad derecha con el multiplicador, bit p
-1 a 0)3. Contador 0
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.
ControltestWrite
32 bits
64 bits
Shift rightProduct
Multiplicand
32-bit ALU
Ejercicio: dibujar el diagrama de estados del controlador del circuito.
Productoizq Productoizq -Multiplicando
Inicio
p0p-1 ?
Desplazar Producto # p-1 a la derecha
Contador = 0 ?
Fin
0011
S
Contador Contador+1
10 01
Productoizq Productoizq +Multiplicando
No
-
Circuitos para multiplicacin y divisin de nmeros en coma fija
29
Algoritmo de Booth Ejemplo: n=4, multiplicar M=1010C2= -610 por m=0011C2=310
El multiplicando cambiado de signo es M=0110C2
Ninguna operacin41110 1110Desplazar Producto a la derecha
1101 1100 0Desplazar Producto a la derecha1011 1000 1Productoizq Productoizq + Multiplicando30001 1000 1Desplazar Producto a la derecha
Ninguna operacin20011 0001 1Desplazar Producto a la derecha0110 0011 0Productoizq Productoizq - Multiplicando10000 0011 01010Valores iniciales0
ProductoMultiplicandoPasoIteracin
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
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 = DD: dividendo.d: divisor.C: cociente.R: resto.
5. Divisin binaria en coma fija
-
Circuitos para multiplicacin y divisin de nmeros en coma fija
31
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 80 14
1 1 1 0 0 0 0 1 0 0 0 1 0 0 0 1 1 1 00 1 1 0 0
1 0 0 00 1 0 0 0
1 0 0 00 0 0 0 0
0 0 0 00 0 0 0
cociente
resto
divisordividendo-
-
-
-
Divisin binaria en coma fija
-
Circuitos para multiplicacin y divisin de nmeros en coma fija
32
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 2k, 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 2k.
Ejemplo: 11010012 / 23 cociente = 11012, resto = 0012 Si el divisor es una constante que no es potencia de 2, el clculo es complicado.
6. Divisin por un valor constante
00
1-n1-n 2a........2aN ++= m00m1-n1-nm 2a........2a2
N
++=
-
Circuitos para multiplicacin y divisin de nmeros en coma fija
33
7. 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
34
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
35
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
Controltest
QuotientShift left
RemainderW rite
DivisorShift right
64 bits
64 bits
32 bits
-
Circuitos para multiplicacin y divisin de nmeros en coma fija
36
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 04. Contador 0
Divisin con restauracin: 1 versin
64-bit ALU
Controltest
QuotientShift left
RemainderW rite
DivisorShift 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 bithacia la izquierda
Cociente01
RestoResto+DivisorDesplazar Cociente 1 bit
hacia la izquierdaCociente00
ContadorContador+1
Contador=n+1?
Fin
Desplazar Divisor 1 bithacia la derecha
-
Circuitos para multiplicacin y divisin de nmeros en coma fija
37
Ejemplo: n=4, dividir D=10102=1010 por d=00112=310
0000 0001Resto Resto - Divisor50000 0011Desplazar Divisor a la derecha
0011Resto0 sll Cociente, Cociente0=1
0000 0100Resto Resto - Divisor40001Resto0 sll Cociente, Cociente0=1
0000 00010000 00010011Desplazar Divisor a la derecha
0000 0110Desplazar Divisor a la derecha0000 10100000Resto
-
Circuitos para multiplicacin y divisin de nmeros en coma fija
38
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 (Restoizq: mitad izquierda; Restoder: 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
39
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 mitaddejando 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
Controltest
QuotientShift left
Write
32 bits
64 bits
32 bits
Shift left
Divisor
32-bit ALU
Remainder
-
Circuitos para multiplicacin y divisin de nmeros en coma fija
40
Operaciones de la fase de inicio:1. Iniciar el registro Divisor2. Iniciar el registro Resto (mitad inferior con el dividendo, mitad superior con todos sus bits a 0)3. Cociente 04. Contador 0
Controltest
QuotientShift left
Write
32 bits
64 bits
32 bits
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 bithacia la izquierda
RestoizqRestoizq-Divisor
Resto < 0?No S
No
S
Desplazar Resto 1 bithacia la izquierda
Desplazar Cociente 1 bithacia la izquierda
Cociente01
RestoizqRestoizq+DivisorDesplazar Resto 1 bit
hacia la izquierdaDesplazar Cociente 1 bit
hacia la izquierdaCociente00
ContadorContador+1
Contador=n?
Desplazar Restoizq 1 bithacia la derecha
Fin
-
Circuitos para multiplicacin y divisin de nmeros en coma fija
41
Ejemplo: n=4, dividir D=10102=1010 por d=00112=310Divisin con restauracin: 2 versin
00110011
0001
0000
0000
0000
Cociente0000 10100011Valores iniciales00001 0100Desplazar Resto a la izquierda
0001 0000Desplazar Restoizq a la derechaAjuste final0010 0000Resto0 sll Resto, sll Cociente, Cociente0=10001 0000Restoizq Restoizq Divisor40100 0000Resto0 sll Resto, sll Cociente, Cociente0=10010 0000Restoizq Restoizq Divisor30101 0000Resto
-
Circuitos para multiplicacin y divisin de nmeros en coma fija
42
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
43
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 admitirdesplazamientos 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
32 bits
64 bits
Shift leftShift right
Remainder
32-bit ALU
Divisor
Controltest
-
Circuitos para multiplicacin y divisin de nmeros en coma fija
44
Operaciones de la fase de inicio:1. Iniciar el registro Divisor2. Iniciar el registro Resto (mitad izquierda a 0, mitad derecha con el dividendo)3. Contador 0
Divisin con restauracin: 3 versin
Write
32 bits
64 bits
Shift leftShift right
Remainder
32-bit ALU
Divisor
Controltest
Ejercicio propuesto: dibujar el diagrama de estados del controlador del circuito.
Inicio
Desplazar Resto 1 bithacia la izquierda
RestoizqRestoizq-Divisor
Resto < 0?No S
No
S
Desplazar Resto 1 bithacia la izquierda
Resto01
RestoizqRestoizq+DivisorDesplazar Resto 1 bit
hacia la izquierdaResto00
ContadorContador+1
Contador=n?
Desplazar Restoizq 1 bithacia la derecha
Fin
-
Circuitos para multiplicacin y divisin de nmeros en coma fija
45
Ejemplo: n=4, dividir D=10102=1010 por d=00112=310Divisin con restauracin: 3 versin
0000 10100011Valores iniciales00001 0100Desplazar Resto a la izquierda
0001 0011Desplazar Restoizq a la derechaAjuste final
0010 00100010 0011
Resto0 Desplazar Resto a la izquierdaResto0=1
0001 0001Restoizq Restoizq Divisor4
0100 00000100 0001
Resto0 Desplazar Resto a la izquierdaResto0=1
0010 0000Restoizq Restoizq Divisor3
0010 10000101 00000101 0000
Resto
-
Circuitos para multiplicacin y divisin de nmeros en coma fija
46
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
47
MIPSLa 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.
8. Multiplicacin y divisin en ensamblador