María Freire Hermelo | Investigadora
La evolución de los dispositivos programables, como FPGAs, se ha acelerado mucho en los últimos años en un intento por satisfacer las demandas del mercado. Algunas de las más importantes son la reducción del tiempo necesario para desarrollar un producto con respecto a ASICs o la mayor explotación del paralelismo que ofrecen las FPGAs en comparación con CPUs o incluso GPUs. Si bien estas demandas son muy ambiciosas, no lo son menos las soluciones que los grandes fabricantes como Altera, con OpenCL SDK, y Xilinx, con Vivado HLS, están poniendo en marcha.
Uno de los primeros avances, que supuso una revolución en las arquitecturas, fue el lanzamiento de dispositivos SoC (System on Chip) que integran en un único chip procesador y lógica programable, es decir, software y hardware. Esta dualidad permite a los SoCs reunir lo mejor de ambos mundos: la flexibilidad y el reducido tiempo de desarrollo del software y la alta tasa de procesado del hardware. Sin embargo, la dificultad en el diseño de sistemas para dispositivos SoC radica en alcanzar el equilibrio que dote al producto final de la versatilidad deseada sin dejar por ello de alcanzar la velocidad de trabajo necesaria. Una solución eficaz consistiría en implementar en lógica programable las funciones software que consumen más tiempo en ejecutarse. Esta alternativa está dando lugar a una nueva revolución, protagonizada por herramientas de síntesis de alto nivel que traducen las funciones que se desean acelerar en código sintetizable en la FPGA.
Estas herramientas de síntesis, como Vivado HLS y OpenCL SDK, permiten generar una implementación para FPGA a partir de una implementación en lenguaje de alto nivel para un procesador. Se evita así tener que realizar un diseño hardware adicional en el que el desarrollador volvería a implementar el algoritmo en lenguaje de descripción hardware, debiendo gestionar la lógica de la FPGA: recursos, transferencias entre registros,…
Por ejemplo, en Vivado HLS, el algoritmo se diseña en C/C++/System C y se depura en este mismo entorno de desarrollo. Posteriormente, se sintetiza el algoritmo generando el código hardware o RTL, siendo necesario añadir las directivas adecuadas para conseguir un buen funcionamiento en términos de latencia y capacidad de procesado. Finalmente, el RTL generado se exporta a un bloque con la interfaz más adecuada al sistema donde va a ser integrado.
En el caso de OpenCL SDK, la implementación se realiza en OpenCL, estándar de programación en paralelo de sistemas heterogéneos. A partir de ahí, el flujo de diseño es muy similar al de Vivado HLS. El SDK de Altera convierte automáticamente las funciones núcleo en aceleradores hardware añadiendo las interfaces correspondientes.
Así, en un análisis inicial, estas herramientas parecen poder satisfacer las demandas de mercado planteadas al inicio de este artículo. Por un lado, automatizan algunos de los procesos más complejos del flujo de diseño hardware, de modo que permiten reducir el tiempo de desarrollo de un producto con respecto a ASICs. Por otro lado, permiten implementar en lógica las funciones software que consumen más ciclos de CPU, acelerando su ejecución.
Consciente de la utilidad que estas herramientas pueden llegar a tener, Gradiant está manteniendo un estrecho seguimiento de su evolución y está desarrollando capacidades en este ámbito.