Convertir C a FPGA

Soy nuevo en la programación para FPGA, por lo que me recomendaron usar algunos traductores disponibles de C/C++ a VHDL.

El problema es que hay toneladas de información y casi todos los buenos programas necesitan una licencia costosa.

Me van a dar un Xilinx FPGA (probablemente un Virtex-6) y tendré una licencia válida para usar Vivado HLS e ISE. Así que ahora, mi idea sobre cómo convertir un algoritmo C a FPGA es esta:

1 - Convierta el algoritmo de C a VHDL y optimice con Vivado HLS (ya entendido de los tutoriales cómo hacer este paso)

2 - Use los archivos VHDL recién generados en ISE para generar un flujo de bits (no tengo idea de cómo hacer esto)

3 - Usar el Xillybus para conectar un programa en C con la FPGA (con el bitstream) y enviar/recibir información para poder ver las salidas.

¿Estoy en el camino correcto y me falta algún paso? Acerca del paso 2, ¿es sencillo generar el flujo de bits en ISE o necesito muchos conocimientos sobre el reenvío de puertos?

Si su VHDL está diseñado para la síntesis, el paso 2 básicamente es simplemente presionar un botón en Vivado (luego revisar los errores, corregir sus errores y volver a hacerlo hasta que haya corregido todos los errores).
Esa pulsación de 1 botón está en ISE/Vivado y no en Vivado HLS, ¿verdad? ¿Y ese botón al que te refieres genera el flujo de bits final?
¿Es realmente un algoritmo complejo? Tal vez valga la pena volver a implementarlo para el hardware de la manera correcta.
Definitivamente en ISE. Todavía no he usado mucho Vivado. Si presiona el botón para generar un flujo de bits, realizará todos los pasos anteriores (síntesis, mapeo, ubicación y ruta) en el flujo de trabajo por usted si no se han realizado.
@ Eugene Sh: Sí, el algoritmo es bastante complejo, pero estoy bastante seguro de que con las optimizaciones correctas de Vivado HLS esto se puede hacer bien. Y también, Vivado HLS es solo una fase de prueba intermedia, en el futuro yo o alguien probablemente necesite volver a implementar el código en HDL desde cero
@The Photon Ok, por el consejo. Solo para aclarar: cree que es mejor usar Vivado HLS para generar el VHDL/Verilog, luego ISE para generar el flujo de bits, ¿correcto? ¿Qué pasa con el paso para enviar el flujo de bits a la FPGA y ver la salida? ¿Conoce/recomienda Xillybus o lo hace con otro software de Xilinx?
No. Elija una herramienta u otra. Los muchachos de Xilinx recomiendan enfáticamente a Vivado para nuevos diseños. Espero que la gestión del flujo de trabajo todavía esté presente en Vivado, pero aún no la he usado. No sé nada sobre Xillybus, ni siquiera había oído hablar de él hasta que lo mencionaste.
¿Has mirado en opencl? Me gusta la integración de Altera en el código c en el host, de alguna manera abstrae la parte de movimiento de datos para usted. Xilinx parece tener una solución, pero no sé mucho al respecto xilinx.com/products/design-tools/sdx/sdaccel.html
vivado es lo mismo. Generación de flujo de bits de 1 botón.
Vivado no se puede utilizar para dispositivos anteriores a la serie 7. En común: la traducción de C a HDL no ahorra tanto tiempo como predicen los volantes. Además, los usuarios también necesitan conocer el hardware subyacente para elegir las sugerencias de síntesis correctas.
Ok, chicos, gracias por las respuestas, supongo que Vivado (y Vivado HLs para convertir C en VHDL/Verilog) es una buena opción para generar el flujo de bits y enviarlo a la FPGA. Pero, ¿qué pasa con la prueba de los datos recibidos de la FPGA, que también se puede hacer con Vivado? Estaba investigando Xillybus porque parece muy sencillo.
@SomeHardwareGuy No he entendido bien para qué paso es el programa Xilinx. ¿Pueden informarme antes de ir y pasar horas viendo/leyendo tutoriales?
@SomeHardwareGuy oh y por lo que veo, SDAccel aún no se ha lanzado

Respuestas (1)

Respondiendo a tu pregunta de comentario aquí donde tengo más espacio. Digamos que tiene una aplicación que ha diseñado en una caja de Linux y ejecuta un algoritmo que escribió para contar la cantidad de imágenes de gatos en Internet. Ahora se ejecuta, pero es lento porque hay muchas imágenes de gatos para pasar, por lo que desea acelerarlo en el hardware.

Entonces, usa esta herramienta para escribir código OpenCL que está en C pero con algunas restricciones de forma porque se "compilará" para ejecutarse en un FPGA. La llamada a esta parte de los núcleos de código. Ahora estos núcleos van a ser sintetizados y ejecutados en el FPGA, tal vez tenga 1 o tal vez tenga 100 funcionando en paralelo.

Está haciendo todo esto correctamente en su aplicación, en línea, de modo que cuando llega al punto de contar los gatos, está utilizando sus API para realizar el procesamiento en el FPGA.

Acabo de ver tu otro comentario de que aún no ha salido, sé que las cosas de Altera han estado fuera por un tiempo, puedes encontrar un montón de ejemplos de diseño aquí .

Dicho todo esto, depende de cuál sea su objetivo aquí, ¿quiere aprender a escribir verilog, bancos de prueba y ser un diseñador de FPGA? ¿O está buscando simplemente acelerar algoritmos o funciones usando hardware sin hacer todo eso?

Como cualquier conjunto de herramientas, cuál usar depende del trabajo en cuestión.

Ty por la buena y completa respuesta y por el enlace de Altera. Desafortunadamente, el FPGA que voy a usar es de Xilinx, así que supongo que no podré usar el SDK de Altera, ¿verdad? Acerca de su pregunta, en la primera fase, el objetivo es solo acelerar los algoritmos y verlos implementados en FPGA, por lo que SDK de Altera y SDAccel de Xilinx serían suficientes. Si tengo razón acerca de no poder usar el SDK de Altera para un FPGA de Xilinx y saber que SDAccel aún no está disponible, mi solución es Vivado HLS (programa que ahora entiendo bien debido a los largos días leyendo tutoriales) y luego Viva a...
... comunicarse con la FPGA. ¿Estás de acuerdo?
Sí, suena así, será una buena experiencia de aprendizaje de todos modos.