Written by Sebastian Baquero
Objetivos
- Programación y configuración de un hardware realizado en la plataforma Quartus II (Nios II) por medio de la utilización de Eclipse.
- Verificación de la completa construcción del software y el enlazamiento de la programación con el hardware.
- Realizar un analisis interno del funcionamiento de programa por medio del "Debug" ya sea para mirar todo el proyecto en funcionamiento interno o realizar esto mismo pero paso a paso.
Eclipse
Eclipse es una plataforma de "sotfware" que esta compuesto por un conjunto de herramientas de programación cuyos códigos son abiertos y en multiplataformas.
Esta plataforma se usa para desarrollar entornos integrados como el IDE de Java, (JDT) y el compilador (ECJ) que se entrega como parte del mismo, aunque también es usado para otro tipos de aplicaciones como BitTorrent o Azureus.
Fue desarroollado originalmente por IBM.
Características
- Eclipse dispone de un editos de texto con un analizador sintactico.
- La compilación es en tiempo real.
- Tiene pruebas unitarias con JUnit.
- Control de versiones con CVS.
- Integracion con Ant.
- Asistentes para creación de proyectos, clases, test, etc.
- Refactorización.
- Posee "plugins" libremente disponibles y posibilita añadir control de versiones con Subvesion e integración con Hibernate.
Procedimiento
Primeramente necesitamos tener el archivo de Quartus II de la practica anterior, abrir el archivo y compilarlo. Una vez que el archivo este sintetizado completamente y que no sen encuentre ningún error debemos programarlo en la FPGA, ya despues de esto podemos proceder a realizar la parte de "software" la cual consistirá en la implementación de un programa en lenguaje C.
Buscamos el archivo "Nios II 15.0 Sotfware Build Tools for Eclipse" que es el utilizado para este curso. Luego aparecerá un recuadro para crear nuestro espacio de trabajo (workspace) en el cual vamos a crear uno nuevo con el nombre que deseemos ponerle en este caso utilizaresmos "nios_2" luego le damos click en "OK".
Luego apareceré la plataforma de eclipse si nigun archivo en como lo muestra la siguiente figura.
Figura 1. Plataforma Eclipse lista para crear un proyecto.
Después vamos a crear nuestro archivo en Eclipse, para ello damos click en la opcion File>New>Nios II Apliaction and BSP from Template. Luego aparecerá una ventana "Nios II Sotfware Examples" y aparecen tres recuadros vacíos. El primer recuadro es "SOPC Information File name" en este recuadro debemos abrir el archivo .sopcinfo que se generó al compilar el archivo en Quartus II, le damos click a nuestro archivo y luego le damos la opción "Abrir", hay que esperar un tiempo miestras va extrayendo los archivos correspondientes a ese proyecto.
Seguidamente nos permitirá poner el nombre al proyecto y le vamos a poner el nombre de "mi_nios2", selecionaremos en el cuadro de "Templates" el archivo "Hello Word" y "Finish", tal como se ve en la siguiente imagen.
Figura 2. Menú para cear el proyecto tomando la informacion del proyecto hardware de Quartus.
Una vez esperamos a que se termine de crear nuestro proyecto, apareceran en la parte izquierda de la plataforma de Eclipse dos carpetas una de ellas "mi_nios2" y la otra "mi_nios2_bsp". (Ver Figura 3)
Figura 3. Creación del proyecto con todos los archivos y librerias. "Mi_nios2" y "Mi_nios2_bsp".
Vamos a verificar que los periféricos que creamos en la partica anterior en el Qsys esté en nuestro proyecto, para ello vamos a abri en la carpeta "mi_nios2_bsp" el archivo "system.h". En nuestro caso los perifericos que nos deben aparecer como mínimo son los siguientes: "RAM_JESUS_BASE", "DIV_FREQ_BASE", "JTAG_UART_BASE", "LEDS_BASE", "SW_BASE", "SYS_CLK_BASE", y "UART_BASE".
Figura 4. Libreria "system.h" donde se encuentran definidos todos los periféricos.
A continuación va a ver la imagen que contiene los perifericos de tal manera que le sirva de guia para identificar que el archivo se creo correctamente. Otra forma que nos permite verificar que el proyecto está bien creado se emplea mirando la ubicación de memoria de cada periférico como por ejemplo "RAM_JESUS_BASE" tiene una ubicación de memoria de "0x20000", en caso que no llegue a aparecer una direccion diferente a "0X00000" debe ir a "Qsys" y verificar que todos los perifericos estes correctamente conectados con sus respectivos macos.
Figura 5. Periféricos de Nios II extraidos de Qsys.
Inicialmente antes de modificar el archivo "hello_world.c", vamos a realizar un procedimiento que debe realizar siempre que vaya a realizar cualquier proyecto de tal manera que no vaya a generar ningun problema cuando se realice la respectiva programación.
Primeramente debemos guardar los cambios que hayamos realizado y luego si vamos a la primera carpeta y le damos click "derecho" y aparecerá un pequeño menú, allí le vamos a escoger la opción "Clean Project" la cual nos permite limpiar nuestro poyecto como su nombre lo dice y realizar una actualización que se haya realizado en el proyecto de "Quartus II", se repite este mismo pasa en la segunda carpeta. Cuando hayamos realizado la limpieza y actualización de las dos carpetas procedemos a crear el archivo "Nios II > Generate BSP" como se muestra en la siguiente imagen.
Figura 6. Generación del archivo BSP
Cuando hayamos creado el "BSP" procedemos a contruir nuestro proyecto yendo a la primera carpeta donde está ubicado el archivo "hello_world.c", le damos click derecho y luego escogemos al opción "Build Project", y despues debemos esperar un momento miestras se crea. Si el proyecto se construye satisfactoriamente debe crear dos archivos entre los cuales uno de elos tiene la extensión ".elf" como se muestra en la figura 7.
Figura 7. Creacio de archivos ".elf"
Otro de los pasos que debemos a hacer para verificar el correcto funcionamiento interno por pasos o por completo de cualquier proyecto es con la utilizacion del "Debug" que se realiza dando click derecho en la primera carpeta "mi_nios2>Debug As>Debug Configuration..", despues aparecerá una ventana para configurar el debug. En esta ventana en el recuadro que esta ubicado a la izquierdo le damos doble click en "Nios II Hardware" el cual nos desplegara otro cuadro al lado derecho para ponerle nombre a la configuración en este caso le pondremos "nios2", además debemos verificar que la dirección del proyecto de hardware se correcta para evitar conflicto entre la conexión software-hardware.
Figura 8. Ventana de Configuracion del Debug.
Después abrimos la segunda pestaña que corresponde a "Target Connections" y le damos click en "Refresh Connections", y aparecerá en el recuadro el Nios creando en el hardware. Luego le damos click en el boton "Apply" y por ultimo en "Debug", nos preguntará si deseamos cambiar la visualización del programa entonces la damos "OK".Seguidamente nos puede aparecer una ventana si deseamos guardar las modificaciones realizada en el archivo "hello_world" en caso de haber modificado algo, de lo contrario aparecerá la siguiente imagen.
Figura 9. Menú que esta conformado el procedimiento de Debug.
Otras formas para realizar la ejecucion del programa o el debug, se muestra en la figura 10 y 11.
Figura 10. Corres el programa directamente de la interface de Eclipse.
Figura 11. Degun utilizando una opción de la barra de menú de Eclipse.
También podemos ver la opcion de "BSP Editor" cuando nuestro proyecto este completamente construido, visitando cada una de las pestañas. Si miramos en la pestaña "Linker Script" vemos que tomó la ram construida en el "Qsys" de Eclipse II utilizada en la practica anterior, inclusive podemos ver el tamaño de bytes que tiene la memoria ram, el rango de dirección de la memorio y los bytes de salida. En la pestaña "Enable File Generation" podemos ver los "BSP Files" creados entre los cuales está los componentes de software correspondientes a los drivers y sistema operativo, ademas de los generados. (Ver figura 10 y 11)
Para conocer mas a fondo a cerca del "BSP Editor", anexo al final de esta pagina el manual de Eclipse en el cual encontraran a partir de la página 12.
Figura 12. Visualizacion "Linker Script" del "Debug Editor".
Figura 13. Visualizacion "Linker Script" del "Debug Editor".
Despues de realizar los procedimientos anterior, ya podemos realizar cualquier programacion sobre la plantilla "hello_wolrd.c". Para ello vamos a copiar el siguiente programa que se ve en la figura 12, y luego de este vamos a repetir los procemientos anterior para finalizar en el "Debug" y mirar paso a paso que pasa con el programa a nivel interno.
Figura 14. Implementación de un nuevo programa en el cual esta presente un contador.
Figura 15. Conteo ascendente en el Debug de Nios II en Eclipse.
Ya para finalizar vamos a realizar la ultima modificación del programa en el cual va a estar involucrados unos de los periféricos mostrados al principio de la creacion del proyecto. Los que vamos a utilizar son: "SW_BASE" y "LED_BASE", en el cual el siguiente programa lo que va a realizar es un conteo ascendente y descendente dependiento de la posicion de los "switches". ¿Cómo realiza el conteo? - Cuando se accione el "switch", si este es igual a "1" va a poner el valor del conteo en los leds de la FPGA, si es igual a "2" el conteo va a ser descendente de a uno en uno igual que el ascendente, pero si no cumple ningua de estas dos condiciones entonces la salida va a ser la negada del valor del conteo. Para ello tambien podemos valernos de la ayuda del debug para verificar su funcionamiento.
Figura 15. Conteo ascendente y descendente en Nios II.
Figura 16. Debug del conteo ascendente y descendente de Nios II en Eclipse.
Diagrama de estados
Figura 17. Diagrama de estados del último programa.
Por último adjunto video del programa visto en la figura 15 y 16, ya implementado en la FPGA en el cual se puede ver el funcionamiento en cada caso.
Condición - "Contador Negado"
Condición - "Contador Ascendente"
Condición - "Contador Descendente"
Nota: Adjunto los archivo que contienen los archivos que contienen este práctica con el fin de ser ayuda para realizar comparación.
Referencias
- https://www.altera.com/content/dam/altera-www/global/en_US/pdfs/literature/hb/nios2/n2sw_nii52017.pdf