Implementación de procesadores ARM Cortex-M1 y Cortex-M3 en Avanxe 7

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.

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

1. Descarga de Softwares requeridos

2. 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.

3. Instalar y configurar paquetes

Instalar y configurar ciertos paquetes y archivos de soporte de terceros (Third Party Parts).

La descarga e instalación de los repositorios o paquetes se explican en el siguiente video tutorial proporcionado por ARM. 

4. 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.

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.

Por último generar el bitstream, volver a sintetizar en caso de que se requiera.

3. 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.

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

 

 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”/>

4. 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.

5. 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!

Menú