implantaciÓn hardware de la funciÓn...

6
ISSN 2007-1957 Ejemplar 17 junio-diciembre 2017 IMPLANTACIÓN HARDWARE DE LA FUNCIÓN TRIGONOMÉTRICA SENO CON UN CONTROLADOR FPGA USANDO VHDL y XILINX Maximino Pea Guerrero Academia de Acstica de la Escuela Superior de Ingeniera Mecnica y Elctrica del Instituto Politcnico Nacional, Zacatenco, D. F. Ciudad de Mxico, [email protected] Manuel Gonzlez Hernndez rea Acadmica de Ingeniera del Instituto de Ciencias Bsicas e Ingeniera de la Universidad Autnoma del Estado de Hidalgo, Pachuca Hidalgo, Mxico, [email protected] Jos de Jess Negrete Redondo Academia de Acstica de la Escuela Superior de Ingeniera Mecnica y Elctrica del Instituto Politcnico Nacional, Zacatenco, D. F. Ciudad de Mxico, [email protected] Oleksandr Karelin Área Académica de Ingeniería del Instituto de Ciencias Básicas e Ingeniería de la Universidad Autónoma del Estado de Hidalgo, Pachuca Hidalgo, México, [email protected] Sergio Blas Ramírez Reyna Área Académica de Ingeniería del Instituto de Ciencias Básicas e Ingeniería de la Universidad Autónoma del Estado de Hidalgo, Pachuca Hidalgo, México, [email protected] ABSTRACT One of the problems that arise when we design compact measurement and sound instruments for real-time system, is the immediate response to the input data. This is due to the fact that intend to use standard microprocessors that do not have digital signal processing functions, such as sin(x), cos(x), log(x), and other transcendental functions in their language (assembler or programming language C). In this paper we present the hardware implementation of the sin(x) function with a FPGA controlled by a Texas Instrument microcontroller. We use VHDL and XILINX tools to program Taylor-Mclaurin series, with which sin(x) function is represented. Variables and data are normalized in IEEE-754 floating point. To visualize the results, we program in C communications command interpreter between a NEXIS-2 development board, and a computational system. With these results, we implemented a simple 1000 Hz audio FPGA generator. Keywords: IEEE-754, ASIC, FPGA, VHDL, Trigonometric functions. Típicamente, los sistemas de audio así como los instrumentos de medición profesionales, cada día requieren una respuesta inmediata a varios impulsos de entrada simultáneamente. Es decir, dichos sistemas tienen que procesar en tiempo real muchas señales al mismo tiempo. Por ejemplo, cuando en un estudio de grabación, una orquesta con muchos músicos está utilizando varios canales de audio a la vez.

Upload: trancong

Post on 02-Jul-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

ISSN 2007-1957

Ejemplar 17 junio-diciembre 2017

IMPLANTACIÓN HARDWARE DE LA FUNCIÓN TRIGONOMÉTRICA SENO

CON UN CONTROLADOR FPGA USANDO VHDL y XILINX

Maximino Pena Guerrero

Academia de Acustica de la Escuela Superior de Ingenieria Mecanica y Electrica del Instituto

Politecnico Nacional, Zacatenco, D. F. Ciudad de Mexico, [email protected]

Manuel Gonzalez Hernandez

Area Academica de Ingenieria del Instituto de Ciencias Basicas e Ingenieria de la Universidad

Autonoma del Estado de Hidalgo, Pachuca Hidalgo, Mexico, [email protected]

Jose de Jesus Negrete Redondo

Academia de Acustica de la Escuela Superior de Ingenieria Mecanica y Electrica del Instituto

Politecnico Nacional, Zacatenco, D. F. Ciudad de Mexico, [email protected]

Oleksandr Karelin

Área Académica de Ingeniería del Instituto de Ciencias Básicas e Ingeniería de la Universidad

Autónoma del Estado de Hidalgo, Pachuca Hidalgo, México, [email protected]

Sergio Blas Ramírez Reyna

Área Académica de Ingeniería del Instituto de Ciencias Básicas e Ingeniería de la Universidad

Autónoma del Estado de Hidalgo, Pachuca Hidalgo, México, [email protected]

ABSTRACT

One of the problems that arise when we design compact measurement and sound instruments for

real-time system, is the immediate response to the input data. This is due to the fact that intend to

use standard microprocessors that do not have digital signal processing functions, such as sin(x),

cos(x), log(x), and other transcendental functions in their language (assembler or programming

language C). In this paper we present the hardware implementation of the sin(x) function with a

FPGA controlled by a Texas Instrument microcontroller. We use VHDL and XILINX tools to

program Taylor-Mclaurin series, with which sin(x) function is represented. Variables and data are

normalized in IEEE-754 floating point. To visualize the results, we program in C communications

command interpreter between a NEXIS-2 development board, and a computational system. With

these results, we implemented a simple 1000 Hz audio FPGA generator.

Keywords: IEEE-754, ASIC, FPGA, VHDL, Trigonometric functions.

Típicamente, los sistemas de audio así como los

instrumentos de medición profesionales, cada día

requieren una respuesta inmediata a varios

impulsos de entrada simultáneamente. Es decir,

dichos sistemas tienen que procesar en tiempo

real muchas señales al mismo tiempo. Por

ejemplo, cuando en un estudio de grabación, una

orquesta con muchos músicos está utilizando

varios canales de audio a la vez.

ISSN 2007-1957

Ejemplar 17 junio-diciembre 2017

Por otra parte, los procesadores de señales

digitales que utilizan los sistemas de audio,

requieren una cantidad finita de procesamiento

matemático y que interfiere en la respuesta a

tiempo real. Esto se debe a que en el proceso se

utilizan muchos ciclos de reloj.

A principios de los 80s, se desarrollaron procesadores especializados en el procesamiento matemático llamados procesadores de punto flotante. Normalmente se pegaban al procesador principal dejando la parte matemática a un circuito integrado especializado quitándole la carga de trabajo a la CPU (Central Process Unit). Se inicia así lo que se conoce como procesamiento en paralelo.

Debido a la ley de More, la construcción de circuitos integrados debería ser automatizada, pu-es en ese momento el hardware sería cada vez más reducido y sus sistemas de diseño ya no serían prácticos. Para ello se requiere al diseño asistido por software. Uno de estos sistemas de diseño es el desarrollo del lenguaje computacional VHDL (VHSIC, -Very High Speed Integrated Circuits-, Hardware Description Language), por esta razón, las versiones de procesadores cambian más rápidamente [1].

Con este lenguaje computacional ahora es posible diseñar circuitos integrados ASIC ( Application Specific Integrated Circuit) CPLDs (Complex Programmable Logic Device), FPGA (Field Programmable Gate Array), dentro de una oblea de silicio VLSI (Very Large Scale Integration), Hoy en día muchas de las funciones y procesos que contiene el software de un sistema computacional son trasladadas a hardware debido a la carga y repetición constante de llamadas al sistema operativo. En sistemas de tiempo real esto tiene mayor

relevancia, debido a su importancia en el control de máquinas, en lo que a veces dependen vidas humanas (pilotos automáticos en aeronáutica, instrumentación de supervisión médica, entre muchas otras aplicaciones de sistemas automáticos). Por otro lado, en el diseño de estos sistemas a veces es necesario construir ad hoc circuitos integrados que realicen una tarea específica. Esto no es tan sencillo, pues es necesario hechar mano a los fundamento básicos de los métodos numéricos que describen las funciones básicas del procesamiento matemático. Cabe mencionar que un sistema digital elemental solamente puede sumar y restar (no hay multiplicación y división). Dicho sistema digital solo tiene implementado las funciones lógicas AND, OR, XOR y NOR. Con ellas se implementan autómatas determinísticos de registro FLIP-FLOPs (memoria), contadores (apuntadores de programa), contadores de anillo para desplazamiento a la derecha (división por 2) o izquierda (multiplicación por 2). Con estas funciones básicas se implementa de forma algorítmica (microprograma en hardware) la multiplicación y la división. Con esta infraestructura de hardware es posible implementar los algoritmos que describen muchas de las funciones algebráicas y las funciones trascendentes. Una función algebráica es aquella que satisface una ecuación polinomial [4], por ejemplo,

Una función que no es algebráica se considera función trascendente [4], por ejemplo sin(x),

ln(x), entre otras. Ambos tipos de funciones requieren de procesamiento hardware con punto flotante.

ISSN 2007-1957

Ejemplar 17 junio-diciembre 2017

Es posible construir un circuito integrado para cada una de dichas funciones, los cuales sean administrados por un procesador central. Esto nos lleva a sistemas computacionales con procesamiento en paralelo. La idea es que cada chip responda a un sólo pulso de reloj. Esto se logra buscando la manera en que el código VHDL sea lo más eficiente posible. Es evidente que dentro del chip existen retardos debido a los miles de transistores y compuertas lógicas que conforman los CLBs (Configurable Logic Block) con los cuales está construido un FPGA, pero esa es la parte que nos invita a investigar los algoritmos más profundamente con el fin de reducir al máximo el efecto de dichos retardos. En este trabajo presentamos el desarrollo de un ASIC FPGA con la función sin(x). Este FPGA es un Spartan-3E de XILINX, y forma parte de una tarjeta de desarrollo NEXYS-2 Spartan-3E 35500 FG320 de DIGILENT. Este chip es controlado por un microcontrolador MCU-TM4C123G H6PMI de una tarjeta de desarrollo TIVA C Series MCU-TM4C123G de Texas Instrument. Cabe decir que primero utilizamos un FPGA Spartan-6 XC6SLX4-2CPG196 contenido en una mini tarjeta de desarrollo CMOD-S6 de DIGILENT, pero tuvimos problemas de capacidad de CLBs. Finalmente, como resultado pudimos construir un generador de audio de 1000 Hz. Para facilitar el desarrollo del trabajo, programamos en C/C++ una interfase software de comunicaciones entre dicho sistema de desarrollo y un sistema computacional (Mac, PC). Esta interfase es un interprete de comandos similar al command de MS-DOS, o al shell de UNIX. Uno de los comandos hace que el procesador MCU coloque el argumento de sin(x) a la entrada del FPGA, ordena con un pulso a que

inicie el cálculo de sin(x), espera, y recoje el resultado de y=sin(x). El valor de y se desnormaliza y se envía al sistema computacional para mostrarse en la pantalla. Otro comando hace que se inicie el proceso de generar una frecuencia de 1000 Hz, la cual se escucha como un tono constante. Programando sin(x) con VHDL De una manera formal, la serie que describe la función sin(x) se conoce como serie de Taylor (Expresión [1]). Cuando a = 0 entonces se conoce como serie de McLaurin.

donde n! es el factorial de n, y f (n)(0) es la enésima derivada de f en el punto a=0. Desarrollando la serie tenemos

Sin embargo, para n entero positivo muy grande 1/n! es muy pequeño, y los términos para n=10 o mayores, no son significativos en la Expresión [2]. Para resolver este problema usamos la serie de Maclaurin can base en el método de diferencias [2][3].

Para obtener un resultado de y=sin(x), escribimos el siguiente código en C/C++ de acuerdo con la Expresión [3]. Note que la

ISSN 2007-1957

Ejemplar 17 junio-diciembre 2017

variable dependiente y es aprox en dicha expresión.

Podemos calcular cualquier valor de sin(x), sin embargo es necesario normalizar el valor de x de tal manera que éste se encuentre en el rango de 0.0 a 6,28 [0, 2]. Esto se logra con la Expresión [4].

donde n es cualquier valor real en radianes, y mod es la operación módulo entre dos números reales. Debido a que el cálculo a que sin(x) trabaja con valores reales, y que los sistemas digitales solo procesan ceros y unos, es necesario establecer una norma de representación numérica. Esto se logra utilizando el formato IEEE-764 (Institute of Electrical and Electronics Engineer) a 32 bits. Un valor real IEEE-754 de simple precisión tiene 32 bits; 23 bits (0-22) para la parte fraccional (mantisa), 8 bits para el exponente (23-30), y 1 bit (31) para el signo [5]. IEEE-754 también define las cuatro operaciones

básicas: multiplicación, división, suma, y resta. Pruebas y Resultados Utilizamos ISIM, un simulador de XILINX que muestra gráficamente el comportamiento del FPGA, así como un programa en C/C++ para verificar los resultados. En la Figura (1) se muestran resultados tanto en VHDL como en C/C++. Por otro lado, las Figuras (2) y (3) muestran el comportamiento utilizando software de XILINX. La Figura (4) muestra el comportamiento de todos los sistemas utilizando la terminal de comandos.

Figura 1: Resultados numéricos VHDL vs C/C++.

Figura 2: Simulación ISE Wwb Pack del número 3.141615.

Figura 3: Simulación ISE Web Pack del número 6.15. Para la entrada y salida de datos con una terminal de comandos, utilizamos TeraTerm (simulador de terminal). La entrada es el argumento de y=sin(x) en radianes. El resultado se muestra también en la terminal. Cabe mencionar que en el proceso se traducen valores ASCII a su respectiva representación

ISSN 2007-1957

Ejemplar 17 junio-diciembre 2017

digital. Además, el resultado que se muestra en la terminal es aquel que fue calculado por el FPGA y recogido por el microcontrolador de TIVA C.

Figura 4: Simulación TIVA C, NEXYS-2 y una terminal de comandos. Conclusiones Para implementar sin(x) con VHDL se utilizan muchos de los CLBs que conforman un FPGA. En el proceso de implementación observamos que el FPGA Spartan 6 del CMOD-S6, que primeramente utilizamos, se encuentra limitado en CLBs. Cabe mencionar que este problema incide en la precisión del resultado, pues el número dígitos despues del punto depende de dicha capacidad. El algoritmo por el método de diferencias de la serie de MacLaurin contiene varias iteraciones. Estas no se pueden completar en un FPGA básico como Spartan 6 del CMOD-S6 que sólo permite una iteración. Tratando de solucionar este problema, intentamos utilizar un FPGA de mayor capacidad: el FPGA Spartan3E contenido en una tarjeta de desarrollo NEXYS 2. La capacidad de este FPGA triplica la capacidad del CMOD-S6, lo cual es suficiente para el presente proyecto. Debido a que para nuestro objetivo sólo necesitamos por lo menos cuatro dígitos fraccionarios (cuatro), bastan seis iteraciones

del algoritmo para obtener un resultado aceptable del cálculo de sin(x). Si queremos obtener una precisión con más dígitos, entonces se utilizarían sistemas con FPGAs de mayor capacidad. Cabe decir que en la escritura del código VHDL, se utilizó el método de procedimientos (procedure), a diferencia del método de cableado (NetList) o el método de componentes (component). Por último, para facilitar la interactividad hombre-máquina, fué necesario programar en C/C++ una interfase software de comunicaciones entre los sistema de desarrollo de Texas Instrument MCU-TM4C123G, CMOD-6, NEXYS-2, y un sistema computacional (Mac, PC). Es decir, programamos un interprete de comandos similar al MS-DOS o el Shell de UNIX para simular una terminal de comandos básica. Un comando hace que el microcontrolador MCU coloque el argumento de sin(x) a la entrada del FPGA, ordena con un pulso a que inicie el cálculo de sin(x), espera, y por último recoje el resultado de y=sin(x). El valor de y se desnormaliza y se envía al sistema computacional para mostrarse en la pantalla. Otro comando hace que se inicie el proceso de generar una frecuencia de 1000 Hz, la cual se escucha como un tono constante.

ISSN 2007-1957

Ejemplar 17 junio-diciembre 2017

BIBLIOGRAFÍA

[1] Ashenden Peter J., (2002). The Designer's Guide

to VHDL, Second Edition, Acadenic Press,MK

Morgan Kaufmann Publishers, USA, 759 pgs.

[2] Chapra Steven C., Raymond P. (2003). Canale,

Métodos Numéricos Para Ingenieros, McGraw-Hill,

4a ed. 969 pgs.

[3] Jamsa Kris, Lenguaje C: (1986). Bilioteca de

Funciones, McGraw-Hill, 288 pgs.

[4] Spiegel Murray R., Manual de Fórmulas y Tablas

Matemáticas, (1981). Serie Schaum, McGraw-Hill,

1981. 271 pgs.

[5] Woods Roger, John McAllister, Ying Yi, Gaye

Lightbody. (2008). FPGA-based Implementattion of

Digital Signal Processing, Addison-Wiley, 364 pgs.