Diseño de Multiplicadores Paralelos de 16 bits en FPGAs

Anuncio
Diseño de Operadores Aritméticos en Punto
Flotante usando FPGAs
Gustavo E. Ordóñez-Fernández, Jaime Velasco-Medina, Mario E. Vera-Lizcano
Grupo de Bio-Nanoelectrónica, Escuela EIEE
Universidad del Valle, A.A. 25360, Cali, Colombia
E-mail: gustavoe, jvelasco, [email protected]
RESUMEN
Este artículo presenta la implementación en hardware de
operadores aritméticos para las operaciones de suma, resta,
multiplicación y división en punto flotante usando el formato
IEEE-754 de simple precisión. En muchas aplicaciones
basadas en procesadores embebidos se requiere que estos
tengan capacidad para realizar operaciones aritméticas de
punto flotante, lo cual es fundamental para alcanzar el buen
funcionamiento del sistema. Entonces las arquitecturas para
implementar en hardware la suma, resta, multiplicación y
división fueron diseñadas teniendo en cuenta los parámetros
de diseño tales como velocidad y área. En este caso, los
operadores aritméticos son diseñados usando las
megafunciones lpm_add_sub, lpm_mult y lpm_divide de
Altera y son simulados usando las herramientas Max+Plus
II y Quartus II versión 4.1sp2 Web Edition Full. Estos son
sintetizados sobre la FPGA EPF10K70RC240-4 de Altera.
1. INTRODUCCIÓN
La aritmética en punto flotante surge de la necesidad de
representar los números reales y enteros con un rango de
representación mayor que el que nos ofrece punto fijo. En la
representación en punto flotante, se dividen los n bits
disponibles para representar un dato, en 2 partes llamadas
mantisa M y exponente E. Considerando que la mantisa tiene
una longitud de p bits y que el exponente la tiene de q bits,
se cumple que n = p + q. En este contexto, la aritmética para
soportar números reales en los procesadores digitales se
denomina aritmética en punto flotante. Esta representa los
números en los cuales el punto decimal no está fijo, tal como
ocurre en los enteros. Los números con punto decimal
flotante pueden representar los números enteros, reales o
números mixtos. Un típico formato para representar un
número en punto flotante tiene tres partes: un bit de signo,
un exponente signado, y una mantisa [1].
Lo anterior es una descripción muy general de los
números en punto flotante, en la práctica se usan diferentes
formatos para representar estos y se deben especificar los
tamaños de cada uno de los campos de la representación de
un número en punto flotante de tal manera que exista un
compromiso adecuado entre el rango y la precisión para una
determinada cantidad de bits. En realidad estos dos
parámetros están restringidos a un rango y precisión
limitado, puesto que la cantidad de bits con que se va a
trabajar así lo determina.
En este contexto, este trabajo presenta los diseños de un
sumador/restador, un multiplicador y un divisor en punto
flotante para el estándar IEEE 754 de simple precisión (32
bits). En este caso, para el exponente se seleccionan 8 bits
con una representación sesgada (sesgo = 128: -128 ... +127),
se utiliza 1 bit para representar el signo de la mantisa y 23
bits para representar la mantisa (más un bit implícito).
El artículo esta organizado de la siguiente manera, en la
sección 2 se presenta una descripción de los algoritmos y las
arquitecturas en hardware para el diseño de un sumadorrestador, un multiplicador y un divisor en punto flotante de
32 bits usando el formato IEEE 754. En la sección 3 se
presentan los resultados de simulación y las tablas de
comparación para los diseños realizados, y en la sección 4 se
presentan las conclusiones y el trabajo futuro.
2. ARQUITECTURAS HARDWARE
En esta sección se presenta una breve descripción de
cada algoritmo y la arquitectura básica en hardware para un
sumador/restador, un multiplicador y un divisor en punto
flotante usando el formato IEEE 754 de simple precisión.
2.1 Sumador – restador en punto flotante
La operación aritmética de suma en punto flotante
requiere un análisis más detallado que la multiplicación y la
división, puesto que se deben ajustar los exponentes antes de
realizar la operación adecuadamente. En la Figura 1 se
muestra el algoritmo del sumador-restador en punto flotante.
El algoritmo para la operación de suma o resta en punto
flotante se puede resumir en las siguientes etapas [2] :
•
Comparar los exponentes de los dos números a sumar
(restar) y determinar el valor de la diferencia entre ellos
(una resta entre el mayor y el menor exponente). En este
caso, la idea es igualar los exponentes, pero al mayor de
ellos, y desplazar a la derecha la mantisa asociada al
menor exponente, tantas veces como lo indique el valor
de la diferencia entre exponentes.
•
Sumar (Restar) las mantisas.
•
Normalizar el resultado de la suma usando un
desplazamiento a la derecha e incrementando el
exponente, ó desplazando el resultado a la izquierda y
decrementando el exponente. En cada caso se debe
verificar las condiciones de desbordamiento a infinito
(overflow) o desbordamiento a cero (underflow).
•
Redondear la mantisa al número de bits apropiado, en el
caso de que no se pueda alcanzar el redondeo, el número
queda desnormalizado y se debe regresar a la etapa
anterior.
En la Figura 2 se muestra el diagrama de bloques del
sumador – restador en punto flotante [3].
Figura 2. Diagrama de bloques del sumador-restador en
punto flotante.
2.2 Multiplicador en punto flotante
Las operaciones aritméticas de multiplicación y
división en punto flotante son procesos mucho más sencillos
que la suma y la resta. En la Figura 3 se puede observar el
algoritmo de un multiplicador en punto flotante. En primer
lugar, en el caso de la multiplicación, si cualquiera de los
operandos es 0, entonces el resultado es 0.
El siguiente paso es sumar los exponentes. Si los
exponentes están representados en formato o forma sesgada,
la suma podría exceder el rango. Entonces se debe restar de
la suma anterior el valor del sesgo. Si el exponente del
producto esta dentro del rango apropiado, el paso siguiente
es multiplicar las mantisas teniendo en cuenta sus signos [4].
Esta multiplicación se realiza como en el caso de los enteros.
En este caso, el producto tendrá el doble de longitud del
multiplicando o el multiplicador y los bits extras se perderán
durante el redondeo. Es importante decir que la
normalización podría producir un desbordamiento a cero del
exponente. En la Figura 4 se presenta el diagrama de bloques
del multiplicador en punto flotante.
Figura 1. Algoritmo para la suma-resta en punto flotante
2.3 Multiplicador en punto flotante parametrizado:
Megafunción altfp_mult
El software Quartus II versión 4.1sp2 Web Edition Full
de Altera provee una librería de Megafunciones conocida
como Librería de Módulos Parametrizados (LPM). Para la
operación de multiplicación en punto flotante, dispone de la
megafunción altfp_mult, la cual es un bloque parametrizado
y es descrito en un lenguaje de alto nivel [5]. El diagrama de
la megafunción se puede observar en la Figura 5.
Figura 5. Multiplicador de punto flotante parametrizado:
megafunción altfp_mult de simple precisión.
Figura 3. Algoritmo para la multiplicación en punto flotante
2.4 Divisor en punto flotante
La operación aritmética de división en punto flotante es
muy similar a la multiplicación. En la Figura 5 se muestra el
algoritmo de la división en punto flotante. En primer lugar,
en la división, si el divisor es 0 se debe producir un error, o
si el dividendo es 0, entonces el resultado es 0. El siguiente
paso es restar los exponentes.
Si los exponentes están representados en forma sesgada,
la resta podría generar un resultado cuyo valor se puede salir
del rango. Entonces se debe sumar al resultado de la resta
anterior el valor del sesgo.
Si el exponente del cociente esta dentro del rango
apropiado, el paso siguiente es dividir las mantisas teniendo
en cuenta sus signos. Esta división se realiza como en el caso
de los enteros.
Figura 4. Multiplicador en punto flotante.
El cociente tendrá la longitud del divisor y los bits extras
se perderán durante el redondeo. Se debe mencionar que la
normalización podría producir un desbordamiento a cero del
exponente [4].
Figura 7. Diagrama de bloques del divisor de punto flotante.
3.
Figura 6. Algoritmo para la división en punto flotante.
En la Figura 6 se presenta el diagrama de bloques del
divisor en punto flotante
RESULTADOS DE SIMULACIÓN
En esta sección, se presentan los resultados de
simulación para los diferentes operadores aritméticos en
punto flotante, en este caso los parámetros de diseño
tenidos en cuenta son: velocidad o frecuencia máxima y
área o número de elementos lógicos. Adicionalmente, la
disipación de potencia es considerada [6]. Los diseños
son implementados usando las megafunciones
lpm_add_sub, lpm_mult y lpm_divide de Altera. El
dispositivo utilizado es el FPGA FLEX10K70RC240-4
de la tarjeta UP2 de Altera.
Los resultados de simulación usando MAX + Plus II, y
considerando la optimización en velocidad y área son
presentados en las Tablas 1 y 2, respectivamente.
ALTERA MAX + PLUS II v.10.1
Optimización en Velocidad
Número de
Operadores aritméticos en punto
Frecuencia Máxima (MHz)
Potencia Estimada (mW)
Elementos
Lógicos (LE)
flotante (IEEE754 simple precisión)
0,09
451
60,39
Sumador – Restador
5,29
1102
112,45
Multiplicador
0,77
1274
76,09
Divisor
Tabla 1. Operadores aritméticos en punto flotante optimizados en velocidad usando Max + Plus II
ALTERA MAX + PLUS II v.10.1
Optimización en Área
Número de
Operadores aritméticos en punto
Frecuencia Máxima (MHz)
Potencia Estimada (mW)
Elementos
Lógicos (LE)
flotante (IEEE754 simple precisión)
0,09
428
62,18
Sumador –Restador
3,67
952
101,62
Multiplicador
0,30
1120
42,89
Divisor
Tabla 2. Operadores aritméticos en punto flotante optimizados en área usando Max + Plus II
Desde las Tablas 1 y 2 podemos concluir que el multiplicador en punto flotante presenta la mayor frecuencia de operación
y la mayor disipación de potencia. De otro lado, el divisor usa la mayor área. Los resultados de simulación para los operadores
aritméticos en punto flotante, usando QUARTUS II versión 4.1sp2 Web Edition Full, y considerando la optimización en
velocidad y área son presentados en las Tablas 3 y 4, respectivamente.
QUARTUS II v.4.1sp2 Web Edition
Full
Optimización en Velocidad
Número de
Operadores aritméticos en punto
Frecuencia Máxima (MHz)
Potencia Estimada (mW)
Elementos
Lógicos (LE)
flotante (IEEE754 simple precisión)
0,31
355
106,20
Sumador – Restador
10,01
860
196,45
Multiplicador
Multiplicador parametrizado:
18,76
1487
554,52
Megafunción altfp_mult
1,28
960
75,74
Divisor
Tabla 3. Operadores aritméticos en punto flotante optimizados en velocidad usando QUARTUS II v4.1sp2 Web Edition Full
QUARTUS II v.4.1sp2 Web Edition
Full
Optimización en Área
Número de
Operadores aritméticos en punto
Potencia Estimada (mW)
Frecuencia Máxima (MHz)
Elementos
Lógicos (LE)
flotante (IEEE754 simple precisión)
0,26
348
103,45
Sumador – Restador
9,38
850
186,40
Multiplicador
Multiplicador parametrizado:
17,33
1427
495,70
Megafunción altfp_mult
1,15
951
70,44
Divisor
Tabla 4. Operadores aritméticos en punto flotante optimizados en área usando QUARTUS II v4.1sp2 Web Edition Full
Desde las Tablas 3 y 4 podemos concluir que el divisor en punto flotante presenta una frecuencia de operación muy baja y
utiliza una área grande. El multiplicador parametrizado (altfp_mult) en punto flotante presenta la mayor frecuencia de
operación, sin embargo utiliza una área y una disipación de potencia bastante considerable. El multiplicador implementado en
este trabajo es una buena alternativa debido a que utiliza menor número de elementos lógicos (área) y menor disipación de
potencia, con respecto al multiplicador parametrizado (altfp_mult). Los resultados de simulación para el sumador – restador,
el multiplicador y el divisor en punto flotante usando QUARTUS II versión 4.1sp2 Web Edition Full son mostrados en las
Figuras 7a, 7b y 7c.
Figura 7a. Simulación del sumador – restador en punto flotante usando formato IEEE 754 - 32 bits
Figura 7b. Simulación del multiplicador en punto flotante usando formato IEEE 754 – 32 bits
Figura 7c. Simulación del divisor en punto flotante usando formato IEEE 754 - 32 bits
4.
CONCLUSIONES Y TRABAJO FUTURO
Este trabajo presenta el diseño de arquitecturas básicas
en hardware, las cuales implementan las operaciones
aritméticas de suma-resta, multiplicación y división en
punto flotante usando el formato IEEE 754 de simple
precisión. En muchas aplicaciones basadas en usar
procesadores embebidos se requiere que estos tenga la
capacidad para realizar operaciones aritméticas de punto
flotante, lo cual es fundamental para alcanzar el buen
desempeño del sistema. Los operadores aritméticos en
punto flotante, fueron diseñados usando las megafunciones
lpm_add_sub, lpm_mult y lpm_divide, y los dispositivos
lógicos programables de Altera. En este caso, los diseños
fueron compilados y sintetizados sobre el dispositivo
EPF10K70RC240-4.
Los resultados de simulación obtenidos permiten
presentar las siguientes conclusiones:
•
La utilización de las megafunciones de Altera facilitan
la implementación en hardware de las arquitecturas
propuestas para las unidades aritméticas en punto
flotante utilizando el formato IEEE 754 de simple
precisión.
•
El sumador – restador utiliza menor área que las otras
unidades aritméticas de punto flotante. Además, este
presenta menor consumo de potencia promedio que el
multiplicador.
•
El multiplicador parametrizado altfp_mult en punto
flotante presenta una mayor frecuencia de operación
frente al multiplicador implementado en este articulo,
pero el número de elementos lógicos (área) que utiliza
y su potencia disipada son muy grandes. En algunas
aplicaciones el parámetro del área puede ser primordial
para el diseño de sistemas embebidos en donde la
frecuencia no es determinante.
•
El multiplicador y divisor en punto flotante aunque
poseen una arquitectura similar, los resultados
obtenidos en las simulaciones permiten decir que el
multiplicador presenta mejor desempeño frente al
divisor, sin importar el software utilizado para
sintetizar.
•
La frecuencia de operación del divisor es realmente
muy pequeña, entonces se deben orientar esfuerzos en
alcanzar mejores resultados para la división.
Con respecto al trabajo futuro, las actividades serán
orientadas a diseñar arquitecturas que permitan alcanzar un
mejor desempeño para los operadores aritméticos de punto
flotante, los cuales serán usados para diseñar procesadores
RISC y DSP de alto desempeño.
5.
AGRADECIMIENTOS
Este trabajo ha sido patrocinado por Altera Corporation
a través del Programa Universitario. Los autores dan
especial agradecimientos a Mrs. Ralene Marcoccia de
Altera Corporation.
6.
BIBLIOGRAFÍA
[1] V.C. Hamacher, Z.G. Vranesic y S.G. Zaky,
“Organización de Computadoras”, Mc Graw Hill.
[2] M. Davio, “Digital Systems with Algorithm
Implementation”, John Wiley & Sons.
[3] David A. Patterson, John L. Hennessy, “Organización y
Diseño de Computadores”, Mc Graw Hill.
[4] W. Stallings, “Organización y Arquitectura de
Computadores”.
[5] “Quartus II Development Software Handbook v4.2 –
Using Device Futures”. Altera Corporation. 2004.
[6] “AN074: Evaluating Power for Altera Devices”. Altera
Corporation. July 2001.
Descargar