High-Level Synthesis (HLS) es un proceso de diseño automatizado que compila descripciones algorítmicas de alto nivel, típicamente escritas en lenguajes como C, C++ o SystemC, en una implementación de hardware a nivel de Register-Transfer Level (RTL). A diferencia del diseño RTL manual, que requiere especificar explícitamente cada flip-flop y compuerta lógica, HLS infiere la arquitectura de hardware (unidades funcionales, rutas de datos, controladores) directamente del código de software. Esto incluye la asignación de operaciones a recursos de hardware, el scheduling de operaciones en el tiempo y la generación de la lógica de control necesaria para coordinar el flujo de datos y el estado.

En el mundo real, HLS es ampliamente utilizado para acelerar el desarrollo de hardware en FPGAs (Field-Programmable Gate Arrays) y ASICs (Application-Specific Integrated Circuits), especialmente para cargas de trabajo computacionalmente intensivas. Herramientas como Xilinx Vitis HLS (anteriormente Vivado HLS), Intel HLS Compiler (para FPGAs de Intel) y Synopsys Synphony HLS son ejemplos prominentes. Se aplica en dominios como el procesamiento de señales digitales (DSP), inteligencia artificial (IA) con aceleradores de inferencia, visión por computadora, y criptografía, donde la capacidad de prototipar y optimizar rápidamente arquitecturas de hardware desde un modelo de software es crucial. Permite a los ingenieros de software participar más directamente en el diseño de hardware.

Para un arquitecto de sistemas, HLS es fundamental porque permite evaluar y prototipar rápidamente aceleradores de hardware personalizados, reduciendo drásticamente el tiempo de desarrollo y el costo en comparación con el diseño RTL manual. Facilita la exploración de trade-offs entre rendimiento, área y consumo de energía al permitir la iteración rápida de diferentes implementaciones algorítmicas y directivas de HLS (como pipelining, unrolling, o partición de arreglos). Un arquitecto puede decidir cuándo es más eficiente implementar una función en software en una CPU/GPU o acelerarla en hardware usando HLS, basándose en los requisitos de latencia y throughput. Sin embargo, requiere una comprensión de cómo el código de alto nivel se traduce en hardware para escribir código 'hardware-aware' que HLS pueda optimizar eficazmente, evitando la generación de hardware ineficiente o de gran tamaño.