Practica #5 Nios II

for more visit: www.fpgalover.com

If you like my FREE FPGA tutorials, buy me a coffee, or a biscuit or whatever you like.

Written by: Holguer A Becerra

Con esta practica usted aprenderá a incorporar un procesador embebido en los diseño con FPGAs de ALTERA, en este caso vamos a utilizar el soft-core llamado Nios II el cual es un procesador de 32 bits configurable basado en arquitectura Harvard.

Vamos a seguir paso a paso este manual y lograremos hacer una descripción de hardware de un sistema embebido con procesador basado en FPGAs haciendo que el diseño que tengamos pueda tener los beneficios que se tendrían utilizando cualquier otro procesador pero con la ventaja de poder implementar hardware en paralelo que nos ayude a bajar el consumo de energía y distribuir de una mejor manera todos los procesos que necesitemos implementar en un SoC(System on a Chip).

Instrucciones:

Nota: Esta practica fue realizada basada en la plataforma DE0-NANO, en este caso usted usara la plataforma DE2-115 y debera adaptarla a esta

  • En este caso, debe modificar las caracterisiticas de la memoria SDRAM y en vez de usar una memoria EPCS usara la memoria Flash de la DE2-115.

  • Puede usar la siguiente guia si va a usar la DE2-115.

Solución(Solo para guiarse):

  • DE0-NANO Descargar.

  • DE2-115 Descargar.

  • Genere una nueva plantilla con el system builder de la NANO que tenga los elementos de la figura siguiente(PARA DE2-115):

    • Ahora copie la plantilla a una ruta cercana al disco principal y sin espacios,

    • Abra la plantilla y vaya al menú Tools->Qsys, aparecerá la siguiente ventana:

    • Luego vaya a File->Save As y escoge el directorio donde esta la plantilla y guarda el proyecto con el nombre de ´mi_nios´.

    • Una vez guardado el proyecto empezaremos a construir nuestro propio procesador en base al Nios II.

    • A mano izquierda de la ventana encontrara un buscador en el cual escribirá Nios II, y dará doble click sobre el elemento que se llame Nios II processor.

    • una vez ha dado doble click sobre el nios II processor, aparecerá una ventana donde usted podrá ver tres tipos diferentes de Nios II.

      • Nios II/e

      • The Nios II/e "economy" core is designed to archieve the smallest possible core size. As result, this core has limited feature set, and many settings are not available when the nios II/e core is selected

    • Nios II/s

      • The Nios II/s "standard" core is designed for small size while maintaining performance.

    • Nios II/f

      • The Nios II/f "fast" core is designed for fast performance. As a result, this core presents the most configuration options allowing you to fine-tune the processor for performance.

Cada tipo de nios tiene su propia caracteristica, el tipo Nios II/e es el mas básico de todos, luego sigue el Nios II/s con rendimiento intermedio y por ultimo el Nios II /f el cual es el procesador Nios mas rápido de todos y es capaz de ejecutar mas instrucciones por segundo.

En este caso usted escogerá el Nios II/e el sistema mas básico

    • De finish y automáticamente el procesador se agregara a la ventana del diseño

    • Oprima click derecho sobre el nombre del nuevo elemento y renombrelo a 'CPU'

    • Ahora vamos a buscar a mano izquierda en la ventana un elemento llamado System_ID y lo agregamos al proyecto y lo renombramos a sys_id

"The system Identification (ID) core is a read-only component that contains a unique ID number

(32-bit value) and a timestamp9 (32-bit value). It belongs to a CPU core to make it unique and

distinguishable from other CPUs in a SoC. In this design it is only used to avoid the system

generation warnings of the SOPC-builder".

    • Ahora es momento de agregar la RAM del sistema, la DE0-NANO tiene una SDRAM externa que utilizaremos para este proposito, buscamos en el elemento configurándolo de la siguiente manera(DE2-115 SDRAM Specs)

Renombre la sdram_0 a 'sdram'.

    • (Recuerde que la DE2-115 no tiene EPCS, entonces agregue lo que aparece en Click aqui para la DE2-115 & SPECS)Ya agregamos la RAM, ahora debemos agregar el controlador de la memoria NO Volatil del sistema que hemos manejado en la practica tres, la memoria EPCS, donde se almacenara el software o los datos de incialización del software que correrá el procesador Nios II, para esto buscamos en el menu de elementos el componente, se deja en automático, lo agrega y lo renombra a solo 'epcs'

    • Ahora agregaremos un timer para el sistema, busque el elemento ''Interval Timer'' y agréguelo al sistema y renombrelo a ''sys_timer''

    • Ya casi tenemos un sistema de procesador completo... ahora debemos agregar puertos de entrada y salida del sistema(Estilo Microncontrolador).

    • Buscamos el elemento PIO y agregamos un puerto de salida de 8 Bits que llamaremos LED y luego un puerto de entrada de 4 bits SW.

    • (PARA LA DE2-115 SW DEBE SER DE 18 BITS, Y CREE PARA LOS LEDS, UN PUERTO LLAMADO LEDR Y LEDG, EL LEDR 18 BITS DE Y LEDG 9 BITS)

en el sistema usted podría agregar tantos Buses de entrada y salida como quiera, a diferencia de un microcontrolador convencional, el limite de pines no es un impedimento.

  • Ahora debemos agregar el bus de programación del sistema para poder programar/debug el procesador Nios II, busquemos el elemento ''JTAG UART'' y lo agregamos al sistema, y renombramos el elemento a ''jtag''.

    • Ahora vamos agregar un PLL que sera el encargado de generar el Reloj del sistema y el reloj que controla la SDRAM, para esto buscamos el elementos ''Avalon PLL'' y configure de la siguiente manera y luego renombre a ''sys_pll''

    • Ahora agregue al sistema dos modulos '' clock_source'' a 100MHz, el primero renombrelo a ''sys_clk'' y el otro a ''ram_clk''

    • Hasta ahora solo hemos agregado elementos y elementos al sistema, pero ahora llego la hora de unir todos los elementos el uno al otro, para esto vamos a seguir paso a paso las siguientes instrucciones.

      • Empecemos desde abajo hasta arriba, vamos a unir los modulos ''sys_clk'' y ''ram_clk'' con el modulo PLL.

    • Ahora una el reloj ''sys_clk'' con el ''jtag, SW, LED, timer, epcs, sdram, sys_id y la CPU''

      • una vez se tenga el reloj del sistema unido a todos los elementos, cambie el nombre de ''clk_0'' a ''clock_50'' y una la salida de este reloj a la entrada el PLL

      • ahora una la salida ''clk_reset'' del modulo ''clock_50'' con todos los otros elementos del sistema.

      • Conecte desde la CPU a la EPCS el "jtag_debug_mode_reset" con el "reset" de la EPCS(EN ESTE CASO si es la DE2-115, conecte el reset a los tres modulos que controlan la FLASH memory).

      • Ahora una el ''data_master'' "Avalon Memory Mapped Slave" del procesador nios II, con los otros elementos del sistema por a los puertos de tipo 'Avalon Memory Mapped Slave'

      • Ahora una el 'instruction master' del procesador Nios II a la SDRAM 's1' y tambien a la EPCS.

    • Ahora de doble click sobre el elemento ''cpu'' y configure de la siguiente forma el mapa de memoria de la misma, para configurar que cada vez que se haga reset el sistema el procesador debe descargar el programa de la memoria EPCS y que cuando cargue el software el programa deberá descargarlo a la memoria RAM(Ver PARA LA DE2-115)

      • Reset Vector: This vector points to a memory base address ”[...] where the reset code (boot loader) resides [...]”.

      • Exception Vector: This vector points to a memory base address ”[...] where the generalexception vector (exception address) resides [...]” .

      • Ya tenemos todo el sistema unido de forma interna, ahora debemos decidir los cables o buses que debemos llevar afuera del SoC que estamos creando para que cuando lo instanciemos en el TOP de la plantilla del proyecto podamos unir estos buses al mundo externo.

      • Nos ubicamos en el elemento 'sdram_controller' y nos ubicamos en 'wire' donde seleccionaremos en la columna ''export'' click to export y le ponemos el nombre de 'sdram'

      • lo mismo se hará para el elemento EPCS, LED, SW y ram_clk

    • La ultima conexión sera al bus de interrupciones del sistema donde debemos situarnos en la columna ''IRQ'' y conectar el ''IRQ 31'' a la ''EPCS'' el ''Timer'' y ''JTAG''

    • Ahora vamos al menu System->Assign Base Address y se oprima, con esto deberán desaparecer todos los errores

Seleccione también ''Assign Interrupt Number''

    • Es hora de revisar en resumen el sistema que creamos en base al procesador Nios II, explorando las pestañas se vera lo siguiente:

(PARA LA DE2-115 DEBERIA VERSE ALGO SIMILAR A ESTO)

    • Ahora para crear el sistema se va a la pestaña ''Generation'' y se oprime en ''Generate''

    • usted deberá ahora esperar a que se genere el sistema que usted describio por medio de bloques utilizando el Qsys, una vez generado el sistema, copie la instanciación del procesador que usted ha creado que esta en la pestaña HDL example, cierre la ventana del Qsys e instancie ese modulo sobre la plantilla principal del proyecto de la DE0-NANO de la siguiente forma(PARA LA DE2-115 deberia quedar algo asi)

    • Antes de generar cualquier HW, debe agregar al proyecto el archivo ''mi_nios.qsys'' que esta en la carpeta de la plantilla.

    • Ahora vea el RTL y Genere el archivo .Sof del SoC.

  • Ahora puede pasar a la parte 2 de esta practica donde aprenderá a programar el procesador usando lenguaje C/C++.

for more visit: www.fpgalover.com

If you like my FREE FPGA tutorials, buy me a coffee, or a biscuit or whatever you like.