tutorial programacion placa ejemplos desde cero caracteristicas fpga

programacion - ¿Se pueden programar FPGAs en lenguajes tipo C?



placa fpga (9)

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

Lo ideal sería programar el FPGA en un lenguaje similar a C, en lugar de VHDL.

Estaba pensando en comprar un Xilinx Virtex-5 si hace alguna diferencia.


De hecho, hay algunos compiladores que le permiten inferir (resolver utilizando una descripción incompleta) los 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 anuncian las empresas es que los programadores pueden escribir hardware si el lenguaje que usan es uno que han usado para describir el software. Esto es increíblemente incorrecto por varias razones, entre las que destacan las diferencias fundamentales entre el modelo de ejecución asumido por lenguajes como C y los lenguajes de descripción de hardware.

Un ejemplo ilustrativo: C asume en su corazón una gran memoria direccionada linealmente accesible al azar, una suposición que rara vez se cumple para el hardware. Un compilador C-to-gates se enfrenta a una tarea desafiante de interoperar el comportamiento del programa descrito y diseñar un circuito de hardware con el mismo comportamiento.

Si bien los lenguajes tipo C son una excelente herramienta de productividad en casos de uso limitado, estos compiladores ciertamente no le permiten saber de repente cómo diseñar hardware si está familiarizado con C.

Espero que esto ayude,


Deberías echarle un vistazo a SystemC. Las ventajas de usar un lenguaje basado en C son abundantes. Especialmente, en una perspectiva de diseño del 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 etapa muy temprana, compararlo con 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, existe un ARM Cortex A9 de doble núcleo integrado junto con la lógica FPGA, esto probablemente se convertirá en una herramienta poderosa para el desarrollo del sistema.


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. Esta publicación enumera algunos compiladores. No lo he usado yo mismo, así que no tengo ninguna experiencia con él. ¡Espero que esto ayude!


La respuesta corta es "sí, ciertamente".

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

Compilador de C a hardware (síntesis HLL)

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


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 el algoritmo O eso o algún otro tipo de máquina de Turing se pone en marcha para ejecutar el código.

No es así como una persona experta en diseño de FPGA generalmente aborda un problema. Es una manera 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 idiomas para describir los circuitos lógicos que C.

Si se toma en serio el uso de FPGA, use un lenguaje que esté diseñado para describir circuitos lógicos. Puede ser una curva de aprendizaje empinada, pero los resultados serán mucho mejores en mi humilde opinión.


Me gustaría agregar algo que creo que es la respuesta más cercana a la pregunta del OP. Si estás buscando un lenguaje similar a C (que no es el 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 gratis y de código abierto!

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


Muchos diseñadores escriben VHDL / Verilog en lugar de un lenguaje de alto nivel, por las mismas razones que muchos programadores solían (y aún hacen en algunos casos) escribir ensamblados 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 diseñar hardware. C no lo es. Dado el tiempo suficiente, siempre puede escribir un programa en VHDL / Verilog que supere a un programa de lenguaje de alto nivel. Lo que un HLL le brinda es 1) un desarrollo más rápido, 2) facilidad de mantenimiento y 3) posiblemente una mayor portabilidad.

Se han realizado muchos esfuerzos para compilar los lenguajes de programación de alto nivel existentes (C es uno) para los 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 complementarias que admiten el paralelismo de nivel de proceso, más un compilador que optimiza la entrada de C para el paralelismo de nivel de instrucción. Canaliza bucles, asigna ciertas operaciones a primitivas de hardware de alto rendimiento que sabe que proporciona la familia FPGA subyacente, etc. (Revelación completa: ayudé a construir la cadena de herramientas Impulse C).

La lista de entornos de C-a-hardware con la que Carlito y David Pointer enlazan es bastante exhaustiva. Xilinx Virtex-5 es compatible con muchos de ellos, y si está utilizando una 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 incorporadas (o softcore) integradas mejor que otras.


Puede instalar un núcleo de procesador de software 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 núcleos de software que también puede implementar (MIPS, x86, 8051, etc.).

Sin embargo, esto se considera en gran parte un "truco", ya que los núcleos son muy lentos en comparación con los núcleos reales. Y creo que cualquier conversión de C a FPGA finalmente comenzará a oler como si estuviera ejecutando un núcleo blando, y no le dará la eficiencia que merece para ejecutar un FPGA. Los FPGA no son máquinas de Turing, son un saco de puertas lógicas. Puedes construir una máquina de Turing con 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 clavar clavos y construir castillos, naves espaciales y estaciones de bomberos con los Legos.


Supongo que usaste Handel C. Es un subconjunto de C. Por lo que sé, el resultado no está muy optimizado. Verilog y VHDL permite una mayor optimización. Lo digo por mi experiencia con Handel C hace unos años.