¿Puedes programar FPGAs en lenguajes C-like? [cerrado]


En la universidad programé un FPGA en un lenguaje C-like. Sin embargo, también sé que uno generalmente programa FPGAs en Verilog o VHDL. ¿Es una elección de diseñador? Si es así, ¿cuáles son los inconvenientes de rendimiento?

Idealmente me gustaría programar la FPGA en un lenguaje similar a C, en lugar de VHDL.

Estaba pensando en conseguir un Xilinx Virtex-5 si hace alguna diferencia?

 25
Author: Chris, 2012-01-24

9 answers

La respuesta corta es "sí, ciertamente".

Aquí hay una excelente encuesta de compiladores de C para FPGAs y sistemas basados en FPGA.

Compilador de C a hardware (síntesis HLL)

Los inconvenientes y consideraciones de rendimiento se encuentran en la arquitectura del sistema y los anchos de banda de comunicación en lugar de usar C vs.un lenguaje de diseño de hardware (HDL). Las consideraciones en el uso de C vs. un HDL se encuentra en el tiempo de programación y problemas de mantenimiento de software, no tanto en rendimiento.

 10
Author: David Pointer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:41

Los FPGA no son procesadores. C es un lenguaje diseñado para procesadores.

Sí, hay compiladores de C a FPGA.

Son una buena idea? Yo diría que no. El diseño con el que vas a terminar es (por lo que he visto) normalmente una máquina de estados que tiene un estado por línea de código en la C. La máquina de estados luego se mueve a través de los estados realizando el algoritmo. Ya sea que o algún otro tipo de máquina de Turing se pone en su lugar para ejecutar el código.

Esto es no cómo alguien experto en diseño FPGA generalmente abordaría un problema. Es una forma lenta y potencialmente hambrienta de hacer las cosas.

De la misma manera que el inglés es un mejor idioma para escribir una novela que Fortran, VHDL y Verilog son mejores lenguajes para describir circuitos lógicos que C.

Si te tomas en serio el uso de FPGAs, usa un lenguaje diseñado para describir circuitos lógicos. Podría ser una curva de aprendizaje empinada, pero los resultados serán mucho mejores en mi humilde opinión.

 24
Author: Paul S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-13 09:36:00

Puede instalar un núcleo de procesador suave dentro de la lógica FPGA, y ejecutar su código C dentro del procesador virtual. Xilinx tiene núcleos Microblaze (con licencia) y Picoblaze (gratis). Hay otros soft cores que también puede implementar (MIPS, x86, 8051, etc.).

Sin embargo, esto se considera en gran medida un "hack", ya que los núcleos son muy lentos en comparación con los núcleos reales. Y creo que cualquier conversión C-a-FPGA en última instancia va a empezar a oler como ejecutar un núcleo blando, y no te dará la eficiencia que mereces para correr en un FPGA. Las FPGA no son máquinas de Turing, son un saco de puertas lógicas. Puedes construir una máquina de Turing fuera de las puertas, pero no es por eso que compraste el saco de puertas.

Es como comprar una bolsa de Legos, y construir un martillo y un juego de clavos con los ladrillos. Podría funcionar, pero es mejor comprar un martillo para golpear clavos, y mejor construir Castillos, Naves Espaciales y Estaciones de Bomberos con los Legos.

 4
Author: Mark Lakata,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-28 21:26:16

De hecho, hay algunos compiladores que le permiten inferir (resolver usando una descripción incompleta) circuitos de hardware utilizando un lenguaje de alto nivel como C. "C-to-gates" es de hecho una palabra de moda popular. La imagen que las empresas anuncian es que los programadores son capaces de escribir hardware si el lenguaje que utilizan es uno que han utilizado para describir el software. Esto es increíblemente incorrecto por una serie de razones, la principal de ellas son las diferencias fundamentales entre el modelo de ejecución asumido por los idiomas como C y lenguajes de descripción de hardware.

Un ejemplo ilustrativo: C asume en su corazón una gran memoria de direcciones lineales accesible aleatoriamente, una suposición que rara vez se aplica al hardware. Un compilador de C-to-gates se enfrenta a la difícil tarea de interpretar el comportamiento del programa descrito, y diseñar un circuito de hardware con el mismo comportamiento.

Mientras que los lenguajes C-like son una gran herramienta de productividad en casos de uso limitados, estos compiladores ciertamente no le permiten para saber de repente cómo diseñar hardware si está familiarizado con C.

Espero que esto ayude,

 2
Author: Ilia Lebedev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-08 17:24:42

Supongo que usaste Handel C. Es un subconjunto de C. Por lo que sé, el resultado no está muy optimizado. Verilog y VHDL permiten una mayor optimización. Estoy diciendo esto basado en mi experiencia con Handel C hace unos años

 1
Author: Josnidhin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-24 15:35:00

Es posible que desee echar un vistazo a la tecnología C-to-hardware, donde puede escribir código C y se compilará/traducirá a VHDL o Verilog. Este post enumera algunos compiladores. No lo he usado yo, así que no tengo experiencia con él. Espero que esto ayude!

 1
Author: Carlito,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:41

Muchos diseñadores escriben VHDL/Verilog en lugar de un lenguaje de alto nivel, por las mismas razones que muchos programadores solían (y todavía lo hacen en algunos casos) escribir ensamblado en lugar de Java: puede ajustar el uso de recursos y el rendimiento a un nivel bajo. Tanto VHDL como Verilog son lenguajes diseñados para el diseño de hardware. C no lo es. Con el tiempo suficiente, siempre se puede escribir un programa en VHDL / Verilog que superará a un programa de lenguaje de alto nivel. Lo que un HLL le da es 1) un desarrollo más rápido, 2) facilidad de mantenimiento, y 3) posiblemente mayor portabilidad.

Ha habido muchos esfuerzos para compilar lenguajes de programación de alto nivel existentes (C es uno) para objetivos FPGA. La mayoría de ellos, de hecho, generan código optimizado. Impulse C, por ejemplo, es un subconjunto de C con algunas bibliotecas adicionales que admiten paralelismo a nivel de proceso, además de un compilador que optimiza la entrada de C para el paralelismo a nivel de instrucción. Canaliza bucles, asigna ciertas operaciones a hardware de alto rendimiento primitivas que conoce la familia FPGA subyacente, etc. (Revelación completa: Ayudé a construir la cadena de herramientas Impulse C.)

El entornos C-a-hardware lista Carlito y David Enlace Puntero a es bastante exhaustiva. Xilinx Virtex - 5 es compatible con muchos de ellos, y si está utilizando cualquier familia FPGA reciente de un proveedor importante, la elección del hardware no debería ser un problema. Algunos de los entornos HLL admiten CPU integradas integradas (o softcore) mejor que otros.

 1
Author: rkb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:10

Deberías echar un vistazo a SystemC. Las ventajas de usar un lenguaje basado en C son abundantes. Especialmente, en una perspectiva de diseño de sistema puede utilizar que su otro software (firmware y otras cosas de bajo nivel) está escrito en C. Por lo tanto, su equipo de software puede en una prueba muy temprana contra el código rtl.

En 2011, Xilinx compró la compañía AutoESL que había desarrollado síntesis de alto nivel con SystemC. Xilinx ha reutilizado el nombre cuando lanzó su producto "AutoESL". Especialmente con su nuevo circuito Zynq, hay un doble núcleo ARM Cortex A9 integrado junto con la lógica FPGA, esto probablemente se convertirá en una poderosa herramienta para el desarrollo del sistema.

 1
Author: Karl Lunden,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-08 10:15:29

Me gustaría añadir algo que creo que es la respuesta más cercana a la pregunta de la OP. Si estás buscando un lenguaje similar a C (que no es lo mismo que C), definitivamente deberías revisar Synflow. La idea es tener un lenguaje moderno que le permita diseñar más rápido sin la curva de aprendizaje de VHDL / Verilog y sin sobrecarga. También es libre y de código abierto!

Divulgación: Soy co-fundador de Synflow: -)

 1
Author: Matthieu Wipliez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-03 07:51:51