1 votos

Configurar dinámicamente la FPGA desde el programa anfitrión

Me preguntaba si alguien conoce una forma eficiente de programar la FPGA(PL) para una serie Xilinx Zynq-7 o dispositivos relacionados, desde un programa C anfitrión (no en el SoC, sino desde el PC anfitrión). ¿Existe una API de Xilinx que pueda utilizar/incluir en mi programa? Ya que la única forma que se me ocurre de hacerlo por el momento es invocando la programación de la línea de comandos a través de Impact (lo cual no es muy elegante).

Básicamente quiero poner la funcionalidad "Programar FPGA" del SDK en mi programa C anfitrión donde el usuario selecciona un archivo .bit pre-construido (y un archivo .elf si es posible) para programar la FPGA/(SoC). Esto es sólo para una prueba de concepto, más tarde me gustaría poner esta configuración dinámica en una de las CPUs ARM.

Muchas gracias Sam

2voto

silverbolt Puntos 18

Depende de cómo conectes la FPGA al host. Si estás usando el cable JTAG de Xilinx, estás prácticamente atrapado con Impact. Sin embargo, si tienes una interfaz diferente al host, entonces no sería demasiado difícil, digamos, escribir una interfaz de carga que pueda aceptar un archivo de bits y sobrescribir la flash de configuración. Entonces todo lo que necesitas hacer es reiniciar la placa, y estás listo para ir. Sugeriría mirar la guía de configuración de Xilinx para la parte que estás usando; tendrá más información específica sobre las diferentes interfaces de configuración.

Edición: Interesante; no hay una guía de configuración separada para las partes de Zynq. Echa un vistazo al capítulo 6 del manual de referencia técnica, Xilinx ug585. Parece que el procedimiento es arrancar un núcleo desde la flash, y luego hacer que el núcleo cargue la configuración de la FPGA. Si puedes cargar una nueva configuración en la RAM a través de cualquier interfaz arbitraria, entonces mientras el reinicio de la parte lógica programable no impida que el núcleo acceda a la imagen en la RAM, puedes reiniciar la FPGA y cargar la nueva configuración desde la RAM. Parece que necesitas usar AXI-PCAP. Me imagino que también puedes actualizar el software del núcleo ARM, pero no estoy seguro de cuál sería el procedimiento adecuado. ¿Tienes alguna memoria de programa externa, o sólo estás utilizando la memoria en el chip? Si puedes utilizar la memoria externa, entonces tal vez puedas 'montar' una nueva imagen en la memoria externa, y luego copiarla de nuevo en la memoria interna antes de iniciarla. Básicamente, sólo necesitas una manera de esconder un poco de código que pueda recargar la configuración de la FPGA y luego recargar y/o iniciar el software del núcleo ARM.

1voto

FarhadA Puntos 1008

Xilinx tiene una muy buena nota de aplicaciones con código C soportado que puedes usar como base para tu código.

Para que tu controlador funcione debes tener 4 GPIOs libres y conectarlos a la FPGA (y a los otros dispositivos JTAG de la cadena) como se muestra en esta imagen:

JTAG chain

Puede que tengas que cambiarlo un poco para adaptarlo a tu propio entorno, pero básicamente tienes que seguir los pasos descritos en la app-note, anteriormente utilicé el formato XSVF para programar la FPGA utilizando un controlador Cortex M3, para ello seguí estos pasos:

How to create XSVC file for Xilinx

Puede buscar en Xilinx XAPP058 : "Xilinx In-System Programming Using an Embedded Microcontroller" en su sitio web, es un poco viejo, pero puede ser capaz de encontrar el más reciente que funciona con los nuevos dispositivos también.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X