¿Cómo puedo programar flash usando Vitis?

Soy poco nuevo en Vitis y vivado. He usado herramientas ISE principalmente para Spartan 6 y es una curva de aprendizaje empinada para nuevas herramientas.

Usé iMPACT antes con ISE para programar flash usando JTAG. Ahora, con Vivado y vitis, las cosas se vuelven más confusas para mí.

¿Cuál es la diferencia real si programo flash usando vivado y vitis? Realmente no lo entiendo. Sé que vitis tiene un flujo de bits BSP y Vivado es solo un flujo de bits de hardware. Cuando uso la opción "programar flash" de vitis, puedo programar el flash con éxito pero, después del ciclo de encendido, FPGA no carga la configuración desde el flash y permanece inactivo. Estoy usando CMOD S7 XCS725 y la versión 2020.2.

Respuestas (2)

Así que finalmente lo descubrí. Lo postulo aquí para cualquiera que esté luchando con esto. Vitis no es una gran herramienta para hacer programación flash.

  1. Cree un diseño de bloque con Microblaze (guía sobre cómo hacer esto aquí: https://reference.digilentinc.com/programmable-logic/guides/getting-started-with-ipi )
  2. Agregue la IP flash QSPI desde la pestaña Placa al diseño del bloque (generalmente un reloj de 50 MHz al reloj SPI externo en la IP AXI Quad SPI). Confirme que la confirmación de IP en AXI Quad IP esté configurada en modo SPI Quad y que el dispositivo esclavo esté configurado en Macronix (suponiendo que tenga una versión B del Cmod S7).
  3. Termine de generar el diseño del bloque, cree el contenedor HDL y genere el flujo de bits (o solo pase por la implementación).
  4. Abra el diseño implementado, para que luego pueda ir a la configuración del proyecto.
  5. En la configuración del proyecto en la sección Bitstream, configúrelo para que se cree el archivo .bin, acceda a la configuración de bitstream adicional, establezca la compresión de Bitstream en Verdadero, establezca la velocidad de configuración de 3 MHz a 33 MHz y, en Modos de configuración, elija Maestro SPI x4. Haga clic en Aceptar y guarde el diseño.
  6. Genere el bitsteam y exporte el .xsa y abra Vitis.
  7. Cree un proyecto de aplicación C normal (no SREC) y compile el proyecto. Esto generará un archivo .elf.
  8. Vuelva a Vivado, agregue ese archivo .elf recién generado como fuente de diseño al proyecto y guárdelo (probablemente se le pedirá que guarde un nuevo .xdc).
  9. Haga clic con el botón derecho en Microblaze IP y asocie ese .elf en las fuentes de diseño (a diferencia de las fuentes de simulación). Regenerar el flujo de bits.
  10. Abra el administrador de hardware, haga clic en Agregar dispositivo de memoria de configuración (número de pieza de Macronix MX25L3233F para Cmod S7-25 Rev B) y prográmelo con el archivo .bin.

Deberá apagar y encender la placa (simplemente desconecté y luego volví a conectar el S7 a través de USB), pero el programa de memoria flash Microblaze debería estar cargado y funcionando.

Siempre que quieras programar el flash para un FPGA "normal" (sin ARM SoC u otro soft-cpus) el procedimiento es sencillo y es indiferente si lo haces usando vitis o vivado directamente. Pero para ser precisos, tenga en cuenta que el BSP (Board Support Package) que menciona no es un flujo de bits de configuración.

Para programar el flash usando vivado puedes seguir el procedimiento definido en ug908 en el capítulo 6. En resumen tendrás que:

  1. Defina el dispositivo de memoria (en su caso Macronix MX25L3233F según el manual): herramientas>agregar dispositivo de memoria de configuración.
  2. genere un archivo de configuración con el flujo de bits (el flujo de bits tiene el formato .bit, el archivo flash conf ya sea .mcs o .bit), y luego actualícelo en el dispositivo: herramientas>generar archivo de configuración de memoria
  3. Flashearlo en el dispositivo.

También sugeriría tomar nota de los comandos que se ejecutan en la ventana "Consola Tcl"; puede escribirlos en un script TCL para escribir todo el procedimiento (y tal vez poner todo en un script Make).

Puedo programar el flash pero no pasa nada cuando enciendo y enciendo. Tengo el programa (sin configuración) funcionó bien antes. La dirección de escritura de arranque flash es 0x00000000 y el desplazamiento es FLASH_IMAGE_BASEADDR 0x00140000. No sé si este número de compensación es escribir. Revisé la memoria (flash - MX25L3233F) Configuración Información de la memoria: Formato de archivo BIN Interfaz SPIX4 Tamaño 32M Dirección de inicio 0x00000000 Dirección final 0x01FFFFFF Addr1 Addr2 0x00000000 0x0012F2CB Jul 30 example/microblaze_example.runs/impl_1/design_1_wrapper.bit
¿Podría aclarar dónde está insertando esos parámetros? Tengo curiosidad acerca de este desplazamiento de escritura en particular; en este caso, no debería haber ninguna razón para escribir el flujo de bits en un desplazamiento diferente de 0. También intente verificar el flash después de la escritura, y solo para asegurarse, intente ejecutar el comando "Arrancar desde el dispositivo de memoria de configuración" como se muestra en la página 59 de ug908.