You are on page 1of 5

Implementacin en VHDL de un mdulo de multiplicacin basado en o o o algoritmos de Booth

A. Snchez, E. Baz, I. Gutirrez, R. Nava, S. Garc a e a Instituto Tecnolgico de Orizaba o Divisin de Estudios de posgrado o Orizaba, Veracruz Mxico e (ereje123, baz e, kerim ma, rnc eng03, sgbzona)@hotmail.com

Resumen
En este trabajo se analizan e implementan en VHDL dos algoritmos de multiplicacin: el primero es el algoo ritmo clsico, basado en sumas y corrimientos, en donde a el nmero de productos parciales generados es igual al u nmero de bits del multiplicador. El segundo algoritmo que se estudia, fue propuesto por Booth en 1951, con el que se consigue reducir el numero de productos parciales generados, gracias a un sistema de codicacin en o donde se analizan series de unos o ceros consecutivos. Se analizarn tambin las ventajas y desventajas de cada a e uno de los algoritmos.

completa de dos palabras de cuatro bits. a3 b3 b0 a3 b1 a2 b2 a1 b3 a0 p3 a2 b2 b0 a2 b1 a1 b2 a0 p2 a1 b1 b0 a1 b1 a0 a0 b0 b0 a0

b1 a3 b2 a2 b3 a1 p4

p7

b3 a3 p6

b2 a3 b3 a2 p5

p1

p0

Cuadro 1: Algoritmo de la multiplicacin clsica o a Al igual que para la multiplicacin decimal, el primer o bit del multiplicador b0 se combina con todos los bits del multiplicando para formar el primer producto parcial. Los otros productos parciales se general de igual manera y el producto nal es la suma de los productos parciales. El bit p7 considera el posible acarreo resultante de la suma de productos parciales. Dentro de la multiplicacin binaria, cuando se requiere o hacer multiplicaciones con nmeros negativos (en formau to de complemento a 2) se debe hacer una consideracin o especial: los bits que se encuentran despus del bit de e signo son importantes y deben tomarse en cuenta. De manera que el tamao de la palabra debe aumentar por n lo menos al doble de su tamao original. Por ejemplo, n para expresar el numero -6 en cuatro bits se hace el complemento a 2 del numero 6 y se obtiene 1010, pero el bit ms signicativo en este momento expresa el signo y si a se va a utilizar como operando de una multiplicacin o hay que utilizar, por lo menos, los cuatro bits que se encuentran adelante del bit de signo, de tal forma que la representacin completa ser: 11111010 o a Teniendo en cuenta esta consideracin, el proceso de o multiplicacin con y sin signo es idntico pero el tamao o e n de la palabra se duplica. La mejor manera de expresar el procedimiento de la multiplicacin para que pueda ser o implementado en un sistema digital es la siguiente: se analizarn uno por uno los bits del multiplicador del mea 1

1.

Introduccin o

La implantacin de operaciones bsicas, como la mulo a tiplicacin, en hardware es de gran utilidad en aplicao ciones como procesamiento digital de seales, sistemas n de control, sistemas criptogrcos de informacin, etc. a o Debido a la velocidad de respuesta que requieren estos sistemas, es necesario construir multiplicadores que utilicen un algoritmo que optimice el tiempo en que se realiza la operacin. Aunque el algoritmo clsico cumple el a proposito bsico de obtener el producto de dos nmeros a u binarios, su desempeo en terminos de tiempo es muy n pobre. Su desventaja principal radica en el tiempo que toma realizar los productos parciales y ejecutar posteriormente la suma de ellos. El algoritmo de Booth por otra parte busca superar este inconveniente, desarrollando una serie de pasos que tienden a reducir el nmero u de productos parciales.

1.1.

Algoritmo clsico de multiplicacin a o

El algoritmo clsico de multiplicacin funciona bajo el a o conocido mtodo de la multiplicacin decimal. Consiste e o de un multiplicador a, un multiplicando b y un producto p = a b. El cuadro 1 muestra una multiplicacin o

nos signicativo (lsb) al ms signicativo (msb), cuando a el bit en cuestin sea uno, el producto parcial ser igual o a al multiplicando y adems se realizar un corrimiento de a a tal manera que el siguiente producto parcial quede adelantado una posicin; si el bit que se est analizando es o a cero, el producto parcial ser cero y no ser necesario ina a cluirlo en la suma, solamente hacer un corrimiento para que el siguiente producto parcial tambin quede adelane tado una posicin. Este es un ciclo que se realizar tantas o a veces como numero de bits tenga el multiplicador. El listado siguiente es el pseudocdigo del proceso: o
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

Si (bit 0 actual de B = 0 y bit 0 anterior de B = 1) Suma A con parte alta de B,poner resultado en parte alta de B Si (bit 0 actual de B = 1 y bit 0 anterior de B = 0) Resta A con parte alta de B,poner resultado en parte alta de B Desplaza B una posicion a la derecha Contador=Contador+1 Si Contador no es igual a no. de bits salta a Ciclo De lo contrario multiplicacion terminada

Carga multiplicando en registro A Carga multiplicador en parte baja de registro B Parte alta del registro B se carga con ceros Contador = 1 Ciclo Si (bit 0 de registro B = 1) Suma A con parte alta de B,coloca resultado en parte alta de B Desplaza el registro B una posicion a la derecha De lo contrario Desplaza el registro B una posicion a la derecha Contador = Contador +1 Si Contador no es igual a no. de bits salta a Ciclo De lo contrario multiplicacion terminada

Bits del multiplicador Bi Bi1 0 0 0 1 1 0 1 1

Digito Recodicado 0 1 -1 0

Operacin o 0 1 1 0 multiplicando multiplicando multiplicando multiplicando

Cuadro 2: recodicacin de d o gitos segn el algoritmo de u Booth

1.2.

Algoritmo de Booth

Como ya se ha visto, la multiplicacin se realiza con o dos operaciones bsicas: la suma y el desplazamiento a Implementacin o lgico. De estas dos operaciones, la suma es la que con- 2. o sume ms tiempo. El algoritmo de Booth pretende minia a mizar el nmero de sumas que se deben realizar durante 2.1. Algoritmo Clsico u el proceso de multiplicacin. Para ello toma en cuenta o La implementacin que se realizo es para un multio la igualdad. plicador de nmeros con signo. Esto ocasionar que al u a multiplicar palabras de n bits, el tamao de los registros n n1 n2 1 0 n1 2 +2 + ... + 2 + 2 = 2 (1) internos que se utilizarn sern de tamao 2n. Como a a n para sustituir cadenas de unos o ceros consecutivos. El convencin utilizaremos el trmino n para indicar el tao e algoritmo necesita como primer paso, convertir el mul- mao de la palabra original. Multiplicando y multiplin tiplicador en un numero recodicado bajo la forma de cador tendrn el mismo nmero de bits. a u d gitos con signo. Para realizar esta recodicacin es neo Un primer paso antes del inicio de iniciar la multiplicesario analizar los bits Bi y Bi1 y sustituir el bit de cacin es vericar el bit de signo del multiplicando y del o la posicin i segn muestra el cuadro 2 o u multiplicador y extenderlo para que quede una palabra Con esto se consigue que una cadena de n unos, que en de 2n bits. multiplicacin clsica requiere n sumas y n corrimientos o a La gura 1 muestra un diagrama a bloques del prohaga solamente dos sumas y n corrimientos. cedimiento de multiplicacin. Se coloca el multiplicando o El listado siguiente es el pseudocdigo del proceso o en un registro A y el multiplicador se coloca en un registro CF del doble de la longitud del multiplicador (la 1 Carga multiplicando en registro A parte alta se llena con ceros). El bloque de control ana2 Carga multiplicador en parte baja del registro B lizar el bit menos signicativo del registro B, si este a 3 La parte alta del registro B se carga con ceros es uno, realizar la suma de la parte alta del registro a 4 Contador = 1 CF mas el registro A y despus un corrimiento, si el bit e 5 6 Ciclo es cero, solamente realizar el desplazamiento. Despus a e 2

110111 001001 = 9

2.2.

Algoritmo de Booth

El algoritmo de Booth, gracias al anlisis que hace a de dos bits consecutivos puede identicar el signo de Figura 1: Proceso de multiplicacin utilizando algoritmo un nmero. Por lo tanto para esta implementacin el o u o clsico a multiplicador no se debe modicar como en el ejemplo anterior. de n ciclos (con n igual al numero de bits del multiplicador) el resultado queda disponible en los 2n bits de orden bajo del registro CF. Dentro de la implementacin realizada, se ocuparn o a algunos registros auxiliares: dos registros Signo A y Signo B de n bits que contendrn el signo de los operana dos, un registro C de 2n bits, inicializado con ceros que formar la parte alta de CF. Antes de entrar al ciclo de a sumas y corrimientos, el registro A, que no existe f sicamente, se formar mediante la concatenacin de Signo a o A con el dato A de entrada del circuito. El registro CF se llenar mediante una concatenacin de C con Signo Figura 2: Proceso de multiplicacin utilizando algoritmo a o o B y el dato de entrada B. de Booth Una vez que los datos a multiplicar se encuentran en los registros un ciclo for se encarga de coordinar las La gura 2 muestra el diagrama a bloques del proceso sumas que indique el multiplicador y los 2n corrimientos. de multiplicacin, el funcionamiento es muy similar al o Al salir del ciclo, el resultado esta disponible en los 2n de la multiplicacin clsica pero en este caso, el bloque o a bits de orden bajo del registro CF. Finalmente estos 2n Control debe revisar dos bits y decidir si se debe realizar bits se asignan a los pines de salida del circuito. una suma, una suma en complemento a dos o simpleEn el cuadro 3 se muestra el proceso de multiplicacin o mente un corrimiento. Adems, la presencia del bloque a para palabras de 3 bits: T se debe a que para este caso no solamente se realizan Multiplicar 3 3 sumas, ser necesario tambien hacer algunas restas y el a signo resultante de esas restas se debe considerar, para 3 = 011 3 = 101 que no se pierda se guarda en un registro T. Para la implementacin de este algoritmo es necesao rio hacer una pequea modicacin al dato que ser el n o a multiplicando, como se dijo anteriormente, el anlisis de booth hace que la identicacin del signo sea automtica, a pero ese anlisis solo se le hace al multiplicador, por lo a tanto hay que agregarle un bit al multiplicando para que su signo se extienda. Se necesitarn tambin algunos registros auxiliares, a e el registro Data A que se formar de la concatenacin a o del bit de signo del dato A con el propio dato A, el registro T que guardar el signo de la ultima suma o a resta realizada, el registro CF que en este caso se forma de la concatenacin de C con el dato B, y el registro X en o donde se guardar el bit menos signicativo del registro a CF cuando este sea desplazado. Cuadro 3: Proceso de multiplicacin para 3 3 o Para esta implementacin, el ciclo for que controla el o numero de corrimientos que se han realizado solo debe El resultado es un nmero negativo, realizando com- realizar n vueltas. Al salir del ciclo, el resultado estar en u a los 2n bits de orden bajo del registro CF. plemento a 2: 3

4.

Conclusiones

3.

Pruebas y Resultados

En este trabajo se han implementado dos algoritmos bsicos de multiplicacion. La arquitectura basada en el a algoritmo de booth resulta interesante debido a que el retardo inherente a las compuertas internas del FPGA es menor que con el algoritmo clsico, lo mismo sucede a con los tiempos de s ntesis e implementacin. El unico o inconveniente se presenta en el hecho de que el algoritmo de booth por ser ms elaborado, ocupa ms espacio a a f sico. Se prob el teorema de que el algoritmo de booth o optimiza el tiempo en que se realiza la multiplicacin. o El ahorro en tiempo se debe principalmente a que el algoritmo de booth no requiere que se duplique el tamao de la palabra de entrada para poder realizar muln tiplicaciones con signo. Se observ que estas implementaciones solo pueden o ser escaladas hasta 32 bits, despus de este l e mite, el diseo desborda la capacidad del FPGA utilizado. n

Se realizaron las s ntesis e implementaciones de ambos multiplicadores para diferentes tamaos de palabra hasn Anexo ta 32 bits. Se observ que el espacio ocupado dentro del 5. o FPGA siempre es mayor para el algoritmo de Booth, no a obstante, el tiempo de retardo interno de propagacin 5.1. Algoritmo Clsico o es menor. Los cuadros 4 y 5 contienen los resultados 1 library IEEE; obtenidos. 2 use IEEE.STD_LOGIC_1164.ALL;
3

Bits 2 4 8 16 32

Tiempo de S ntesis (min) Clsico Booth a 00:19.0 00:20.0 00:21.0 00:21.0 00:25.0 00:26.0 00:54.0 00:50.0 06:57.0 03:39.0

Tiempo de implementacin (min) o Clsico Booth a 00:35.5 00:35.4 00:37.3 00:37.6 00:45.6 00:47.0 01:26.4 01:24.6 08:40.2 05:18.7

4 5 6 7 8 9 10 11 12 13

use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity mul_clas_sign is generic (n:integer := 4); Port ( A: in std_logic_vector (n-1 downto 0); B: in std_logic_vector (n-1 downto 0); Prod: out std_logic_vector (2*n-1 downto 0)); end mul_clas_sign; architecture behv of mul_clas_sign is begin process(A, B) variable SignoA: std_logic_vector (n-1 downto 0); variable SignoB: std_logic_vector (n-1 downto 0); variable C: std_logic_vector (2*n-1 downto 0):=(others=>0); variable CF: std_logic_vector (4*n-1 downto 0); begin if A(n-1)=1 then SignoA:=(others=>1); else

Cuadro 4: Tiempos obtenidos para diferentes tamaos n de palabra

14 15 16 17 18 19 20

Bits 2 4 8 16 32

Porcentaje de LUTs Clsico a 0% 0% 2% 11 % 48 % Booth 0% 0% 3% 14 % 58 %

Retardo Mximo Ina terno (nS) Clsico Booth a 8.493 8.493 26.183 24.648 48.468 43.839 92.556 81.548 180.649 156.756

21 22 23 24 25 26 27 28 29 30

Cuadro 5: Indices de uso del FPGA

31 32 33 34

35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53

SignoA:=(others=>0); end if; if B(n-1)=1 then SignoB:=(others=>1); else SignoB:=(others=>0); end if; CF := C & SignoB & B; for i in 1 to 2*n loop if CF(0)=1 then CF(4*n-1 downto 2*n):= CF(4*n-1 downto 2*n)+(SignoA&A); end if; CF(4*n-1 downto 0):=0&CF(4*n-1 downto 1); end loop; Prod <= CF(2*n-1 downto 0); end process; end behv;

39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58

CF:=C&B; for i in 1 to n loop if (CF(0)=0 and x=1) then CF(2*n downto n):= CF(2*n downto n)+ DataA; elsif (CF(0)=1 and x=0) then CF(2*n downto n):= CF(2*n downto n)-DataA; end if; T:=CF(2*n); x:=CF(0); CF(2*n downto 0):=T&CF(2*n downto 1); end loop; Prod <= CF(2*n-1 downto 0); end process; end behv;

5.2.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38

Algoritmo de Booth

library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity mul_booth_f is generic (n:integer := 4); Port ( A: in std_logic_vector (n-1 downto 0); B: in std_logic_vector (n-1 downto 0); Prod: out std_logic_vector (2*n-1 downto 0)); end mul_booth_f; architecture behv of mul_booth_f is begin process(A, B) variable C: std_logic_vector (n downto 0):=(others=>0); variable CF: std_logic_vector (2*n downto 0); variable x,T: std_logic; variable DataA: std_logic_vector (n downto 0); begin if A(n-1)=1 then DataA:=1&A; else DataA:=0&A; end if; x:=0; T:=0;

You might also like