estructura y tecnología de computadores

47
Universidad Rey Juan Carlos ESTRUCTURA Y TECNOLOGÍA DE ESTRUCTURA Y TECNOLOGÍA DE COMPUTADORES COMPUTADORES Circuitos para multiplicación y división de números en coma fija Luis Rincón Córcoles

Upload: nasio138

Post on 27-Sep-2015

238 views

Category:

Documents


1 download

DESCRIPTION

Estructura y tecnología de computadores. Materiales de la asignatura de Informatica industrial de la titulación Grado en Ingenieria de tecnologias industriales.

TRANSCRIPT

  • 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