Metodología de diseño digital para FPGAs desde lenguaje C orientada al “Do It Yourself”

Buezo Tordesillas, Raquel (2016). Metodología de diseño digital para FPGAs desde lenguaje C orientada al “Do It Yourself”. Proyecto Fin de Carrera / Trabajo Fin de Grado, E.T.S.I. Industriales (UPM).

Description

Title: Metodología de diseño digital para FPGAs desde lenguaje C orientada al “Do It Yourself”
Author/s:
  • Buezo Tordesillas, Raquel
Contributor/s:
Item Type: Final Project
Degree: Grado en Ingeniería en Tecnologías Industriales
Date: July 2016
Subjects:
Freetext Keywords: FPGA, Hardware Description Language, Do It Yourself, microprocesador, bus, registro, hardware, software
Faculty: E.T.S.I. Industriales (UPM)
Department: Automática, Ingeniería Eléctrica y Electrónica e Informática Industrial
Creative Commons Licenses: Recognition - No derivative works - Non commercial

Full text

[thumbnail of TFG_RAQUEL_BUEZO_TORDESILLAS.pdf]
Preview
PDF - Requires a PDF viewer, such as GSview, Xpdf or Adobe Acrobat Reader
Download (2MB) | Preview

Abstract

El presente Trabajo Fin de Grado es una primera aproximación dentro de un proyecto a más largo plazo en el que se pretende estudiar una metodología para facilitar el diseño de circuitos digitales de mediana complejidad a individuos con cierta experiencia en programación software. Para ello se creará un sencillo entorno de desarrollo que mediante el empleo del lenguaje C, permitirá a los usuarios realizar diseños digitales para ser integrados dentro de una arquitectura constituida por un microcontrolador y una FPGA.
Una FPGA es un dispositivo hardware reconfigurable compuesto de celdas lógicas, con el objetivo de realizar diseños digitales concretos. Esto permite implementar de manera flexible un sistema específico para cada tarea y al mismo tiempo ofrecer todas las ventajas del hardware en cuanto a unos niveles de eficiencia superiores a los que se podría llegar con un microprocesador. Gracias a los diseños hardware optimizados que se consigue en estos dispositivos, se logra acelerar considerablemente la ejecución además de reducir el consumo.
Sin embargo, la mayor desventaja de las FPGAs radica en la fase de descripción para realizar un determinado diseño. Esto se debe a la dificultad intrínseca de los circuitos digitales y a la necesidad de emplear lenguajes de descripción hardware (HDL por sus siglas en inglés, Hardware Description Language). Estos lenguajes, aunque formalmente similares a los lenguajes de programación software, presentan un nivel de dificultad mucho mayor, principalmente debido a la existencia de sentencias concurrentes y sentencias secuenciales que requieren conocimientos hardware para estructurar bien el diseño. Actualmente, existen muchos menos desarrolladores hardware que programadores software, por lo que se está infrautilizando el potencial de los dispositivos tipo FPGA.
Por otro lado, iniciativas como el ecosistema Arduino han mostrado que es posible reducir la complejidad de los procesos de diseño si se disponen de las herramientas y la metodología adecuadas. En este sentido, y en lo que al desarrollo del software y sistemas empotrados se refiere, Arduino ha “democratizado” el acceso al diseño de sistemas embebidos, y lo que hace unos pocos años era ámbito casi exclusivo de universidades y empresas es ahora accesible por usuarios sin el mismo nivel de formación.
Sin embargo, esta democratización en el desarrollo software no ha tenido su paralelo en el desarrollo de diseños digitales directamente en hardware. Por ello, surge la idea de la creación de una plataforma que facilite el diseño de hardware, aprovechando para ello el uso de lenguajes ya conocidos por este tipo de usuarios, como es el lenguaje C. La concepción global consiste en la creación de un entorno de desarrollo, un preprocesador y una herramienta de síntesis, posibilitando que el usuario describa funcionalidades hardware de forma sencilla mediante lenguaje C, que posteriormente serán traducidas mediante herramientas de síntesis digital, e integradas de forma casi transparente para el usuario dentro de una arquitectura que incluye un microprocesador y los módulos hardware desarrollados por el usuario.
Para alcanzar el objetivo propuesto, el desarrollo del trabajo se ha dividido en varias fases:
La primera fase se centró en la investigación del ámbito “Do It Yourself” en el que se impulsan proyectos de todo tipo para ayudar a principiantes a adquirir conocimientos de una gran variedad de disciplinas y a aplicarlos en áreas diversas. Después de un análisis de las características de los proyectos existentes en el campo de la electrónica se destacó Arduino para tomarlo como referencia en el desarrollo del proyecto.
La decisión de fijarse en Arduino fue debida a su éxito como proyecto en la comunidad DIY, que ha ayudado a mejorar el interés para crear y diseñar, y la capacidad para resolver problemas en los distintos niveles de educación. De Arduino hay que destacar su sencillo entorno de desarrollo (IDE), su ventajosa biblioteca de funciones, y su excelente metodología docente, que en conjunto han logrado simplificar el diseño de sistemas empotrados para usuarios noveles.
En la segunda fase, se diseñaron dos módulos y una interfaz genérica en VHDL (el lenguaje de descripción hardware elegido para este proyecto), para ser implementados en la FPGA de la placa de ensayos.
La necesidad de crear una interfaz surge por la existencia de solamente dos puertos bidireccionales (de 8 bits) entre el microcontrolador y la FPGA de la placa de ensayos. Es por eso que se utiliza uno de los puertos como bus multiplexado de datos y direcciones, y el segundo puerto para mandar las señales de control desde el microprocesador a la FPGA que se considera siempre “esclava”.
En la interfaz genérica se define entonces el protocolo empleado para la comunicación entre el microprocesador y la FPGA integrados en la misma placa. Se tienen en cuenta los cuatro posibles escenarios de comunicación entre los dos dispositivos, que permiten la escritura y lectura de datos y direcciones. Para decidir en qué escenario está, la interfaz interpreta las señales de control procedentes del microprocesador y en función de estas, lee o escribe un dato o una dirección sobre el bus de datos y direcciones.
En cuanto al diseño de los módulos hardware, se eligió llevar a cabo un bloque para generar señales PWM y un bloque para controlar el funcionamiento de tiras de LEDs. La decisión tomada sobre la elección de estos bloques concretos, fue debida al nivel de complejidad medio que implica su diseño en VHDL y de cara al futuro intento de descripción mediante un subconjunto de lenguaje C.
Esta fase sirvió de aprendizaje del lenguaje de descripción hardware y sus dificultades, además de para crear dos módulos “tipo” útiles.
Finalmente, en la tercera fase se ha planteado una primera propuesta para la descripción hardware mediante un subconjunto de datos y estructuras de C. En esta propuesta se expone un template a seguir en la descripción hardware mediante el uso de lenguaje C. En este template, primero se declaran las variables globales que tras la síntesis, generarán registros (en el diseño digital) a los que se tendrá acceso desde el programa. Después se declaran las variables locales del bloque, que serán justamente las variables locales del proceso en VHDL de ese módulo. Además, existirán dos funciones comunes a todas las descripciones; la primera será el SetupHardware donde se realice la asignación de las distintas variables a los pines de entrada/salida de la placa. Y la segunda será la función HardwareLoop donde se describirá la funcionalidad del diseño mediante el subconjunto especificado de datos y estructuras de C.
Para probar la viabilidad de la propuesta, se han descrito en C los mismos módulos realizados en VHDL en la segunda fase, y se ha conseguido demostrar la sencillez de la programación en C (bajo la arquitectura estándar tipo microcontrolador) frente a la descripción hardware con VHDL.

More information

Item ID: 43716
DC Identifier: https://oa.upm.es/43716/
OAI Identifier: oai:oa.upm.es:43716
Deposited by: Biblioteca ETSI Industriales
Deposited on: 20 Oct 2016 06:26
Last Modified: 20 Oct 2016 06:26
  • Logo InvestigaM (UPM)
  • Logo GEOUP4
  • Logo Open Access
  • Open Access
  • Logo Sherpa/Romeo
    Check whether the anglo-saxon journal in which you have published an article allows you to also publish it under open access.
  • Logo Dulcinea
    Check whether the spanish journal in which you have published an article allows you to also publish it under open access.
  • Logo de Recolecta
  • Logo del Observatorio I+D+i UPM
  • Logo de OpenCourseWare UPM