¿Puedo usar lenguaje C para programar un CPLD/FPGA?

Quería saber si puedo programar CPLDs/FPGAs usando lenguaje C. Si es así, ¿se practica comúnmente? ¿Cuáles son los pasos y las herramientas requeridas para el mismo?

Mmm. Nuevamente, busque "C a HDL" como tema.
Hay SystemC ( en.wikipedia.org/wiki/SystemC ) para esto.
Esta pregunta también ha sido respondida en Stack Overflow .

Respuestas (3)

Generalmente puedes. Hay SystemC gratuito para HLS (síntesis de alto nivel). HLS se está volviendo cada vez más popular, pero lo que debe recordar es que no programa CPLD/FPGA usando lenguaje C, sino que describe el hardware usando lenguaje C. Para que funcione en hardware real, necesita herramientas HLS específicas del proveedor.

En mi opinión, escribir una descripción sintetizable en C es más difícil que en Verilog/VHDL, pero suele ser más rápido si está familiarizado con la sintaxis y sigue algunas reglas adicionales.

Para FPGA, sí. No creo que haya muchas herramientas para apuntar a CPLD con C (aunque en teoría debería ser perfectamente posible).

Puede que esté hablando de herejía aquí, pero (para mí) la ventaja de C-to-gates es que puede ejecutar una gran parte de su desarrollo y verificación de algoritmos en C puro (utilizando su entorno de desarrollo C normal y un software bien entendido). herramientas/depuradores...) y una vez que esté funcionando a su satisfacción, apúntelo al FPGA.

Luego, solo tiene que validar la transformación C-to-gates (es decir, la herramienta) en simulación y hardware. Si escribe su algoritmo en HDL, debe verificar el algoritmo en una simulación muy lenta y luego verificar y validar su implementación en hardware (y/o incluso una simulación más lenta a nivel de puerta).

Es posible que tenga que iterar para obtener rendimiento (pero probablemente tuvo que hacer esa síntesis posterior de todos modos incluso en HDL, a menos que fuera muy bueno en la optimización de HDL... y sostengo que después de unos meses puede ser muy bueno en C- optimización for-gates y luego tampoco iterar tanto)

También puede validar un algoritmo compatible con HDL como un programa C y luego volver a expresarlo en un HDL.
En términos generales, los CPLD son demasiado pequeños para abordarlos con herramientas HLS.
@ChrisStratton: puedes, sí. Pero luego debe verificar que su implementación HDL coincida con la C cada vez que cambia. Si valido suficientemente la herramienta C-to-gates, puedo ganar la confianza suficiente para omitir ese paso. Además, no necesito emplear ingenieros de HDL para hacer la traducción o, peor aún, encontrar esos ingenieros raros (como yo :) a los que les gusta jugar con ambos.
Si desea ejecutar un algoritmo que se exprese mejor en C, ¿por qué no usar hardware diseñado a medida y optimizado específicamente para ejecutar C? Escuché que esas cosas se llaman CPU.
@Cuadue: me preocupa más la verificación que expresar algoritmos. Puedo expresar un algoritmo de procesamiento de señales en una variedad de idiomas. C me permite verificar que funciona de manera razonablemente eficiente (aprovechando estas cosas de la CPU de las que ha oído hablar :). Si elijo el algoritmo correcto para expresar, puedo orientarlo a un hardware de menor costo y potencia y aun así cumplir mis objetivos de tiempo real.

Hay dos formas principales de hacer esto: una es con HLS, donde escribe una descripción de un algoritmo de alto nivel en c y se traduce a HDL o una lista de conexiones. Sin embargo, HLS no es realmente aplicable para un diseño completo, generalmente solo algunas piezas. La otra forma es colocar una CPU blanda en la FPGA y luego programarla en C. Algunas FPGA también contienen núcleos de CPU duros (Zynq tiene núcleos ARM, varios chips Virtex tienen núcleos PowerPC) y ciertamente se pueden programar en C.