Comparación de enfoques de desarrollo HDL y HLL en FPGA para aplicaciones de procesamiento de imágenes
Authors:   , Millón Roberto Ariel 
Published: February 2022

Desde su invención a medidados de los 90, las FPGA han destacado por su gran poder de cómputo, bajo consumo energético y alta flexibilidad al reconfigurar su arquitectura interna para adaptarse a las aplicaciones. Esto convirtió a las FPGA en una excelente alternativa frente a los ASIC que presentaban una arquitectura fija y prolongados tiempos de diseño y fabricación, a pesar que contaban con eficiencia energética y rendimientos superiores a otras tecnologías. Una de las áreas que más se favoreció con la incorporación de FPGA es el procesamiento digital de imágenes, la cual consiste de técnicas y algoritmos computacionales que se aplican sobre una imagen para extraer información de ella o mejorar sus características. A pesar de sus virtudes, las FPGA no tuvieron la aceptación esperada. Los lenguajes tradicionales de descripción de hardware (HDL) para programar FPGA como VHDL y Verilog resultaron poseer demasiadas palabras, ser complejos y propensos a errores. Esto, sumado a la creciente complejidad de los sistemas y los acotados tiempos de mercado, limitaron su uso.% a un grupo reducido de especialistas en hardware. Es por ello que desde el año 2000, los fabricantes comenzaron a ofrecer herramientas de desarrollo de alto nivel (HLS) como Catapult C, Bluespec y Autopilot para aumentar el nivel de abstracción y reducir la complejidad en el desarrollo de sistemas. Las HLS obtienen una descripción HDL del sistema a partir de un diseño en lenguaje de alto nivel (HLL) como C, C++ o System C. Esto permitió a los desarrolladores de software utilizar lenguajes de alto nivel para diseñar sistemas en FPGA y beneficiarse con las ventajas de esta tecnología. A su vez, los fabricantes comenzaron a incorporar núcleos de procesamiento x86 y ARM a las FPGA lo que favoreció aún mas el uso de HLL. Estas arquitecturas heterogeneas denominadas Sistemas en Chip (SoC) permitieron balancear la carga computacional entre software y hardware utilizando el mismo algoritmo de alto nivel. Sin embargo, los HLL fueron creados para desarrollar aplicaciones que ejecuten en procesadores secuenciales, por lo que presentaron algunos inconvenientes al ser utilizados en FPGA de naturaleza concurrente. Como consecuencia, los HLL incorporaron extensiones y directivas para suplir algunas falencias y permitir, entre otras cosas, sintetizar interfaces de comunicación, describir señales de cualquier longitud de bits y ejecutar tareas en forma concurrente. Por otro lado, se impusieron restricciones al lenguaje, por ejemplo, no permitir el uso de memoria dinámica. Por lo tanto, al momento de elegir un lenguaje de programación para FPGAs resulta indispensable conocer sus fortalezas y debilidades. Es por ello que esta investigación tiene como objetivo general comparar los enfoques de desarrollo HDL y HLL en FPGA con respecto a las prestaciones (rendimiento, uso de recursos y esfuerzo de programación) de sus implementaciones para aplicaciones de detección de contornos de imágenes. Para realizar el estudio comparativo, se eligió como caso de estudio un filtro de detección de contornos Sobel, ya que al ser un filtro convolucional, resulta representativo de muchos otros. Luego, se desarrollaron dos implementaciones completas y funcionales siguiendo los enfoques HDL y HLL. Ambas propuestas fueron sometidas a pruebas sobre una plataforma SoC ZYBO usando cuatro imágenes extraídas de repositorios públicos. El diseño, implementación e integración de cada sistema se realizó con las herramientas de Xilinx Vivado 2019.1, Vivado HLS 2019.1 y XSKD 2019.1, sin el uso de librerías de imagen/video, sistema operativo o software adicional. Los resultados obtenidos demostraron que la implementación HDL es levemente superior a la versión HLS en cuando a eficiencia en el uso de recursos y rendimiento. Respecto al primero, la versión HDL empleó menor cantidad de recursos aunque en ninguna de las implementaciones representó una restricción de diseño. En cuanto al rendimiento, la versión HDL obtuvo menor throughput, latencia y tiempo de ejecución. En el caso de este último, la versión en HDL alzanzó una aceleración mayor a 6x en la imagen de 512x512, aunque esa diferencia disminuyó al aumentar el tamaño de las imágenes obteniendo una aceleración de sólo 1.4x en la imagen de tamaño 1920x1080. Sin embargo, el esfuerzo de programación en la implementación de HDL fue significativamente mayor. El diseño en HDL requirió especificaciones de bajo nivel, como la descripción de interfaces AXI4 y el solapamiento de tareas, que complejizaron el algoritmo, a diferencia del diseño de alto nivel que resolvió ambas especificaciones por medio de directivas de compilador. En consecuencia, la descripción en HDL no sólo aumentó el tiempo de desarrollo sino que los diseños tuvieron más líneas de código (SLOC), fue más difícil de programar y menos reutilizable respecto a la versión de alto nivel. Luego del análisis de los resultados obtenidos se concluyó que el esfuerzo de programación requerido por HDL fue significativamente mayor respecto al de HLS y sólo se obtuvo una leve mejora en uso de recursos y rendimiento. En contextos similares a los de este estudio, HDL sólo resultaría conveniente en los diseños donde el uso de recursos y/o el tiempo de respuesta fueran parámetros de diseño sumamente críticos. De otra forma, HLS es una mejor opción que permite reducir significativamente el esfuerzo de programación y el tiempo de desarrollo.