• No se han encontrado resultados

Análisis e implementación de operaciones aritméticas en base diez sobre dispositivos de lógica programable

N/A
N/A
Protected

Academic year: 2020

Share "Análisis e implementación de operaciones aritméticas en base diez sobre dispositivos de lógica programable"

Copied!
166
0
0

Texto completo

(1)

UNIVERSIDAD NACIONAL DE CENTRO DE LA PROVINCIA DE BUENOS AIRES FACULTAD DE CIENCIAS EXACTAS – DEPARTAMENTO DE COMPUTACIÓN Y SISTEMAS

DOCTORADO EN MATEMÁTICA COMPUTACIONAL E INDUSTRIAL

Análisis e implementación de operaciones aritméticas en base diez

sobre dispositivos de lógica programable

por

Martín Osvaldo Vázquez

(2)
(3)
(4)
(5)

Abstract

General purpose microprocessors available on today's market does not provide hardware support for performing mathematical operations based on decimal representation. Instead, those chips implement arithmetic units using binary representation which provide a better performance. This fact is due to the two-state nature of electronic transistors. However, many commercial and scientific applications strictly requires computed calculations to be exactly the same as human performed.

Actually, those systems that does not provide decimal floating point support, must adapt theirs operands to be computed assuming a difference with the real result. Errors inherited by precision loss may violate legal conditions, cause millionaire losses and even human life risk. The first alternative to smooth this is to give a special treatment to floating point operations at software level. This solution avoids result errors but increases computing resources and deteriorates calculation speed. A second popular alternative requires operands and result conversion from/to radix-10 and using the traditional computation. However, successive conversions could fall into precision loss. The decimal floating point arithmetic boosts the IEEE 754-1985 floating point standard adding decimal representation support and leading to IEEE 754-2008. The new standard states storage formats and treatment algorithms for handling decimal floating point numbers.There is a special interest on using FPGA programmable devices as hardware accelerators performing decimal floating point operations that meet IEEE 754-2008.

(6)
(7)

Resumen

Los microprocesadores de propósito general de hoy en día no poseen soporte hardware para operaciones decimales; implementan unidades aritméticas binarias, las cuales poseen mejor rendimiento que las unidades aritméticas decimales, dado que los sistemas electrónicos se basan en transistores de dos estados. Muchas aplicaciones comerciales, tales como transacciones bancarias, financieras, operaciones contables, cálculo de tasas, entre otras, realizan procesamiento intensivo de números en punto flotante decimal. Estas aplicaciones, requieren que los resultados obtenidos sean los mismos a los obtenidos a mano.

El tratamiento de números en punto flotante decimal en sistemas que no poseen el soporte decimal adecuado, producen errores que pueden llevar a violaciones de requerimientos legales y de precisión. Estos errores, pueden hacer además, que una compañía pierda o gane millones de dólares. Una manera de solucionar este problema, es mediante el tratamiento a nivel software de las operaciones de punto flotante decimal. Otra solución es mediante conversiones y procesamiento en binario. La primera solución evita errores pero es lenta, en cuanto a la segunda solución pueden ocurrir errores de precisión. El interés en aritmética de punto flotante decimal impulsó en la revisión del estándar de punto flotante IEEE 754-1985, con el agregado del soporte de representaciones decimales, generando así el actual estándar IEEE 754-2008. En el mismo, se definen formatos de almacenamiento y métodos para el tratamiento de números de punto flotante decimal. Resulta auspisioso la utilización de dispositivos programables FPGAs como aceleradores hardware que efectúan operaciones de punto flotante decimal conforme al estándar IEEE 754-2008.

(8)
(9)

Agradecimientos

En primer lugar quiero agradecer a Gustavo, por haber depositado en mi su confianza y tener la visión de que mis capacidades se ajustaban perfectamente al tema de tesis propuesto. Su experiencia en el tema, tuvo un valor superlativo en el desarrollo de este trabajo.

Siento una gratitud inmensa, hacia los integrantes del laboratorio en el que desarrollo mis investigaciones, perteneciente al instituto de investigación INTIA de UNCPBA. Principalmente a Lucas, Marcelo y Quique, quiénes no solo me han dado amistad y aliento constante, sino que además, han realizado contribuciones significativas en el desarrollo de este trabajo

Quiero agradecer a Sebastián, quien con su excelente formación en ciencias matemáticas, hizo aportes invaluables en lo que respecta al uso correcto de los símbolos y expresiones matemáticas, así como también en la forma de transmitir y/o demostrar algunos conceptos o afirmaciones.

(10)
(11)

Contenidos

Introducción... 1

1.1. Motivación ... 1

1.2. Trabajo precedente ... 4

1.3. Trabajo propuesto... 4

1.4. Contribuciones ... 6

1.5. Organización del informe... 7

Conceptos preliminares... 9

2.1. Aritmética decimal en computadoras ... 9

2.2. Soporte de aritmética decimal para sistemas de computación ... 10

2.2.1. Soporte software... 11

2.2.2. Soporte hardware... 11

2.3. Estándar IEEE 754-2008... 12

2.3.1. Formatos decimales ... 13

2.3.2. Formatos de Intercambio ... 14

2.3.3. Excepciones... 16

2.3.4. Redondeo ... 16

2.4. Field Programmable Gate Array - FPGA ... 16

2.4.1. Tecnología de programación... 18

2.4.2. Arquitectura... 18

2.4.2.1. Otros componentes ... 19

2.4.3. IP cores... 20

2.4.4. Diseño en FPGA... 21

Suma y Resta punto fijo en base 10... 23

3.1. Introducción ... 23

3.1.1. Convenciones acerca de simbología utilizada en este capítulo... 28

3.2. Propuestas y Contribuciones ... 28

3.3. Suma de números decimales sin signo ... 29

3.3.1. Resultados experimentales... 34

3.4. Resta de números decimales sin signo. ... 35

3.4.1. Resultados experimentales... 40

3.5. Suma/Resta decimal en complemento a la base diez... 40

(12)

3.6. Suma/Resta decimal en signo valor absoluto... 45

3.6.1. Basada en sumadores/restadores de enteros en C10... 46

3.6.2. Basada en sumadores y restadores de decimales naturales... 49

3.6.3. Resultados experimentales... 50

3.7. Conclusiones el capítulo ... 53

Logaritmo decimal en base 10... 55

4.1. Introducción ... 55

4.1.1. Convenciones acerca de simbología utilizada en este capítulo... 59

4.2. Propuesta y Contribuciones ... 59

4.3. Método propuesto... 60

4.3.1. Convergencia de la sucesión auxiliar ... 62

4.3.2. Convergencia de la sucesión principal ... 64

4.3.3. Algoritmo propuesto... 64

4.3.4. Arquitectura del logaritmo radix-10 en punto fijo con selección directa ... 71

4.3.4.1. Multiplicación decimal de p×1-dígitos. ... 75

4.3.4.2. Resultados experimentales... 79

4.4. Logaritmo decimal radix-10 punto flotante ... 80

4.4.1. Manejo de exponentes en operandos de entrada y salida ... 80

4.4.2. Manejo de cifras significativas y tamaño de LUTs ... 81

4.4.3. Algoritmo para logaritmo decimal DFP ... 83

4.4.4. Arquitectura del logaritmo decimal DFP... 89

4.4.4.1. Tratamiento de exponente del argumento... 90

4.4.4.2. Detección de ceros y nueves iniciales ... 92

4.4.4.3. Arquitectura de Log_fixed_red con reducción de latencia ... 93

4.4.4.4. Post-procesamiento del resultado ... 96

4.4.5. Análisis de error de la solución propuesta ... 100

4.4.6. Resultados experimentales... 101

4.4.7. Comparaciones con solución propuesta en [Che12] ... 103

4.5. Conclusiones del capítulo y trabajo futuro... 106

Raíz cuadrada punto fijo en base 10 ... 109

5.1. Introducción ... 109

5.1.1. Convenciones acerca de simbología utilizada en este capítulo... 111

5.2. Propuesta y Contribuciones ... 112

5.3. Método propuesto... 112

5.2. Arquitectura para calcular raíz cuadrada radix-10 punto fijo ... 117

5.3. Resultados experimentales ... 120

5.4. Raíz cuadrada radix-10 punto flotante... 122

5.5. Conclusiones del capítulo y trabajo futuro... 124

Conclusiones ... 127

6.1. Resumen final ... 127

6.2. Investigación futura ... 130

(13)
(14)
(15)

Lista de Figuras

Figura 1.1 – Ejemplo de error por redondeo en un cálculo de tasa decimal usando punto

flotante binario de doble precisión... 2

Figura 1.2 – Propuestas y contribuciones de la presente tesis conjuntamente con [Vaz11]... 6

Figura 2.1 – Función programable simple (f = a.b’)... 18

Figura 3.1 – Ejemplo de sucesivas correcciones utilizado sumador binario... 25

Figura 3.2 – Ejemplo suma binaria con bias y corrección. ... 25

Figura 3.3 – Ejemplo suma multioperando usando suma binaria y representación sobrecargada. ... 26

Figura 3.4 - Implementación de la suma de operandos de dos bits en slice de dispositivos de Xilinx [Xil15a]... 28

Figura 3.5 - Implementación de sumador completo de un dígito BCD, ai = xi + yi , en dispositivos con LUTs de 6 entradas con cálculo de Gi y Pi a partir de la suma inicial. 31 Figura 3.6 - Implementación de sumador completo de un dígito BCD, ai = xi + yi, en dispositivos con LUTs de 6 entradas con cálculo de Gi y Pi dependiendo de las entradas. ... 32

Figura 3.7 - Implementación de sumador completo de un dígito BCD, ai = xi + yi, en dispositivos con LUTs de 6 entradas según [Din10a]. ... 33

Figura 3.8 - Restador de números naturales BCD (Sub_Nat), s= x- y. ... 35

Figura 3.9 - Restador BCD de un dígito, si = xi - yi. ... 36

Figura 3.10 - Restador binario de un bit, z[j] = x[j]-y[j]... 36

Figura 3.11 - Implementación de restador de un dígito BCD, si = xi -yi, en dispositivos con LUTs de 6 entradas... 37

Figura 3.12 - Restador de números naturales BCD con resultado en SVA sin overflow (Sub_S), ss= x- y. ... 38

Figura 3.13 - Implementación de restador de un dígito BCD con resultado en SVA sin overflow, ssi = xi - yi, en dispositivos con LUTs de 6 entradas. ... 39

(16)

Figura 3.15 - Implementación de sumador/restador de un dígito BCD con operandos en

C10, sai = xi ± yi, en dispositivos con LUTs de 6 entradas, con cálculo de Gi y Pi a partir

de las entradas... 42

Figura 3.16 - Implementación de sumador/restador de un dígito BCD con operandos en C10, sai = xi ± yi, en dispositivos con LUTs de 6 entradas basado en Adder-III. ... 43

Figura 3.17 - Sumador/Restador de números enteros decimales representados en SVA, r= x± y, basado en sumador/restador en C10. ... 47

Figura 3.18 - Implementación de sumador/restador en SVA en dispositivos con LUTs de 6 entradas, r= x± y, basado en sumador/restador en C10. ... 48

Figura 3.19 - Sumador/Restador de números enteros decimales representados en SVA, r= x± y, basado en sumador, restador y multiplexor. ... 49

Figura 3.20 - Implementación de sumador/restador de un dígito con operandos en SVA, ri = xi ± yi, en dispositivos con LUTs de 6 entradas, basado en sumador y restador de números naturales (con Adder-I). ... 51

Figura 4.1 - Circuito que calcula el logaritmo punto fijo radix-10... 72

Figura 4.2 - Implementación de ppUi en dispositivos con LUTs de 6 entradas según [Din10b] ... 77

Figura 4.3 - Implementación de ppLi en dispositivos con LUTs de 6 entradas según [Din10b]. ... 78

Figura 4.4 - Circuito que calcula el logaritmo DFP conforme al estándar IEEE 754-2008... 90

Figura 4.5 - Implementación de Process Exponent Input. ... 91

Figura 4.6 - Circuito que implementa Bin_to_BCD... 92

Figura 4.7 - Circuito correspondiente a Leading Zeros y Leading Nines... 93

Figura 4.8 - Circuito Log_fixed_red... 94

Figura 4.9 - Circuito Lut_log*... 96

Figura 4.10 - Circuito Post-Process Result. ... 97

Figura 4.11 - Circuito Pre-Process Significand Qs.p+2... 98

Figura 4.12 - Circuito Round. ... 99

Figura 4.13 - Circuito Process Exponent. ... 100

Figura 5.1 - Circuito que calcula la raíz cuadrada radix-10 punto fijo... 118

Figura 5.2 - Circuito que determina la división (div). ... 119

Figura 5.3- Circuito que implementa Cmp. ... 120

Figura 6.1 –Sumador radix-B de p dígitos. ... 130

(17)

Lista de Tablas

Tabla 2.1 – Codificaciones binarias de números decimales... 10

Tabla 2.2- Parámetros de los formatos básicos de números DFP... 13

Tabla 2.3 – Tamaño (bits) de los campos pertenecientes a los formatos de intercambio

de números de punto flotante decimal. ... 14

Tabla 2.4 – Parámetros de los formatos de intercambio de números DFP. ... 15

Tabla 2.5 – Interpretación de campo combinacional (clasificaciones especiales) ... 15

Tabla 2.6 – Interpretación de campo combinacional (números de punto flotante finito)

... 15

Tabla 2.7 – Principales compañías fabricantes de FPGAs... 18 Tabla 2.8 – Compañías vendedoras de herramientas EDA. ... 22

Tabla 3.1. Tiempo de cálculo (ns) de sumadores decimales sin signo en Virtex 7 con

speed grade 3 ... 34

Tabla 3.2. Área (LUTs) de sumadores decimales sin signo en Virtex 7 con speed grade

3 ... 34

Tabla 3.3. Penalización en área entre los diferentes sumadores en Virtex 7 con speed

grade 3... 35

Tabla 3.4. Aceleraciones entre los diferentes sumadores en Virtex 7 con speed grade 3

... 35

Tabla 3.5. Tiempo de cálculo (ns) en Virtex 7 con speed grade 3 ... 40 Tabla 3.6. Área (LUTs ) en Virtex 7 con speed grade 3 ... 40

Tabla 3.7. Tiempo de cálculo (ns) de sumadores/restadores C10 en Virtex 7 con speed

grade 3... 44

Tabla 3.8. Área (LUTs) de sumadores/restadores C10 en Virtex 7 con speed grade 3... 44

Tabla 3.9. Penalización en área entre los diferentes sumadores/restadores en Virtex 7

con speed grade 3... 44

Tabla 3.10. Aceleraciones entre los diferentes sumadores/restadores en Virtex 7 con

speed grade 3 ... 45

Tabla 3.11. Operación efectiva entre los operandos en SVA y signo del resultado (sr) 45

Tabla 3.12. Tiempo de cálculo (ns) de sumadores/restadores BCD en SVA en Virtex 7

(18)

Tabla 3.13. Área (LUTs) de sumadores/restadores BCD en SVA en Virtex 7 con speed

grade 3... 51

Tabla 3.14. Penalización en área entre los diferentes sumadores/restadores en SVA

implementados en Virtex 7 con speed grade 3... 52

Tabla 3.15. Aceleraciones entre los diferentes sumadores/restadores BCD en SVA en

Virtex 7 con speed grade 3... 52

Tabla 4.1. Ejemplo de cálculo de logaritmo de 0.5431297 con precisión p=7 ... 66

Tabla 4.2. Tiempo de cálculo (ns) de logaritmo punto fijo radix-10 en Virtex 7 con

speed grade 3 ... 80

Tabla 4.3. Área (LUTs) de logaritmo punto fijo radix-10 en Virtex 7 con speed grade 3

... 80

Tabla 4.4. Rango del resultado dependiendo del formato decimal escogido ... 81

Tabla 4.5. Características del exponente del argumento según estándar IEEE 754-2008.

... 91

Tabla 4.6. Operaciones involucradas para calcular mantisa extendida Qs.p+2. ... 98

Tabla 4.7. Tiempo de cálculo (ns) de logaritmo radix-10 DFP en Virtex 7 con speed102

Tabla 4.8. Área (LUTs) de logaritmo radix-10 DFP en Virtex 7 con speed grade 3... 102

Tabla 4.9. Área (LUTs) de Lut_log* en Virtex 7 con speed grade 3 ... 103

Tabla 4.10. Tiempo de cálculo (ns) de logaritmo radix-10 DFP en Virtex 7 con speed

grade 3... 105

Tabla 4.11. Área (LUTs) de logaritmo radix-10 DFP en Virtex 7 con speed grade 3. 105

Tabla 4.12. Tiempos de cálculo (ns) de logaritmo radix-10 DFP en Virtex 7 con speed

grade 3 de ambas propuestas. ... 105

Tabla 4.13. Área (LUTs) de logaritmo radix-10 DFP en Virtex 7 con speed grade 3 de

ambas propuestas. ... 105

Tabla 4.14. Aceleraciones producidas por las propuestas de esta tesis en Virtex 7 con

speed grade 3 ... 106

Tabla 4.15. Penalizaciones en área de propuestas de [Che12] en Virtex 7 con speed

grade 3... 106

Tabla 5.1. Ejemplo de cálculo de 0.73753con precisión p=5... 115

Tabla 5.2. Tiempo de cálculo (ns) de raíz cuadrada punto fijo radix-10 en Virtex 7 con

speed grade 3 ... 121

Tabla 5.3. Área (LUTs) de raíz cuadrada punto fijo radix-10 en Virtex 7 con speed

grade 3... 121

Tabla 5.4. Tiempo de cálculo (ns) de raíz cuadrada punto fijo radix-10 ... 122

(19)

Lista de Abreviaturas

ASIC Application Specific Integrated Circuit

BCD Binary Coded Decimal BID Binary Integer Decimal CLB Configurable Logic Block

CPLD Complex Programmable Logic Device

DFP Decimal Floating Point DPD Desenly Packed Decimal DSP Digital Signal Processor EDA Electronic Design Automation

FPGA Field Programmable Gate Array

HDL Hardware Description Language HPC High Performance Computing

IIoT Industrial Internet of Things

LUT Look Up Tables

PSoC Programmable System on a Chip

VHDL VHSIC Hardware Description Language

(20)
(21)

1

CAPÍTULO 1

Introducción

1.1. Motivación

Si bien las primeras computadoras implementaban unidades aritméticas decimales (en base 10 o radix-101), con el paso del tiempo prevalecieron las unidades aritméticas binarias (radix-2). Esto se debió a la generalización de todo tipo de aplicación, tanto las comerciales como las científicas, y al incremento de la demanda de aplicaciones científicas sobre las comerciales. La aritmética binaria es más adecuada para aplicaciones científicas ya que posee mejor rendimiento, dado que, en las computadoras electrónicas basadas en transistores de dos estados, los datos binarios se almacenan y procesan más eficientemente y más rápidamente que los datos decimales.

Hoy día, la demanda de aplicaciones comerciales aumentó significativamente, tal es el caso de las aplicaciones de comercio electrónico, financieras, transacciones bancarias, contables, etc. Estas aplicaciones hacen uso intensivo de números decimales (enteros y punto flotante), y con frecuencia requieren que los resultados obtenidos sean los mismos a los obtenidos “manualmente”, ya que los errores introducidos al tratar estos números como binarios pueden violar requerimientos legales o de precisión [Cow03] [Vaz09a].

Cuando se realizan operaciones decimales en sistemas que no poseen el soporte decimal adecuado, esto es, almacenar formatos decimales, tratamiento de tipos de datos decimales, u operaciones decimales; se pueden producir resultados con errores de representación, conversión o redondeo.

Para almacenar un número decimal exacto en una computadora que no posee soporte para almacenar formato decimal, existe la posibilidad que se almacene un número aproximado inexacto. Por ejemplo, cuando se almacena el número decimal 0,110, en un sistema que no posee soporte para almacenar formato decimal, se obtiene

un error en la representación, ya que este número se corresponde al número binario periódico 0,00011001100…1100…2.

Los tipos de datos decimales también son necesarios. Si un valor decimal exacto, el cual se encuentra almacenado adecuadamente en un sistema con soporte para almacenar formato decimal, se usa en un entorno de programación que no posea tipos de datos decimales, posiblemente se producirá error de conversión.

1

Radix-B. Es un sistema convencional de representación de números, utiliza la base fija B y el número

(22)

Por otro lado, en un sistema sin soporte para la realización de operaciones decimales, también pueden ocurrir errores de redondeo. En [Cow03] se muestra un ejemplo interesante que permite apreciar muy bien el problema del redondeo. Considérese el cálculo de una tasa de 5% sobre las ventas de un determinado ítem, tal caso de una llamada telefónica con costo de $0,70, usando punto flotante binario de doble precisión y técnica de redondeo RoundTiesToEven (figura 1.1). Obsérvese que el resultado obtenido es un centavo menor al resultado esperado. Este tipo de errores, pueden conducir a que una compañía, al cabo de no mucho tiempo, pierda o gane millones de dólares.

Decimal Punto flotante binario

0,7 x 1,05 = 0,735 0,69999999999999998 x 1,05 = 0,73499999999999998

↓ (RoundTiesToEven) ↓ (RoundTiesToEven)

= 0,74 = 0,73

Figura 1.1 – Ejemplo de error por redondeo en un cálculo de tasa decimal usando punto

flotante binario de doble precisión.

Un hecho real no vinculado con aspectos comerciales, sino con la vida de personas, demuestra la importancia de evitar este tipo de errores. Durante la guerra del golfo en 1991, un misil Patriot lanzado por EE.UU., falla en la intercepción de un misil SCUD iraquí. Un reporte oficial de Washington [Bla92], informó que la falla se debió a problemas de software en el sistema de control, relacionados a errores de redondeo en los cálculos de rangos y velocidades.

A raíz del interés en aritmética decimal en computadoras, luego de varios años de borradores, revisiones y acuerdos, en agosto del 2008 surge el estándar IEEE 754-2008 [IEEE08]. El propósito del estándar es proveer métodos para el cómputo de números punto flotante decimal (DFP, Decimal Floating Point), de modo que, ante los mismos datos de entrada, se obtienen los mismos resultados independientemente si el procesamiento se efectúa en hardware, en software, o en ambos.

Los procesadores de propósito general más difundidos y utilizados hoy en día, no proveen instrucciones o soporte hardware para aritmética DFP. Como consecuencia de esto se utilizan dos alternativas para mitigar la eventual pérdida de precisión: a) los números decimales, son leídos, convertidos a números binarios y procesados utilizando aritmética de punto flotante binario, aceptando la consecuente pérdida de precisión; b) se utilizan diferentes bibliotecas de software que realizan el cálculo sin pérdida. La primera estrategia obtiene mejores resultados en cuanto a velocidad respecto a la segunda, pero puede producir errores, inaceptables para algunas aplicaciones comerciales, producto de las conversiones y redondeos.

Las bases de datos de aplicaciones comerciales, utilizan una cantidad significativa de datos decimales. Por tanto, la mayoría de los lenguajes de alto nivel utilizados para este tipo de aplicaciones, poseen soporte de aritmética decimal, ya sea directamente o mediante el uso de librerías.

(23)

3 [Sun17] [IBM03], Lua decNumber [Cur07], Phyton Decimal [Bat03], Eiffel Decimal Arithmetic [Cri04] y Rexx [ANS96], entre otros.

Las soluciones hardware ya aparecían en las primeras computadoras electrónicas, tales como ENIAC [Gol96], UNIVAC [Hea01] e IBM 650 [Knu86], las cuáles realizaban sus funciones aritméticas en base decimal. Sin embargo, más recientemente, los mainframes de IBM proveen instrucciones con soporte hardware de aritmética DFP, tales caso de IBM Power6 [Eis07] y Power 7 [Wen10], e IBM System z9 [Dua07] y z10 [Sch09].

Las implementaciones software de operaciones DFP, se encuentran entre uno y dos órdenes de magnitud más lenta que las soluciones hardware [Erl09] [Che11]. Por otro lado, la evolución continua que interviene en el desarrollo electrónico, permite la fabricación de circuitos integrados con millones de transistores a costos moderados. Esto lleva a que para los fabricantes de microprocesadores de propósito general, sea atractivo proveer unidades aritméticas DFP hardware en sus productos [Vaz09a].

Pot otra parte, estudios realizados por investigadores de Intel, indican que la mayoría de las aplicaciones comerciales, solo consumen desde el 1% al 5% de su tiempo de ejecución, en la realización de operaciones decimales [Cor07]. Según opinión de estos investigadores, las soluciones hardware de aritmética decimal en los productos de Intel, aún no son necesarias [Erl09].

De lo expuesto anteriormente, resulta interesante la utilización de dispositivos de lógica programables FPGAs (Field Programmable Gate Array), como aceleradores hardware que efectúen operaciones aritméticas DFP conforme al estándar IEEE 754-2008. Más aún, teniendo en cuenta que en el área de supercomputación (HPC, High Performance Computing), las principales compañías ofrecen soluciones basadas en procesadores AMD o Intel y aceleradores hardware FPGAs, tales casos de CRAY (www.cray.com) o SRC (www.srccomp.com).

El mercado de circuitos reprogramables ha crecido muy velozmente, compitiendo en mercados que tradicionalmente eran exclusivos de tecnologías ASICs (Application Specific Integrated Circuit) o DSPs (Digital Signal Processor). Las FPGAs ofrecen características muy favorables, dependiendo con la tecnología que se la compare, tales como flexibilidad, rápida prototipación, velocidad de operación, costo de desarrollo, etc [Des06] [Gok05][Wil07][Sim15].

Una práctica muy común y útil cuando se diseña en FPGAs o ASICs, es la incorporación de IP cores (núcleos de propiedad intelectual). Éstos son bloques de lógica reusable, celdas o diseño de layout de un chip, que son de propiedad intelectual de terceras partes.

(24)

mapeadas, ubicadas y ruteadas en los bloques lógicos (recursos) programables del dispositivo. Estos cores no son tan flexibles ni portables como los soft IP cores [Max04].

Actualmente, no existen en el mercado, muchos cores de unidades de cálculo DFP para FPGAs. Existe una empresa SilMinds (www.silminds.com), que comercializa soft IP cores sintetizables que efectúan ciertas operaciones DFP conforme al estándar IEEE 754-2008. Los soft cores desarrollados por esta compañía, están destinados tanto al desarrollo de procesadores comerciales o ASICs, como también al desarrollo de sistemas basados en FPGA.

Existe una gran cantidad de publicaciones de trabajos que abordan aritmética decimal de punto fijo y flotante. La mayoría de estos trabajos son adecuados para el diseño de microprocesadores de propósito general y para ASICs. Existen muy pocos trabajos publicados, que abordan aritmética decimal en FPGA.

1.2. Trabajo precedente

El autor de la presente tesis realizó un trabajo de maestría titulado “Implementación de operaciones decimales en punto fijo sobre FPGAs” [Vaz11], el cuál constituye las bases o cimientos de esta tesis doctoral. El objetivo central de [Vaz11], fue desarrollar estrategias para la implementación eficiente de diferentes algoritmos de suma, suma/resta y multiplicación radix-10 en punto fijo sobre dispositivos FPGAs de Xilinx.

Para la implementación de las operaciones suma y resta radix-10, se propuso la utilización de los recursos dedicados presentes en estos dispositivos que implementan de manera eficiente la propagación de acarreo en la suma binaria.

También se desarrollaron diversas estrategias para efectuar la multiplicación radix-10. Se abordaron diferentes técnicas, tanto para la generación de múltiplos de multiplicando, como para la acumulación y reducción de productos parciales. Para ello, se propusieron diseños basados en los sumadores radix-10 con propagación eficiente de acarreo. Además, se estudiaron, combinaron e implementaron, varias técnicas novedosas y exitosas en tecnología ASIC.

Es importante destacar que el trabajo de maestría [Vaz11] y la presente tesis doctoral son independientes, es decir, cada uno presenta sus objetivos, propuestas y contribuciones. De todas maneras, se pueden observar ambos trabajos, como etapas de un trabajo más abarcativo, más completo, que contribuye en el desarrollo de estrategias para la implementación eficiente de operaciones aritméticas radix-10 en dispositivos FPGAs de Xilinx, en donde [Vaz11] y la presente tesis, se corresponden con la primera y segunda etapa respectivamente.

1.3. Trabajo propuesto

(25)

5 punto flotante, como el tratamiento de exponente, identificación de casos especiales (cero, infinito, etc), desplazamiento y alineación de las mantisas considerando los exponentes, manejo de excepciones, aplicación de técnicas de redondeo, entre otras. Además, se implementa la suma punto fijo entre los operandos desplazados y alineados. Lo mismo sucede con cualquier operación aritmética punto flotante, se hace el procesamiento vinculado al punto flotante y se implementa la correspondiente operación punto fijo con los operandos procesados.

Para el desarrollo eficiente de unidades aritméticas DFP, es clave tener amplios conocimientos y experiencia en el área aritmética radix-10, especialmente en lo que respecta a punto fijo.

La presente tesis tiene como objetivo central el análisis, diseño e implementación sobre dispositivos FPGAs de Xilinx, de diferentes algoritmos que computen operaciones aritméticas radix-10. Las operaciones aritméticas desarrolladas son: suma, resta, raíz cuadrada y logaritmo decimal. La elección de Xilinx, surge como consecuencia que es la compañía líder en ventas y desarrollos de dispositivos programables FPGAs.

Se utiliza la codificación BCD (Binary Coded Decimal) para representar los operandos radix-10. Esto se debe a que es la codificación empleada en los formatos DFP definidos por el estándar IEEE 754-2008.

La operación suma es fundamental y es utilizada en todas las operaciones aritméticas. Debido a ello, los dispositivos programables de Xilinx, poseen recursos dedicados utilizados para la implementación eficiente de la propagación de acarreo de la suma binaria. Estos recursos dedicados, llevan a que la implementación de un sumador ripple-carry sea más eficiente que la implementación de sumadores basados en otras técnicas de cálculo de acarreo exitosas en ASICs. En consecuencia, las soluciones propuestas en el presente trabajo, se sustentan en la certeza que muchas soluciones que son eficientes (o ineficientes) en tecnologías ASICs, no lo son en FPGAs.

Para las operaciones suma y resta en punto fijo BCD, los diseños propuestos aplican y extienden los diseños presentados en [Vaz11]. Las soluciones se basan en la utilización de los recursos dedicados para la implementación de la suma binaria. Se propone el desarrollo de diferentes estrategias para las operaciones de suma y resta de números naturales y enteros. Para la representación de números enteros, se utilizan los sistemas signo y valor absoluto (SVA), y complemento a la base diez (C10).

En lo que respecta a las operaciones raíz cuadrada y logaritmo decimal, los diseños propuestos utilizan métodos iterativos mediante recurrencia de dígitos. Para la operación cuadrada radix-10, la propuesta involucra operandos en punto fijo. Para la operación logaritmo decimal radix-10, se realizan soluciones en punto fijo y DFP conforme al estándar con el soporte de todos los formatos: decimal32, decimal64 y decimal128.

(26)

por Xilinx, puedan emplear las estrategias expuestas en este trabajo para la implementación de operaciones aritméticas radix-10 en punto fijo y punto flotante.

La figura 1.2 muestra las propuestas y contribuciones realizadas en la presente tesis conjuntamente con las del trabajo precedente [Vaz11]. Se observa cuáles son los alcances y las intersecciones existentes en ambos trabajos. Además, se puede apreciar ambos trabajos como dos etapas que constituyen un trabajo más abarcativo y completo, cuyo objetivo y propósito son los mismos a los expuestos en la presente tesis.

Primera Etapa: Maestría

Suma

LUT-6 Suma/Resta C

10

LUT-6 Suma

LUT-4 Multiplicación LUT-6

Segunda Etapa: Doctorado (LUT-6)

Raíz cuadrada Resta

Suma Suma/Resta SVA y C10

Logaritmo decimal

[Din10a]

Figura 1.2 – Propuestas y contribuciones de la presente tesis conjuntamente con

[Vaz11].

1.4. Contribuciones

Se publicaron dos trabajos de relevancia internacional en donde se exponen las ideas desarrolladas en la presente tesis respecto a las operaciones de suma, resta [Vaz15] y raíz cuadrada [Vaz14]. Resulta importante mencionar, que un artículo con los aportes involucrados el diseño e implementación del logaritmo decimal radix-10 en punto fijo y DFP conforme al estándar IEEE 754-2008, se encuentra en evaluación en el momento de la redacción de esta memoria.

A continuación, se realiza una breve descripción, de las principales contribuciones de esta tesis en el área aritmética radix-10 en punto fijo y punto flotante conforme al estándar IEEE 754-2008, sobre dispositivos FPGAs de Xilinx basados en LUTs (Look Up Tables) de 6 entradas:

(27)

7 - Diseño e implementación de un restador BCD de números naturales. Se presenta una técnica novedosa que aprovecha la lógica perteneciente al diseño de restador binario para efectuar la resta BCD entre números naturales decimales [Vaz15]. - Estudio y determinación de las mejores técnicas de diseño de

sumadores/restadores BCD con operandos en C10 en dispositivos con LUTs de 6 entradas [Vaz15]. Se describen y analizan los diseños presentados en [Vaz11], y además se efectúa la comparación con una adaptación del trabajo de [Din10a] de modo que posibilite realizar la suma/resta BCD de números en C10.

- Diseño e implementación eficiente de sumador/restador BCD con operandos representados en SVA en dispositivos con LUTs de 6 entradas. El SVA es usado para la representación de la mantisa de los números DFP conforme al estándar IEEE 754-2008 [Vaz15].

- Diseño e implementación del logaritmo decimal radix-10 en punto fijo. Se propone un método iterativo mediante recurrencia de dígitos (digit-recurrence) basado en una técnica novedosa de selección directa del dígito de convergencia. La ruta de datos no se basa en la implementación de lógica redundante con ahorro de acarreo (carry-save) como sucede con los principales trabajos de la bibliografía para tecnología ASIC en recurrencia de dígitos, tales caso [Piñ02a], [Piñ02b] y [Che12].

- Diseño e implementación del logaritmo decimal DFP conforme al estándar IEEE 754-2008. La solución se basa en el método propuesto para el logaritmo decimal radix-10 en punto fijo y soporta todos los formatos: decimal32, decimal64, decimal128.

- Diseño e implementación de la operación raíz cuadrada radix-10 en punto fijo. Se propone un método iterativo con recurrencia de dígitos basado en la técnica de restauración (restoring), con un novedoso mecanismo de selección del dígito perteneciente al resultado en cada iteración. Este mecanismo se basa en una división simple y posterior verificación de dos dígitos adicionales en caso que se requiera restaurar.

Las implementaciones propuestas no utilizan los núcleos embebidos que se encuentran en los dispositivos, tales como memorias, multiplicadores, etc. Por otro lado, las descripciones de los diseños realizan la instanciación de módulos LUTs y multiplexores dedicados utilizados para la implementación de la lógica de acarreo. De este modo, para que los diseños se puedan implementar en cualquier dispositivo de lógica programable (o tecnología ASIC) independientemente del fabricante, solo se requiere reemplazar la instanciación de estos componentes por su descripción correspondiente en un lenguaje de descripción de hardware (VHDL en esta tesis).

1.5. Organización del informe

El presente informe se encuentra comprendido por 6 capítulos. Los capítulos 3, 4 y 5; contienen todo lo referente al diseño e implementación de las operaciones aritméticas desarrolladas. Cada uno de estos capítulos es autocontenido, se corresponde con una operación y se puede leer de manera independiente respecto a los otros.

(28)

computadoras, soporte hardware y software existentes, un resumen de las especificaciones que contiene el estándar IEEE 754-2008 en lo que respecta a DFP, y por último, una introducción a los dispositivos programables FPGAs y conceptos referentes al diseño de sistemas digitales en esa tecnología.

En el capítulo 3 se aborda las operaciones suma y resta radix-10 punto fijo. Se comienza con una breve descripción de las publicaciones, para ASICs y FPGAs, existentes en suma y resta decimal punto fijo y flotante. Luego se expone la propuesta junto con las contribuciones referente a las operaciones suma y resta decimal. A continuación se desarrollan las estrategias implementadas en dispositivos de Xilinx con LUTs de 6 entradas para la suma y resta de números naturales y suma/resta de números enteros. Se efectúan comparaciones y análisis de los resultados; y se determinan expresiones matemáticas que estiman el tiempo de cálculo y área. Al final del capítulo se exhiben las conclusiones.

A continuación, en el capítulo 4, se desarrolla la solución propuesta para la operación logaritmo decimal radix-10 en punto fijo y punto flotante. Primero, se efectúa un resumen de los trabajos existentes, tanto en ASICs como en FPGAs, de soluciones para la implementación hardware de la operación de logaritmo en radix-2, radix-10 y radix-2b. Luego se detalla la propuesta y las contribuciones realizadas para la implementación en FPGAs de la operación de logaritmo radix-10. Se prosigue con el diseño de una estrategia basada en recurrencia de dígitos para la implementación de logaritmo decimal radix-10 punto fijo. Posteriormente, se presenta el logaritmo decimal DFP basado en el uso del logaritmo punto fijo desarrollado. Se muestran y analizan los resultados de las implementaciones de los diseños propuestos en dispositivos con LUTs de 6 entradas. Se realizan comparaciones entre la propuesta y la implementación en el mismo dispositivo de la mejor solución existente, según el conocimiento del autor de la presente tesis, para el cálculo de logaritmo decimal DFP mediante recurrencia de dígitos. Por último, se describen las conclusiones y trabajos futuros.

El capítulo 5, presenta la propuesta para la implementación de la operación raíz cuadrada radix-10. Comienza el capítulo con una descripción de los trabajos existentes acerca de la implementación hardware de la operación raíz. A continuación, se expone la propuesta y las contribuciones obtenidas para la implementación en FPGA de esta operación. Luego, se detalla el diseño e implementación del método propuesto basado en recurrencia de dígitos, se muestran los resultados de las implementaciones en dispositivos basados en LUTs de 6 entradas, se realizan comparaciones con los métodos mas significativos en la bibliografía existente cuya solución se basa en técnicas mediante recurrencia de dígitos. Por último, se describen las conclusiones y trabajos futuros.

(29)

9

CAPÍTULO 2

Conceptos preliminares

En este capítulo se abordan conceptos que posibilitan la correcta interpretación de los términos y temas que se encuentran en los siguientes capítulos de la presente tesis. Primero se realiza una introducción a la aritmética decimal en computadoras, detallando las formas más conocidas de representación de números decimales. Luego se menciona el soporte existente de aritmética decimal en computadoras a partir de los dos ejes principales: hardware y software. En la sección 2.3, se presentan conceptos fundamentales que intervienen en el estándar en relación a la aritmética de punto flotante decimal, IEEE 754-2008. Por ultimo, se detallan aspectos significativos involucrados en el desarrollo en FPGAs: diferentes tecnologías de programación, cómo son las arquitecturas de las FPGAs, qué son los núcleos de propiedad intelectual y cuáles son las principales herramientas para desarrollo en esta tecnología existentes en el mercado.

2.1. Aritmética decimal en computadoras

La representación de los números ha evolucionado paralelamente a la del lenguaje. En el transcurso de la historia se emplearon muchos métodos para representar números, desde el uso de palos y piedras hasta el sistema numérico romano, en los cuales la representación de números grandes y realización de operaciones aritméticas son complicadas [Par00].

Los chinos fueron los primeros en utilizar el sistema posicional para representar números. La principal característica de este tipo de sistemas, es que el valor asociado a un símbolo no depende solo de él sino también de la posición respecto a los demás símbolos.

En un sistema posicional de base constante, una unidad en una correspondiente posición es un múltiplo constante de una unidad posicionada a la derecha. El sistema decimal es un sistema posicional de base diez.

(30)

Los sistemas digitales implementan lógica de dos estados debido a los procesos físicos involucrados en el funcionamiento del transistor. Motivo importante por el cual, los números a menudo se representan mediante dígitos binarios o bits.

Existen muchas maneras de representar números decimales con codificaciones binarias [Rich55]. La tabla 2.1 muestra las codificaciones binarias BCD más usuales, algunas de ellas utilizadas en esta tesis.

Tabla 2.1 – Codificaciones binarias de números decimales.

Valor

decimal BCD-8421 BCD-4221 BCD-5421 BCD-5211 BCD-XS3

0 0000 0000 0000 0000 0011

1 0001 0001 0001 0010 ó 0001 0100

2 0010 0010 ó 0100 0010 0100 ó 0011 0101

3 0011 0011 ó 0101 0011 0110 ó 0101 0110

4 0100 1000 ó 0110 0100 0111 0111

5 0101 1001 ó 0111 1000 ó 0101 1000 1000

6 0110 1100 ó 1010 1001 ó 0110 1010 ó 1001 1001 7 0111 1101 ó 1011 1010 ó 0111 1100 ó 1011 1010

8 1000 1110 1011 1110 ó 1101 1011

9 1001 1111 1100 1111 1100

Obsérvese que la codificación de cuatro bits y (y3, y2,y1, y0) del valor decimal x

utilizando BCD-abcd, se interpreta de la siguiente manera: x = y3 a+ y2 b+ y1 c+ y0 d. La

codificación BCD-8421, comúnmente conocida como BCD, es la más simple y directa ya que usa los pesos binarios de un entero binario de cuatro bits.

Por su parte, la codificación BCD-XS3 es un código BCD-8421 con exceso 3 (00112). Esta codificación no posee ceros en la representación y presenta como ventaja

principal la suma de dos números. Esto se debe a que las combinaciones inválidas de códigos BCD que surgen al operar, se evitan mediante una corrección ±3. Otra ventaja es que es self-complementing, significa que el complemento a nueve (usado para la operación resta) de un dígito se realiza mediante la inversión lógica de cada bit perteneciente a la representación.

Las codificaciones redundantes BCD-4221, BCD-5421 y BCD-5211, también son self-complementing. BCD-4221 posee beneficios significativos relacionados a la suma carry-save binaria. En cuanto a las codificaciones BCD-5421 y BCD-5211, se usan para duplicar valores y obtener el resultado en codificación BCD-8421 y BCD-4221 respectivamente.

2.2. Soporte de aritmética decimal para sistemas de computación

(31)

11

2.2.1. Soporte software

Muchos lenguajes de programación incluyen tipos de datos primitivos decimal. Tal caso de Ada [ISO01], .NET Framework (C# [ISO03], Visual Basic [Mic11]), COBOL [ANS02], PL/I [ANS76] y SQL [ISO92].

Existen otros lenguajes que se adhieren al General Decimal Arithmetic Specifications [Cow09] (GDAS) desarrollado por Mike Cowlishaw. Esta especificación se basa en el estándar IEEE 854-1987 [IEEE87], y forma la base de las especificaciones de aritmética decimal detalladas en el estándar IEEE 754-2008 [IEEE08] (sección 2.3). De este modo, los lenguajes que soportan GDAS operan conformes al estándar IEEE 754-2008. Varios lenguajes ofrecen librerías con soporte según GDAS: IBM C DecNumber [Cow10], Java Big Decimal [Sun17] [IBM03], Lua decNumber [Cur07], Phyton Decimal [Bat03], Eiffel Decimal Artithmetic [Cri04] y Rexx [ANS96].

Compiladores como C y C++ incorporaron extensiones para el soporte DFP conforme a IEEE 754-2008 [ISO15] [ISO17] [FSF08]. Por su parte Intel, desarrolló una librería matemática en C, que implementa aritmética DFP según estándar IEEE 754-2008 con mantisa codificada en binario (sección 2.3) [Cor07].

Muchos compiladores utilizan las instrucciones hardware DFP sujetas al estándar IEEE 754-2008 sobre las plataformas IBM Power6 [Eis07] y Power 7 [Wen10], e IBM System z9 [Dua07] y z10 [Sch09]. Tal es el caso de GCC (GNU Collection Compiler) [FSF17], IBM XL C/C++ [IBM17], IBM Enterprice PL/I [IBM07a], IBM DB2 [IBM07b], IBM High-level Assembler [IBM15], IBM DFPAL [IBM07c], etc.

2.2.2. Soporte hardware

Algunas de las primeras computadoras electrónicas, tales como ENIAC [Gol96], UNIVAC [Hea01] e IBM 650 [Knu86], realizaban sus funciones aritméticas en base diez. Aún con la llegada de las computadoras basadas en transistores de dos estados, se continuaban fabricando computadoras que procesaban datos en base diez mediante la codificación de cada dígito decimal en BCD. Sin embargo, con motivo de generalizar todo tipo de aplicación, ya sean tanto comerciales como científicas, y debido al incremento de la demanda de cálculos científicos rápidos, emergió y prevaleció la aritmética binaria.

Más recientemente, varios microprocesadores comerciales ofrecen instrucciones para aritmética BCD en punto fijo. Tal es el caso de los procesadores pertenecientes a las series x86 de Intel [Int01a], 68k de Motorola [Mot92] y HP PA-RISC [Kan96].

Los mainframes de IBM poseen un soporte más completo y extenso de hardware en aritmética decimal. En S/390 [IBM08] las operaciones básicas en punto fijo decimal, como suma, resta, multiplicación y división, mediante la utilización de la suma decimal directa. La plataforma System z9000 [Bus01] efectúa las mismas operaciones en punto fijo decimal mediante el empleo de sumadores decimal/binario combinados.

(32)

La corporación SilMinds (www.silminds.com) comercializa núcleos (cores) sintetizables escritos en VHDL y Verilog que efectúan operaciones de suma, resta, multiplicación, división y raíz cuadrada conforme al estándar IEEE 754-2008. Los cores que ofrece SilMinds no solo están destinados para el desarrollo de procesadores comerciales o ASICs, sino que también al desarrollo de sistemas basados en FPGAs.

2.3. Estándar IEEE 754-2008

El estándar para aritmética de punto flotante IEEE 754-2008 [IEEE08], es un producto del Floating Point Working Wroup de IEEE Computer Society. El estándar provee mecanismos, normativas y reglas para realizar computación en punto flotante decimal y binario. Especifica formatos y métodos, tales como funciones estándares y extendidas con precisiones simple, doble, extendida y extendible, y además recomienda formatos de intercambio. También se definen las condiciones de excepciones así como su tratamiento.

El propósito de este estándar es proveer métodos para el cómputo de números en punto flotante, de modo que ante los mismos datos de entrada, se obtienen los mismos resultados independientemente si el procesamiento se realiza en hardware, en software, o en ambos.

La existencia de un estándar para aritmética de computadoras beneficia tanto a los desarrolladores de hardware, como a los desarrolladores de software y también a los usuarios finales. Los desarrolladores de hardware tienen confianza de sus implementaciones, las cuales ofrecen las mismas soluciones que implementaciones de otros desarrolladores. Pero cuando implementan una función estándar específica, pueden comparar el rendimiento de su solución con la de otros para determinar su competitividad. Por otro lado, un estándar le permite a los desarrolladores de software, realizar códigos portables para sistemas compatibles y obtener resultados consistentes. En cuanto a los usuarios finales, ellos pueden migrar sus datos de una plataforma a otra, posibilitando que no se encuentren sujetos a un formato de almacenamiento propietario [Erl09].

Este estándar surge de la combinación y ampliación de los estándares para aritmética de punto flotante binario IEEE 754-1985 [IEEE85] y punto flotante de radix independiente IEEE 854-1987 [IEEE87]. El estándar IEEE 854-1987 carece de descripciones para los formatos de almacenamiento de números DFP. Otra limitación es que no está determinado si los operandos y resultados deben estar normalizados o no. Estas limitaciones llevaron a una moderada recepción por parte de la comunidad de usuarios y a la inclusión de aritmética DFP en una versión revisada del estándar IEEE 754-1985.

(33)

13 Luego de ocho años de borradores, revisiones y acuerdos, en Agosto del 2008 surge el estándar IEEE 754-2008 [IEEE08]. Éste define cinco formatos de números de punto flotante (tres binarios y dos decimales), así como también formatos de intercambio decimal y binario. Además define cinco modos de redondeo y cinco tipos de excepciones con sus respectivos tratamientos.

El resto de esta sección describe los aspectos más significativos del estándar vinculados a aritmética DFP.

2.3.1. Formatos decimales

El conjunto de números DFP representable en un formato en particular se define con los siguientes parámetros:

- b = 10, correspondiente a la base

- p es el número de dígitos de la mantisa (precisión) - emax el máximo exponente e

- emin el mínimo exponente e (con emin = 1- emax para todos los formatos) La tabla 2.2 muestra los valores de los parámetros para cada formato básico correspondiente a la base decimal (b = 10).

Tabla 2.2- Parámetros de los formatos básicos de números DFP.

Formatos Parámetro

decimal64 decimal128

p (dígitos) 16 34

emax 384 6144

El conjunto de datos de punto flotante representados es el siguiente: - números de punto flotante con signo, (-1)s

×10e×m, donde - s es el signo: 0 ó 1.

- e corresponde al exponente, con eZemin≤e≤emax.

- m determina la mantisa, con m = d0.d1d2··dp-1 y di

{

0,1,..,9

}

, (0≤m<10).

- dos infinitos: ±∞

- dos NaNs: qNaN (quiet) y sNaN (signaling).

En la descripción anterior, la mantisa se expresa de forma científica, con el punto decimal después del primer dígito. Dependiendo de la aplicación, muchas veces es conveniente observar a la mantisa como un entero. Por lo anterior, una manera equivalente de "entender" los números de punto flotante finitos es (-1)s

×10q×c, donde - s es el signo: 0 ó 1.

- qZeminq+p-1 ≤emax.

- c es un número entero con la forma c = d0d1··dp-1, con di

{

0,1,..,9

}

, (0≤c<10

(34)

Se define número normal como un número punto flotante decimal diferente a cero cuya magnitud es mayor o igual que 10emin. De este modo, un número normal

x se representa de la siguiente manera:

x = (-1)s×10e

×m,con m≥1 y eZ emin≤e≤emax. o alternativamente (mantisa como entero):

x = (-1)s×10q×c,con q,cZemin-(p-1)≤q ≤emax-(p-1) y c≥10p-1.

Por otro lado, un número subnormal se define como un número de punto flotante decimal diferente a cero, cuya magnitud es menor que 10emin. Por consiguiente, un

número subnormalx se representa de la siguiente manera: x = (-1)s×10emin

×m,con m<1, significa que d0=0.

o alternativamente (mantisa como entero), donde qmin = emin-(p-1): x = (-1)s×10qmin×c,con c<10p-1, significa que d0=0.

2.3.2. Formatos de Intercambio

El estándar especifica tres tipos de formatos de intercambio para números DFP: decimal32, decimal64 y decimal128. Cada formato está codificado en k bits y poseen tres campos: un campo de signo (S), un campo combinacional (G) y un campo de final de mantisa (T).

1 bit w+5 bits t = 10×J bits

S (signo)

G

(campo combinacional)

T

(campo final de mantisa)

G[0] .. G[w+4] 3J=p-1

En la tabla 2.3 se aprecia la cantidad de bits involucrados en cada campo para cada uno de los formatos. La tabla 2.4 muestra características, como cantidad de bits o rangos, de los parámetros involucrados en los distintos formatos de intercambio para números DFP.

Tabla 2.3 – Tamaño (bits) de los campos pertenecientes a los formatos de intercambio

de números de punto flotante decimal.

Campo decimal32 decimal64 decimal128

S 1 1 1

G 11 13 17

T 20 50 110

k 32 64 128

En el campo final de mantisa (T), se encuentran codificados los p-1 dígitos menos significativos correspondientes a la mantisa. Este campo posee Jdeclets (3J=p-1) de 10 bits cada uno, en los cuales el final de mantisa se encuentra codificado en decimal o

(35)

15

Tabla 2.4 – Parámetros de los formatos de intercambio de números DFP.

Parámetro decimal32 decimal64 decimal128

exponente (bits) 8 10 14

mantisa (dígitos) 7 16 34

bias de exponente 101 398 6176

e -95≤e≤96 -383≤e≤384 -6143≤e≤6144

q -101≤q≤90 -398≤q≤369 -6176≤q≤6111

Para la codificación decimal, se utiliza el formato desenly-packed decimal (DPD) para empaquetar 3 dígitos BCD en un declet. Para poder empaquetar tres dígitos en BCD (doce bits) en diez bits, este formato se basa en el aspecto que con 4 bits, existen varias codificaciones no usadas para la representación de un número decimal en BCD. Tanto la codificación de BCD a DPD como la decodificación de DPD a BCD son simples [Cow02].

El campo combinacional (de tamaño w+5 bits) determina cómo es el dato almacenado o representado, esto es si es un valor infinito, o un número punto flotante finito, o NaN. Para el caso en que se almacene un número finito, en este campo se encuentra además codificados el exponente y el dígito más significativo de la mantisa. En las tabas 2.5 y 2.6 se observa como se decodifican los números DFP a partir de campo combinacional.

Tabla 2.5 – Interpretación de campo combinacional (clasificaciones especiales)

G[0..4] G[5..w+4] T Dato representado

11111 1x..x -- qNaN

11111 0x..x -- sNaN

11110 0..0 0..0 ±∞

Obsérvese que un número punto flotante decimal puede tener múltiples representaciones. Al conjunto de representaciones para un número punto flotante determinado se lo denomina cohortedel número. Por ejemplo, si c es múltiplo de 10 y q es menor al valor máximo permitido, entonces (s, q, c) y (s, q+1, c/10) son dos representaciones del mismo número punto flotante pertenecientes al mismo cohorte.

Tabla 2.6 – Interpretación de campo combinacional (números de punto flotante finito)

Codif. de

mantisa G[0..4] Exponente Mantisa (m=d0..dp-1)

0xxxx ó 10xxx G[0]&G[1]&G[5..w+4] – bias d0 = 4G[2] + 2G[1] + G[0] d1..dp-1 = DPDtoBCD(T)

Decimal

110xx ó 1110x G[2]&G[3]&G[5..w+4] – bias d0 = 8 + G[4]

d1..dp-1 = DPDtoBCD(T)

Nota 1: x significa que puede tomar tanto el valor 0 como 1.

Nota 2: el símbolo “&” significa “concatenado con”.

(36)

2.3.3. Excepciones

El estándar especifica cinco tipos de excepciones que se indican cuando suceden. Esta indicación invoca al manejo, por defecto o alternativo, de la correspondiente excepción identificada. La implementación debe proveer el correspondiente flag de estado para cada tipo de excepción.

A continuación se detallan los cinco tipos de excepciones:

- Operación inválida: se indica cuándo no existe ningún resultado definible por el estándar. En este caso, los operandos son inválidos para la operación que se desea realizar. Ejemplos: ∞-∞, ∞×0, ∞/∞, etc.

- División por cero: se indica cuando un resultado infinito se produce por una operación entre operandos finitos.

- Overflow: cuando se excede en magnitud al número finito más grande.

- Underflow: si el resultado es diferente a cero y se encuentra estrictamente entre ±bemin.

- Inexacta:si el resultado redondeado de una operación requiere de una precisión mayor a la soportada por el formato de representación utilizado.

2.3.4. Redondeo

Este estándar define cinco tipos de redondeo que pueden ser seleccionados por el usuario mediante el correspondiente seteo de atributos:

- RoundTiesToEven: se escoge la representación más cercana al resultado obtenido. Si dos representaciones se encuentran igualmente cerca, se escoge aquella cuyo dígito menos significativo sea par.

- RoundTiesToAway: se escoge la representación más cercana al resultado obtenido. Si dos representaciones se encuentran igualmente cerca, se escoge la de mayor magnitud.

- RoundTowardPositive: se escoge la representación más cercana mayor al resultado obtenido.

- RoundTowardNegative: se escoge la representación más cercana menor al resultado obtenido.

- RoundTowardZero: se escoge la representación más cercana menor en magnitud al resultado obtenido.

2.4. Field Programmable Gate Array - FPGA

(37)

17 dispositivos para poder llevar a cabo gran variedad de tareas [Max04] [Kil07] [Gok05] [Sim15].

Al basarse en bloques lógicos pre-construidos y recursos para ruteo programables, se pueden configurar para poder implementar funcionalidades a medida de la aplicación en hardware. Para ello, solo se debe desarrollar sistemas digitales en software y compilarlas en un archivo de configuración o bitstream, que contenga información de cómo deben conectarse y configurarse los componentes. Otro aspecto significativo, es que muchas FPGAs son completamente reconfigurables, este tipo de dispositivo puede cambiar su funcionalidad en un instante, requieriendo solamente compilar un nuevo diseño, generar el archivo de configuración y programar el chip. Antiguamente los ingenieros requerían sólidos conocimiento de diseño de hardware para trabajar en esta tecnología. Sin embargo, con el aumento y evolución continua de las herramientas diseño de alto nivel, están cambiando las reglas involucradas en el uso y desarrollo en este tipo de tecnología [Nat17].

La adopción de FPGAs en la industria ha sido impulsada por el hecho que las FPGAs combinan lo mejor de los ASICs y los sistemas basados en procesadores. Ofrecen características ventajosas, dependiendo de la tecnología con que se las compare, tales como flexibilidad, rápida prototipación, rendimiento, costo de desarrollo, tiempo de llegada al mercado, fiabilidad y mantenimiento a largo plazo. Razón por la cuál, estos dispositivos se están empleando en forma creciente en aplicaciones que usualmente se implementaban con otras tecnologías, tal es el caso de ASICs, DSPs o microcontroladores genéricos.

La tecnología de los circuitos integrados ha evolucionado en las últimas cuatro décadas siguiendo la ley de Moore [Mor65], la cuál establece que la cantidad de transistores en un simple circuito integrado se duplica cada 18 (a 24) meses. Esta ley no es ajena en lo que respecta a la tecnología FPGAs, las mismas evolucionaron para poder incorporar complejos sistemas embebidos en un simple dispositivo. Pasaron de la concepción inicial de bloques configurables con interconexiones también configurables, a dispositivos que además incluyen módulos DSPs programables [Xil17a], bloques de memorias [Xil16a], procesadores [Int15] [Xil17b], entre otras.

Dos de sus principales fabricantes, Xilinx e Intel-Altera, ofrecen soluciones muy competitivas, tanto de plataformas hardware como herramientas EDA (Electronic Design Automation) de co-diseño Hardware/Software, para áreas tales como supercomputación (HPC), IIoT (Industrial Internet of Things), Cloud Computing, sistemas de visión, conectividad 5G, desarrollo de PSoC (Programmable System on a Chip), etc. [Xil17c] [Int17a].

(38)

Tabla 2.7 – Principales compañías fabricantes de FPGAs

Compañía Sitio web

Xilinx Inc. www.xilinx.com

Intel-Altera Corp. www.altera.com Microsemi Corp. www.microsemi.com Lattice Semiconductor Corp. www.latticesemi.com QuickLogic Corp. www.quicklogic.com

2.4.1. Tecnología de programación

A modo de ejemplo, en la figura 2.1 se aprecia una función programable simple de dos variables. Se observa que las celdas programables están vinculados a cada posible entrada. Significa que si se desea programar la función f (f = a.b’), se debe programar o conectar la entrada a y la entrada b’ (salida de compuerta not).

Existen diversas tecnologías que se pueden emplear para programar dispositivos programables como FPGAs. Las celdas programables pertenecientes a estos dispositivos pueden estar implementadas por fusibles, antifusibles, o memorias EPROM, EEPROM/Flash, static RAM (SRAM), etc. Cada alternativa presenta ventajas y desventajas respecto de las otras.

Figura 2.1 – Función programable simple (f = a.b’).

Tanto Xilinx como Intel-Altera, fabrican sus dispositivos con celdas programables basadas en SRAM. La principal ventaja de esta tecnología, es que los dispositivos pueden ser configurados una y otra vez, permitiendo que nuevos diseños sean testeados e implementados rápidamente con facilidad. Una desventaja significativa, es que la configuración del sistema (programación) es volátil y se pierde cuando se apaga la potencia eléctrica. Este problema se puede solucionar mediante el almacenamiento de un archivo de configuración en memorias externas al dispositivo, el cual se usa para programar las celdas SRAM cada vez que se suministra potencia eléctrica. Esta alternativa lleva a la vulnerabilidad de la propiedad intelectual del diseño.

2.4.2. Arquitectura

(39)

19 Con el paso de los años, la arquitectura de los bloques lógicos evolucionó de manera significativa. Por ejemplo, un CLB (Configurable Logic Block) de dispositivo perteneciente a la familia 7-series de Xilinx [Xil16b], posee 2 slices, donde cada slice contiene cuatro LUTs (Look-up Table) de 6 entradas, 8 elementos de almacenamiento, multiplexores (utilizados para implementar funciones de hasta 8 entradas por slice) y cadenas de acarreo en la suma.

La mayoría de las arquitecturas de las FPGAs de hoy están basadas en LUTs. Una LUT de n entradas, puede implementar cualquier función lógica de n variables. A mayor cantidad de entradas en la LUT, mayor es la funcionalidad que se puede implementar. Pero cada vez que se agrega una entrada, se duplica la cantidad de celdas SRAM. Existen estudios que indican que las LUTs de 4 entradas presentan un balance óptimo de pros y contras [Max04]. Como consecuencia de los avances en los procesos tecnológicos, Xilinx ofrece dispositivos, como es el caso de aquellos pertenecientes a las familias Virtex 5 [Xil15a], Spartan 6 [Xil11], Virtex 6 [Xil15b] y 7-series (Spartan 7, Artix-7, Kintex-7 y Virtex-7) [Xil17d], cuyas arquitecturas se basan en LUTs de 6 entradas y 2 salidas.

Debido a que la LUT es un componente basado en celdas SRAM, posee características interesantes. Una LUT no solo se puede utilizar para implementar funciones lógicas, sino que además se puede emplear para almacenar datos de manera distribuida. Por ejemplo, una LUT de 6 entradas puede configurarse como RAM de 64x1. Por lo anterior, se dice que estas FPGAs tienen la capacidad de almacenar datos en RAM distribuida mediante la configuración de las LUTs [Xil17d].

Para poder configurar (o programar) la FPGA, las celdas SRAM que componen las LUTs se encuentran conectadas en cadena. Este hecho posibilita que la LUT pueda usarse también para desplazar datos. Debido a esto, una LUT posee también la capacidad de configurarse como registro de desplazamiento. Por ejemplo, una LUT de 6 entradas se puede configurar como registro de desplazamiento de 64 bits.

Además de LUTs, multiplexores y filp-flops, los bloques lógicos configurables poseen otros elementos, tal caso es la lógica de propagación de acarreo rápida. Esta característica es de gran utilidad para la implementación eficiente de operaciones aritméticas. Tanto los slices de Xilinx como los elementos lógicos de Intel-Altera poseen esta importante capacidad.

2.4.2.1. Otros componentes

La arquitectura de las FPGAs de hoy, no solo poseen un arreglo de bloques lógicos configurables basado en LUTs, sino que además contienen componentes embebidos que mejoran el rendimiento en determinadas aplicaciones.

Referencias

Documento similar