Articulo de referencia

Impulso C

Impulse C es un lenguaje de programación de alto nivel utilizado en el codiseño de software y hardware. [ 1 ] Es un subconjunto del lenguaje de programación C combinado con una ...

Impulse C es un lenguaje de programación de alto nivel utilizado en el codiseño de software y hardware. [ 1 ] Es un subconjunto del lenguaje de programación C combinado con una biblioteca de funciones compatible con C que admite programación paralela , en particular para la programación de aplicaciones destinadas a dispositivos FPGA . Es desarrollado por Impulse Accelerated Technologies de Kirkland, Washington.

Descripción general

La herramienta de síntesis de alto nivel CoDeveloper incluye un compilador Impulse C y una biblioteca de funciones relacionada, diseñada para el desarrollo de aplicaciones basadas en FPGA. Impulse C es compatible con el estándar ANSI C , lo que permite utilizar herramientas C estándar para diseñar y depurar aplicaciones dirigidas a FPGA. El compilador Impulse C acepta un subconjunto de C y genera hardware FPGA en forma de archivos de lenguaje de descripción de hardware (HDL) . Impulse C permite a los diseñadores de sistemas embebidos y programadores de software utilizar dispositivos FPGA para la aceleración de aplicaciones en lenguaje C.

Impulse C se distingue del C estándar en que proporciona un modelo de programación paralela para plataformas mixtas de procesadores y FPGA. Para ello, Impulse C incluye extensiones a C, en forma de funciones y tipos de datos, que permiten que las aplicaciones escritas en C estándar se adapten a arquitecturas paralelas de grano grueso que pueden incluir procesadores estándar junto con hardware FPGA programable.

Las herramientas de Impulse C incluyen herramientas de cosimulación de hardware/software, así como tecnología de planificación/optimización de C a RTL que se utiliza para asignar elementos de la aplicación al hardware mediante herramientas de síntesis lógica FPGA.

Modelo de programación

Impulse C admite una variante del modelo de programación de procesos secuenciales comunicantes (CSP), manteniendo la compatibilidad con herramientas estándar de C como depuradores y analizadores de rendimiento. Impulse C está diseñado para aplicaciones de flujo de datos y procesamiento en tiempo real, pero también admite modelos de programación alternativos, incluyendo el uso de memoria compartida como mecanismo de comunicación.

En una aplicación de transmisión de datos en Impulse C, los procesos de hardware y software se comunican principalmente a través de flujos de datos almacenados en búfer, implementados directamente en el hardware. Este almacenamiento en búfer, que se implementa mediante FIFOs de doble reloj generadas por el compilador, permite escribir aplicaciones paralelas con un nivel de abstracción relativamente alto, sin la sincronización ciclo a ciclo que de otro modo sería necesaria.

Mediante Impulse C, una aplicación puede dividirse para crear una implementación multiproceso, la cual se divide en componentes de hardware y software, o bien implementarse completamente dentro de un dispositivo FPGA. Por ejemplo, una aplicación de filtrado de imágenes podría describirse con Impulse C como una colección de procesos paralelos segmentados, cada uno de los cuales se describe mediante una o más subrutinas en C.

En el lado del software de la aplicación, por ejemplo en un procesador FPGA integrado, las funciones de la biblioteca Impulse C se utilizan para abrir y cerrar flujos de datos, leer o escribir datos en dichos flujos y, si se desea, enviar mensajes de estado o consultar los resultados. Para la comunicación entre el procesador y la FPGA, las lecturas y escrituras de flujos pueden especificarse como operaciones que aprovechan las interfaces de bus internas o externas específicas de la FPGA.

En lo que respecta al hardware, las funciones de la biblioteca Impulse C y otras instrucciones C se compilan para generar implementaciones de hardware paralelas equivalentes en forma de archivos HDL sintetizables. Estos archivos son procesados ​​por herramientas FPGA para crear mapas de bits de hardware FPGA.

El modelo de programación en flujo de Impulse C se basa en procesos y flujos. Los procesos se sincronizan de forma independiente y ejecutan simultáneamente segmentos de una aplicación. Los procesos de hardware se escriben utilizando un subconjunto del estándar C y realizan el trabajo de la aplicación aceptando datos, realizando cálculos y generando resultados. En una aplicación típica, los datos fluyen de un proceso a otro mediante flujos almacenados en búfer o, en algunos casos, mediante mensajes o memorias compartidas. Las características de cada flujo, incluyendo el ancho y la profundidad de las FIFOs generadas, pueden especificarse en la aplicación C.

Aplicaciones

Impulse C se utiliza para aplicaciones que incluyen el procesamiento de imágenes y el procesamiento de señales digitales en sistemas embebidos , así como para la aceleración de aplicaciones de computación de alto rendimiento, incluyendo análisis financieros , bioinformática y computación científica .

Plataformas objetivo

Impulse C es compatible con FPGA de Xilinx y Altera, incluidos sus procesadores de núcleo blando y duro disponibles, el Altera Nios II y los MicroBlaze y PowerPC de Xilinx .

Referencias

  1. "Mejora del rendimiento de la comunicación de memoria compartida en Impulse C". IEEE Embedded Systems Letters . 2 (3): 49– 52. 1 de septiembre de 2010. doi : 10.1109/LES.2010.204801 (inactivo el 1 de julio de 2025).{{cite journal}}: CS1 maint: DOI inactivo desde julio de 2025 ( enlace )
  • Streams de licencias para startups-C
  • Tecnologías aceleradas por impulso