Introducción
ARM ha creado un modelo gratuito y de fácil acceso de dos IP de procesadores Cortex-M diseñados específicamente para su implementación dentro de la lógica programable FPGA. Tanto el Cortex-M1 como el Cortex-M3, están disponibles para descargarse de forma gratuita a través de DesignStart FPGA.
La serie de procesadores Cortex-M presenta un rendimiento de 32 bits y está diseñada para permitir a los desarrolladores crear soluciones sensibles al costo y con limitaciones de energía para una amplia gama de dispositivos como: microcontroladores, sistemas de carrocerías de automóviles, redes inalámbricas y sensores gracias a su equilibrio óptimo entre área, rendimiento y potencia.
Aquí se explicará a detalle el procedimiento a seguir para implementar cualquiera de los dos procesadores antes mencionados, la información aquí mostrada se basa en Cortex-M3, pero es aplicable en Cortex-M1 las variaciones en el procedimiento son diferenciables, también se explica para implementación en Tarjeta de desarrollo Avanxe7 de Intesc, con sistema operativo Windows 10 y un programa de comunicación serial.
Importante:
Aunque el procedimiento es semejante al expuesto en la documentación del proyecto proporcionado por ARM-Diligent y en los videos tutoriales de ARM, existen ciertos ajustes que son necesarios para la compatibilidad con la tarjeta Avanxe7 de Intesc.
Requisitos
- Tarjeta de desarrollo Avanxe 7 versión 100T o 35T
- VIVADO Design Suite versión 2019.1*
- Compilador ARM Keil μVision 5*
- INTegra 6.1.0*
- Terminal Putty o similar
*Versiones recomendadas
IMPLEMENTACIÓN
Descarga de Softwares requeridos
1. Descarga del procesador
El procesador es el IP diseñado por ARM (DesignStart) compatible con VIVADO, seleccione el procesador que desee implementar.
Te recomendamos crear una carpeta llamada “ARM_Xilinx_Mx” en el disco local C:/ en donde se almacenarán todos los repositorios. Descomprima el archivo descargado.
2. Descargar y agregar paquetes de terceros
Instalar y configurar ciertos paquetes y archivos de soporte de terceros (Third Party Parts).
- Descargar repositorios de Diligent
- Descargar repositorios de Micron
- Descargar repositorios de Cypress
La descarga e instalación de los repositorios o paquetes se explican en el siguiente video tutorial proporcionado por ARM.
3. Acondicionamiento del proyecto en VIVADO
El siguiente paso es abrir el proyecto que se encuentra en la carpeta C:\ARM_Xilinx_M3\hardware\m3_for_arty_a7\m3_for_arty_a7.
En Vivado, dirigirse a Tools > Settings > IP Defaults y agregar los repositorios de la carpeta Arm_ipi_repository, dar clic en el botón agregar con el símbolo de suma y se selecciona la ruta C:\ARM_Xilinx_M3\vivado\Arm_ipi_repository, dar clic en OK
En el diagrama a bloques del proyecto, en las especificaciones de cada uno de los bloques señalados, cambiar sus especificaciones predeterminadas en la pestaña “Re- customize” (que se puede abrir dando doble clic sobre el bloque ) en el apartado “Board Interface” de la predeterminada a “Custom”
Los bloque señalados corresponden, de arriba a abajo respectivamente a
- axi_uartlite_0
- axi_quad_spi_0
- axi_gpio_0
- axi_gpio_1
Sintetizar el proyecto y verificar que no salgan errores, abrir el esquemático y dar clic en I/O Ports.
Después se remapean los pines usando los de Avanxe 7 tal como se muestran en la siguiente tabla.
ImportanteLos pines mostrados en las imágenes son sólo de ejemplo, se pueden utilizar los que mejor se adecuen a las necesidades en caso de que se requiera, recuerde utilizar los pines correspondientes a la versión de tu tarjeta.
ImportanteCualquier modificación futura al hardware se requerirá repetir los pasos desde este punto hasta el acondicionamiento de memoria (Paso 3)
El siguiente paso es agregar los repositorios del software, para eso hay que lanzar SDK desde vivado en File > Launch SDK y seleccionamos la ruta de exportación como se muestra en la imagen
En el SDK dirigirse a Xilinx > Repositories y una vez en la nueva ventana agregar los repositorios añadiendo la ruta C:\ARM_Xilinix_M3\vivado\Arm_sw_repository
Regresando a VIVADO hay que seleccionar el modelo de FPGA que se esté utilizando, ya sea el 35T o el 100T. Para eso hay que dirigirse a Flow > Project Manager > Project Summary > Project Part > Project device y seleccionar el modelo de FPGA.
ImportanteActualizar los IP en caso de que VIVADO lo solicite, dirigirse a Menú Reports > Report IP status > re-run report
Por último generar el bitstream, volver a sintetizar en caso de que se requiera.
4. Acondicionamiento de memoria
Para que el IP pueda operar en Avanxe 7 habrá que adecuar los bloques de memoria correspondientes al FPGA integrado de la tarjeta, es por eso que se debe crear el archivo que contiene la información del mapa de memoria .mmi (Memory Map Information)
Primero debemos ejecutar los tres procesos del Flow Navigator:
- RTL Analysis -> Open Elaborated Design
- Synthesis -> Open Synthesis Design
- Implementation -> Open Implemented Design
Y después en la consola TLC se ejecuta el comando:
source C:/ARM_Xilinx_M3/hardware/m3_for_arty_a7/m3_for_arty_a7/make_mmi_file.tcl
Lo siguiente es exportar la descripción de Hardware para poder ser utilizada en el Software. El siguiente video se explican los pasos que hay que seguir.
ImportanteSeguir los pasos hasta el minuto 7:10
ImportanteEn el video se utiliza una memoria virtual V:/ pero en nuestro caso la ruta es C:\ARM_Xilinx_M3
Para que el compilador Keil μVision pueda generarnos el archivo. elf necesario para la creación de un nuevo .bit programable necesitamos cambiar en el archivo indicado una línea de código
- Abrir en un bloc de notas el archivo make_hex_a7.bat encontrado en: C:\ARM_Xilinx_M3\software\m3_for_arty_a7\Build_Keil
- Borrar la siguiente línea de código call fromelf –elf –output bram_a7.elf objects\m3_for_arty_a7.axf
- Sustituirla por la siguiente instrucción: copy objects\m1_for_arty_a7.axf bram_a7.elf
ImportanteEditar el archivo m3.mmi sólo si se está utilizando la versión 100T
Ir a la ruta: C:\ARM_Xilinix_M3\hardware\m3_for_arty_a7\m3_for_arty_a7 abrir el a archivo m3.mmi con algún editor de texto y cambiar la siguiente línea:
<Option Name=”Part” Val=”xc7a35ticsg324-1L”/>
por:
<Option Name=”Part” Val=”xc7a100tcsg324-2L”/>
5. Creando un código en Keil
El último paso para comprobar que el procesador ARM ya esté funcionando en nuestra tarjeta es creando un código en el compilador Keil uVision.
Dentro de la carpeta C:\ARM_Xilinix_M3\software\m3_for_arty_a7\Build_Keil se encuentra un código de testeo, abrirlo y modificar una línea de código como por ejemplo algún print
Compilar el código pulsando el botón Rebuild
En la parte inferior se muestra el mensaje 1 archivo(s) copiado(s) cuando el compilador ha creado el archivo bram_a7.elf.
6. Programando el FPGA
Por último habrá que crear el .bit a partir del .hex generado por el compilador. Para eso hay que abrir la consola de windows (símbolo de sistema) y ejecutarla como administrador.
Dentro de la consola hay que posicionarnos en la ruta del proyecto de VIVADO con el comando:
cd C:\ARM_Xilinx_M3\hardware\m3_for_arty_a7\m3_for_arty_a7
Una vez ahí se ejecuta el archivo make_prog_files.bat.
Al hacerlo se generan los archivos .bit y .mcs.
Con ayuda de INTegra se programa la tarjeta Avanxe 7 con el .bit creado y que se encuentra en la ruta :
C:\ARM_Xilinix_M3\hardware\m3_for_arty_a7\m3_for_arty_a7
Para corroborar que el procesador se haya implementado correctamente y el código hecho en Keil esté corriendo, utilizaremos la terminal Putty configurando el puerto COM que se le haya asignado a la tarjeta a 115200 baudios.
Una vez abierto el puerto se aplica un reset con el switch R15 y deberá aparecer en la consola el mensaje actualizado.
¡Descarga el documento con algunos códigos de ejemplo!