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.