TFM: Diseño y análisis de estrategias para el co-diseño hardware/software

El principal objetivo de este proyecto, es el de caracterizar los parámetros más importantes en el diseño de sistemas empotrados (tiempo de ejecución, consumo, uso de memoria, área, etc.) de una misma aplicación implementada de diferentes formas, para ver las ventajas y desventajas de cada una de las estrategias de co-diseño hardware/software.

La aplicación elegida para este propósito se basa en la utilización del Convertidor de Analógico a Digital (CAD) disponible en la tarjeta ZYBO Board de Xilinx. Esta tarjeta pertenece a la familia Zynq 7000, que está orientada al diseño de sistemas empotrados incluyendo además de una FPGA un microcontrolador ARM embebido. Inicialmente, se ha realizado un control del convertidor sobre máquina desnuda. A continuación, se ha introducido el sistema operativo Linux y se ha realizado un controlador para la lectura del hardware. Se ha elegido la utilización de un módulo integrado en la tarjeta, para analizar la diferencia de prestaciones a la hora de acceder a señales externas, así como la diferencia de complejidad en el diseño y flexibilidad de cada una de estas implementaciones.

Posteriormente, se continuó con el procesado de los datos obtenidos de la lectura del CAD realizando una Transformada de Fourier Rápida (FFT). Se ha elegido este tipo de procesado por ser una funcionalidad típica de los sistemas de procesado de señal, y que requiere alta capacidad de cómputo. Para este cometido, inicialmente se implementó un controlador software para el núcleo del sistema operativo Linux que realice el procesado. Finalmente, se utilizó un módulo hardware para la realización del cálculo, y el controlador correspondiente para la lectura del hardware. Así, es posible comparar la implementación de un cálculo complejo mediante software, o mediante la utilización de un módulo hardware.

Finalmente, se realizaron medidas de tiempo de ejecución, potencia instantánea, energía consumida, porcentaje de cpu y memoria utilizado, y área de la FPGA utilizada para cada una de las aplicaciones.

Gran parte de este proyecto, consiste en el manejo de las distintas herramientas que se utilizan en el proceso de co-diseño hardware/software. En este caso, debido a la plataforma elegida (ZYBO Board de Xilinx) se utilizan las herramientas proporcionadas por el fabricante, dado que son las que dan soporte al hardware utilizado.

En la parte hardware, se utiliza durante todo el proceso la herramienta Vivado Design Suite de Xilinx con el objetivo de configurar la lógica programable necesaria para cada una de las fases del proceso de diseño. Esta herramienta es muy potente, y ofrece múltiples funcionalidades de las cuales en este proyecto se utiliza un pequeño aunque significativo porcentaje.

vivado

En la parte software, se distingue entre la herramienta utilizada para programar aplicaciones en máquina desnuda, y la utilización del sistema operativo Linux. Durante el proceso de co-diseño, especialmente cuando se incluye el uso de un sistema operativo, es importante tener presente un esquema de la arquitectura del sistema y para qué se utiliza cada una de las herramientas.

diagrama_basico

Para la programación de aplicaciones en máquina desnuda, se utiliza la herramienta Software Development Kit (SDK) también de Xilinx. Esta herramienta, se integra perfectamente con Vivado, de forma que permite el desarrollo simultáneo de hardware y software característico del co-diseño. En este caso el esquema anterior se simplifica quedando solo una parte software que accede al hardware directamente sin sistema operativo.

sdk

Para la introducción del sistema operativo Linux, se utiliza también la herramienta SDK en la configuración. El desarrollo de aplicaciones en espacio de usuario y controladores para el sistema operativo Linux, se realiza sobre otro entorno también Unix utilizando el editor convencional gedit. En correspondencia con el esquema anterior, serán los controladores en el núcleo del sistema operativo los que permitan el acceso a hardware, y serán las aplicaciones en espacio de usuario las encargadas de utilizarlos para la realización del acceso de lectura o escritura necesario en cada momento. Además, los controladores pueden realizar procesado software liberando de esta carga a las aplicaciones en espacio de usuario, o incluso, ser ésta su única tarea y no realizar acceso alguno a hardware, repartiendo así la carga de procesado entre el núcleo del sistema operativo y el espacio de usuario.