Handel-C es un lenguaje de descripción de hardware de alto nivel orientado al hardware de bajo nivel y se utiliza con mayor frecuencia en la programación de FPGA . Handel-C es al diseño de hardware lo que los primeros lenguajes de programación de alto nivel fueron a la programación de CPU . Es un subconjunto rico y Turing-completo del lenguaje de programación C , con énfasis en la computación paralela .
A diferencia de muchos otros lenguajes de diseño de hardware (HDL) que se dirigen a una arquitectura informática específica , Handel-C se puede compilar a varios HDL y luego sintetizar para el hardware correspondiente. Esto permite a los desarrolladores concentrarse en la tarea de programación en cuestión, en lugar de en las particularidades de un lenguaje y una arquitectura de diseño específicos.
Características adicionales
El subconjunto de C de Handel-C incluye todas las características comunes del lenguaje C necesarias para describir algoritmos complejos . Al igual que muchos compiladores de C para sistemas embebidos, se omitieron los tipos de datos de punto flotante . La aritmética de punto flotante se admite mediante bibliotecas externas muy eficientes.
Programas paralelos
Para facilitar la descripción del comportamiento paralelo , se utilizan algunas de las palabras clave de los procesos secuenciales comunicantes (CSP), junto con la estructura general de archivos del lenguaje de programación Occam .
Por ejemplo: [ 1 ]
par { ++ c ; a = re + mi ; segundo = re + mi ; }Canales
Los canales proporcionan un mecanismo para el paso de mensajes entre hilos paralelos . Los canales pueden definirse como asíncronos o síncronos (con o sin un elemento de almacenamiento inferido, respectivamente). Un hilo que escribe en un canal síncrono se bloqueará inmediatamente hasta que el hilo receptor esté listo para recibir el mensaje. Del mismo modo, el hilo receptor se bloqueará en una instrucción de lectura hasta que el hilo emisor ejecute el siguiente envío. Por lo tanto, pueden utilizarse como medio para sincronizar hilos. [ 1 ]
par { chan int a ; // declarar un canal síncrono int x ;// comienza el envío del hilo seq ( i = 0 ; i < 10 ; i ++ ) { a ! i ; // envía los valores del 0 al 9 secuencialmente al canal }// Iniciar la secuencia del hilo receptor ( j = 0 ; j < 10 ; j ++ ) { a ? x ; // Realizar una secuencia de 10 lecturas del canal en la variable x delay ; // Introducir un retardo de 1 ciclo de reloj entre lecturas sucesivas // Esto tiene el efecto de bloquear el hilo emisor entre escrituras } }Los canales asíncronos proporcionan una cantidad específica de almacenamiento para los datos que pasan a través de ellos en forma de FIFO . Mientras esta FIFO no esté ni llena ni vacía, tanto los hilos emisores como los receptores pueden continuar sin bloquearse. Sin embargo, cuando la FIFO está vacía, el hilo receptor se bloqueará en la siguiente lectura. Cuando está llena, el hilo emisor se bloqueará en el siguiente envío. Un canal con actores en dominios de reloj diferentes es automáticamente asíncrono debido a la necesidad de al menos un elemento de almacenamiento para mitigar la metaestabilidad .
Un hilo puede esperar simultáneamente en múltiples canales, síncronos o asíncronos, actuando sobre el primero que esté disponible según un orden de prioridad especificado o, de forma opcional, ejecutando una ruta alternativa si ninguna está lista.
Alcance y distribución de variables
El alcance de las declaraciones se limita a los bloques de código ( { ... }) en los que se declararon; el alcance es de naturaleza jerárquica, ya que las declaraciones están dentro del alcance de los subbloques. [ 1 ]
Por ejemplo:
int a ;void main ( void ) { int b ; /* "a" y "b" están dentro del ámbito */ { int c ; /* "a", "b" y "c" están dentro del ámbito */ } { int d ; /* "a", "b" y "d" están dentro del ámbito */ } }Extensiones al lenguaje C
Además de los efectos que la semántica estándar de C tiene en la temporización del programa, las siguientes palabras clave [ 1 ] están reservadas para describir los aspectos prácticos del entorno FPGA o para los elementos del lenguaje obtenidos de Occam:
Programación
En Handel-C, la asignación y el comando de retardo consumen un ciclo. Todas las demás operaciones son "gratuitas". [ 1 ] Esto permite a los programadores planificar tareas manualmente y crear pipelines eficaces . Al organizar bucles en paralelo con los retardos adecuados, los pipelines pueden aumentar enormemente el rendimiento de datos, a costa de un mayor uso de recursos de hardware.
Historia
Las raíces históricas de Handel-C se encuentran en una serie de lenguajes de descripción de hardware del Laboratorio de Computación de la Universidad de Oxford , desarrollados por el grupo de compilación de hardware. Handel HDL evolucionó hasta convertirse en Handel-C a principios de 1996. La tecnología desarrollada en Oxford se independizó para consolidarse como un producto fundamental de Embedded Solutions Limited (ESL) en 1996. ESL pasó a llamarse Celoxica en septiembre de 2000.
Tras su lanzamiento por parte de ESL, Handel-C fue adoptado por numerosos grupos de investigación de hardware universitarios, lo que le permitió consolidarse como una herramienta de diseño de hardware de referencia en la comunidad académica, especialmente en el Reino Unido.
A principios de 2008, la división de ESL de Celoxica fue adquirida por Agility, que desarrollaba y vendía, entre otros productos, herramientas ESL compatibles con Handel-C.
A principios de 2009, Agility cesó sus operaciones tras no conseguir más inversiones de capital ni crédito [ 2 ].
En enero de 2009, Mentor Graphics adquirió los activos de síntesis de C de Agility. [ 3 ]
Otros subconjuntos de C HDL que se desarrollaron aproximadamente al mismo tiempo son Transmogrifier C en 1994 en la Universidad de Toronto (ahora el proyecto de código abierto FpgaC) y Streams-C en el Laboratorio Nacional de Los Alamos (ahora licenciado a Impulse Accelerated Technologies bajo el nombre de Impulse C ).
Véase también
Referencias
- 1 2 3 4 5 "Copia archivada" (PDF) . Archivado del original (PDF) el 31-03-2010 . Recuperado el 31-03-2010 .
{{cite web}}: CS1 maint: copia archivada como título ( enlace ) Manual de referencia del lenguaje Handel-C - ↑ Gabe Moretti (19 de enero de 2009). "Agility DS, víctima de la crisis crediticia" . EETimes.com.
- ↑ Dylan McGrath (22 de enero de 2009). "Mentor compra los activos de síntesis de C de Agility" . EETimes.com.
Enlaces externos
- Recursos del lenguaje Handel-C en Mentor Graphics
- Oxford Handel-C
- Ahmed Ablak; Issam Damaj; Universidad Americana de Kuwait (2016). "HTCC: Compilador de hardware de Haskell a Handel-C". Conferencia Euromicro 2016 sobre Diseño de Sistemas Digitales (DSD) . págs. 192–199 . arXiv : 1907.07764 . doi : 10.1109/DSD.2016.24 . ISBN 978-1-5090-2817-7. S2CID 13213191 .
- Familia de lenguajes de programación C
- lenguajes de descripción de hardware
- Automatización del diseño electrónico