Configurar (cargar flujo de bits) a MAX10 sin herramientas Altera usando Linux

Actualmente estoy usando el Altera MAX10 basado en flash en un diseño adjunto al procesador principal que ejecuta Linux en una placa personalizada (el FPGA en sí solo implementa algunos periféricos; el procesador que ejecuta Linux es un diseño ARM normal).

Hasta ahora, he estado usando las herramientas estándar de Altera para el desarrollo ( Quartus Prime y USB Blaster como herramientas de software y hardware de programación), pero una vez que se envía el producto, no tenemos esta opción.

Dado que nos gustaría diseñar para que sea actualizable en el campo, necesitamos una solución para cargar un flujo de bits al flash del MAX10 desde Linux (el sistema operativo integrado) sin un USB Blaster o las herramientas de programación de Quartus (dado que es una placa ARM, no puede ejecutar los binarios).

Entonces mis preguntas son:

  • ¿Qué herramientas de software se pueden utilizar para este propósito? ( fpga_manager aún no parece estar en horario estelar, y urjtag no tiene mucho en el camino del soporte reciente de Altera)
  • ¿Qué consideraciones deben darse al diseño de hardware para habilitar esta funcionalidad? (Por ejemplo, ¿se pueden usar GPIO para bit-bang JTAG, una solución ideal desde una perspectiva de costos, o necesito un chip como un FTDI )

Con el fin de desarrollar una solución de prueba de concepto, tengo un kit de evaluación MAX10 y un BeagleBone Black . Puedo hacer cualquier truco de software y hardware que se requiera.

Soluciones parciales

Si sabe cómo hacer algo de lo siguiente, votaré a favor de cualquiera de los siguientes con la esperanza de armar una solución completa a partir de las piezas individuales:

  • Si ha flasheado un flujo de bits a otro FPGA basado en flash de Altera (p. ej., MAXII) con software y hardware que no sean de Altera;
  • Si ha flasheado un flujo de bits a un MAX10 usando un USB Blaster usando un software que no es de Altera; o
  • Si ha flasheado un bistream a un MAX10 utilizando hardware de programación que no es de Altera y software de programación Altera/Quartus estándar.

Actualizaciones:

Nunca lo he usado, pero JTAG con JAM STAPL suena como una solución para usted altera.com/content/dam/altera-www/global/en_US/pdfs/literature/… Compatibilidad con sistemas integrados de 16 y 32 bits.
También hay algunos parches muy recientes para OpenOCD, por lo que esto puede permitir otro enfoque.

Respuestas (2)

Creo que el método estándar para hacer esto es generar un archivo SVF o XSVF con el software Quartus y luego usar algo como OpenOCD o http://www.clifford.at/libxsvf/ para reproducirlo. Haría una interfaz con el FPGA a través de los pines JTAG, ya sea a través de GPIO o quizás un chip FTDI.

Otra opción sería renunciar por completo al almacenamiento de configuración integrado de la FPGA y cargar directamente la configuración durante el arranque a través de SPI o similar, suponiendo que la FPGA lo admita. De esta forma, no es necesario actualizar el firmware de la FPGA durante el proceso de actualización del firmware, ya que se integraría con el firmware principal y se cargaría en la FPGA automáticamente.

Esta respuesta ahora comienza a parecer posible; OpenOCD 0.10.0 tiene cierto grado de compatibilidad con MAX10, también tiene una implementación gpio jtag. El truco es averiguar cómo usarlo ...
SVF/XSVF es completamente independiente del dispositivo. El archivo contiene instrucciones JTAG explícitas. Como resultado, los archivos pueden ser bastante grandes, pero funcionará si puede generar el archivo y tiene un buen analizador para él. Además, la secuencia suele ser lo suficientemente simple como para implementarla directamente. De hecho, al menos para los archivos de bits de Xilinx, puede volcar todo el archivo de bits de una sola vez sin molestarse en eliminar los encabezados y funcionará bien.

Esto es más una guía de cómo se podría hacer.

EDITAR: Necesita: para la programación por primera vez: QuartusII, QSYS, NIOS SBT, conexión JTAG a su FPGA y para actualización remota: un programa de terminal que sea capaz de enviar archivos y conexión UART a su FPGA.

Max10 admite el modo de imagen con doble compresión. Puedes leer sobre su memoria flash aquí.

Cree una imagen dorada, que sea capaz de escribir la imagen de trabajo en flash. Aquí hay una documentación para la actualización remota del sistema con UART. Asegúrese de proteger sus direcciones flash donde reside la imagen.

Agregue una conexión JTAG en su placa (guía de configuración Max10) y programe el FPGA antes de que salga de la casa.

A continuación, queremos actualizar el FPGA. El método para obtener los archivos .hex es un poco incómodo, pero después de hacerlo una, dos veces debería estar bien, debería estar descrito en el ejemplo.

¿Desea seleccionar la imagen cargada a través de GPIO o mediante la configuración interna, porque si elige interna, su diseño de trabajo debe poder volver a su imagen dorada?

Gracias por la respuesta, pero hay un detalle que olvidé mencionar en mi pregunta: hemos seleccionado la configuración única. Esto hace que este esquema sea algo más difícil. Actualizaré mi pregunta en consecuencia.
Entonces, ¿supongo que todo su diseño debe ser actualizable, no solo el sistema NIOS2? Además, ¿no hay forma de cambiar a una imagen con doble compresión?
El FPGA no contiene un núcleo de CPU de ningún tipo (implementa un par de UART y alguna lógica personalizada). Estoy tratando de evitar la configuración dual: los dispositivos parecen ser mucho más caros.