You are on page 1of 43

Ing.

Hector Cabrera
Nios II
Introducción al diseño de sistemas con Nios II
Parte I

1
Agenda

 Flujo de Diseño

 Requerimientos.

Ing. Hector Cabrera


 Bosquejo.

 Flujo Quartus II – Parte I

 Flujo SOPC Builder

 Flujo Quartus II – Parte II

 Flujo Nios II EDS


2
Flujo de Diseño
Archivo HDL SoPC Builder Archivo de descripción
(Verilog / Vhdl) del Sistema
· Selección de IP
· Realizar Conexiones
· Generar sistema en HDL

Ing. Hector Cabrera


Quartus II Quartus II
· Edición HDL · Creación de código
· Asignar Pines FPGA fuente
· Compilar proyecto · Edición de código
· Descargar a FPGA · Compilación de
código
· Depuración de
solución
· Ejecutar código

Configuración Descarga de
de FPGA Sistema Objetivo aplicacion 3
· Depuración en tiempo
de ejecucion
Requerimientos
El establecimiento de requisitos funcionales del sistema ayuda a planificar IP
necesarios así como hardware. Para este sistema en particular los
requerimientos son:

Ing. Hector Cabrera


 Solo utilizar recursos internos del FPGA para el núcleo del sistema.

 Desplegar una secuencia determinada en diodos emisores de luz (8)

 Secuencia desplegada a intervalos de 1 segundo.

 Sistema consistente de los bloques mínimos necesarios

4
Bosquejo

Ing. Hector Cabrera


5
Nota: La estructura de interconexión es
generada de manera automática.
Flujo Quartus II

Ing. Hector Cabrera


• Parte I

6
Proyecto Quartus II
La sección de hardware del sistema Nios II es desarrollada en Quartus, por lo
que se tomara como base un proyecto de este software.

 Inicio -> Todos los Programas -> Altera -> Quartus

Dentro de Quartus II crearemos un nuevo proyecto utilizando el asistente.

Ing. Hector Cabrera


 File -> New Project Wizard…, dentro de la primera pagina del asistente
se seleccionara la ruta de trabajo asi como el nombre del proyecto.

7
Proyecto Quartus II
La segunda pagina del asistente permite incluir archivos preexistentes al
proyecto, para este sistema no agregaremos ningún archivo.

Ing. Hector Cabrera


 Next

8
Proyecto Quartus II
Selección de dispositivo objetivo

Ing. Hector Cabrera


9
Proyecto Quartus II
El cuarto cuadro de dialogo nos permite seleccionar diferentes herramientas
para la compilación y simulación del sistema. Este tema se encuentra fuera del
alcance de este documento por lo que se utilizara las herramientas estándar.

Ing. Hector Cabrera


 Next

Finalmente se presenta un resumen de las características del proyecto.

10
 Finish
Proyecto Quartus II
Se agrega un archivo esquemático donde se realizaran las conexiones del
sistema Nios II con los pines físicos del dispositivo reconfigurable.

 File -> New -> Block Diagram / Schematic File

 La primera sección relacionada con el

Ing. Hector Cabrera


desarrollo del sistema dentro de Quartus
II finaliza en este paso. Sin cerrar esta
aplicación se continua con la apertura
de SOPC Builder.

11
Flujo SOPC Builder

Ing. Hector Cabrera


• Descripción sistema Nios II

12
Descripción Nios - SoPC
El sistemas Nios II es descrito por medio de SoPC Builder

 Tools -> SOPC Builder o clic en

 Nombrar al sistema como: first_nios_system

Ing. Hector Cabrera


13
Descripción Nios - SoPC
Agregar - System ID

Por que?: Este es uno de los periféricos mas importantes del sistema, este
permite a las herramientas de desarrollo de software para Nios II saber si la
aplicación desarrollada pertenece al hardware objetivo.

Ing. Hector Cabrera


 Peripherials -> Debug and Performance System ID peripherial

 Este periférico no tiene parámetros configurables, por lo que


presionaremos Finish

Nota: Solo puede existir un periférico de este tipo por


sistema y debe de llamarse sysid. Cualquier otro nombre
provocara el no reconocimiento del periférico. 14
Renombrar: clic derecho -> Rename
Descripción Nios - SoPC
Agregar – Procesador Nios II

Por que?: Es el cerebro del sistema, todo el software será interpretado por el y
enviara la señales correspondientes a sus periféricos para completar las tareas
asignadas.

Ing. Hector Cabrera


 Processors -> Nios II processor

 Seleccionar la versión Nios II/e

 Finish y renombrar dispositivo


como «cpu»

15
Nota: Se regresara a configurar este dispositivo
nuevamente
Descripción Nios - SoPC
Agregar – On-Chip Memory

Por que?: Utilizaremos una memoria implementada dentro del dispositivo


FPGA como espacio para almacenar el software del sistema así como datos.

 Memories and Memory Controllers ->

Ing. Hector Cabrera


On-Chip -> On-Chip Memory (Ram or Rom)

 Data width : 32

 Total Memory size : 20 Kbytes

 Finish y renombrar «onchip_mem»

16
Descripción Nios - SoPC
Agregar – Interval Timer

Por que?: Muchas aplicaciones requieren medir intervalos de tiempo para


realizar acciones, en nuestro caso especifico actualizar el estado de los diodos
emisores de luz cada 1 segundo.

Ing. Hector Cabrera


 Peripherials-> Microcontroller Peripherials ->
Interval Timer

 Preset : Full Featured

 Finish y renombrar «sys_timer»

17
Descripción Nios - SoPC
Agregar – Periférico PIO (Parallel I/O) para LEDs

Por que?: Este tipo de periférico permite la interacción del sistema con el
mundo exterior. Para nuestro sistema Nios nos permitirá encender | apagar
los LEDs conectados a la tarjeta.

Ing. Hector Cabrera


 Peripherials-> Microcontroller Peripherials ->
PIO (Parallel I/O)

 Width : 8

 Direction : Output only

 Finish y renombrar «led_pio»

18
Descripción Nios - SoPC
Hasta este momento nuestro sistema debe lucir como en la figura inferior, ya
hemos agregado todos los bloques IP del sistema, pero aun hace falta una
limpieza general del sistema. Esta eliminara los errores y warnings mostrados
por SoPC Builder.

Ing. Hector Cabrera


19
Descripción Nios - SoPC
CleanUp – Direcciones base en Memoria y Prioridad de interrupciones.

Por que?: Nios II al igual que otros µC controla sus periféricos por medio de
operaciones de lectura/escritura de registros. Cada periférico debe tener
asignada un dirección de inicio que no se sobreponga a la de otro periférico.

Ing. Hector Cabrera


 System -> Auto-Assign Base Addresses. El sistema
automáticamente asignara un patrón de direcciones
adecuado.

 System -> Auto-Assign IRQs. El sistema


automáticamente asignara un orden de prioridad a las
interrupciones. En este caso es mejor asignarlo de
manera manual ya que SoPC no conoce las
características del hardware.
20
 Algunos mensajes deberán desaparecer después de
esta operación.
Descripción Nios - SoPC
CleanUp – Configuración de arranque para Nios II.

Por que?: Al momento del inicio del sistema Nios II, este buscara una memoria
pre determinada para iniciar la ejecución de instrucciones (programa). Para el
sistema en desarrollo se utilizara la memoria on-Chip, pero puede
seleccionarse memorias externas.

Ing. Hector Cabrera


 Doble clic en «cpu» (nucleo Nios II)

 Reset Vector : onchip_mem

 Exception Vector : onchip_mem

 Finish
21
Descripción Nios - SoPC
Generación del sistema Nios II

Por que?: Este proceso creara una descripción en lenguaje HDL de todos los IP
que se agregaron al sistema SoPC Builder. El resultado sera un concentrado de
las características del sistema que podrá ser utilizado por Quartus II y por Nios
EDS para continuar con el flujo de diseño.

Ing. Hector Cabrera


 Verificar que el sistema no tenga mensajes de error o advertencia.

 Clic en botón «Generate», el proceso puede durar varios minutos.

 Al terminar con éxito la generación, clic en Exit y regresamos a 22


Quartus II
Flujo Quartus II

Ing. Hector Cabrera


• Parte II

23
Proyecto Quartus II
De regreso al proyecto de Quartus II agregaremos el sistema recién descrito
para continuar con la sección de hardware del flujo de diseño.

 Doble clic en cualquier área vacía del archivo esquemático. Esto


lanzara el cuadro de dialogo de símbolos.

Ing. Hector Cabrera


 Project -> first_nios_system. Ok.

 Con el bloque del sistema siguiendo nuestro puntero, dar clic en 24


cualquier área vacia del esquemático para colocar una instancia de
first_nios_system.
Nota: Para realizar las conexiones,

Proyecto Quartus II
como la de reset_n se utiliza la
herramienta:

Agregar terminales al diseño first_nios_system.

Por que?: Cada terminal que agreguemos al sistema indicara a Quartus II que
debe asignar un pin físico para la conexión al exterior del FPGA.

 Doble clic en cualquier área libre del diseño esquemático. En el cuadro

Ing. Hector Cabrera


de dialogo de símbolos seleccionar c:/altera/... /quartus/libraries ->
primitives -> other -> vcc. Insertar de igual forma que el símbolo
first_nios_system y realizar conexión a la terminal de reset_n.

 Clic derecho en el símbolo first_nios_system -> Generate Pins for


symbol Ports. Es posible cambiar el nombre de los pines al dar doble
clic a estos.

25
Proyecto Quartus II
Asignación de pines Físicos del FPGA

Por que?: Permitir encaminar de manera correcta las señales generadas de


manera interna del FPGA con sus correspondiente generadores/receptores
fuera del dispositivo.

Ing. Hector Cabrera


 Processing -> Start -> Start Analisys and Elaboration.

 Assigments -> Pin planner. Asignar el correspondiente pin a cada


señal.

Nombre de la Señal

Pin Asignado
26
Proyecto Quartus II

Ing. Hector Cabrera


 La correspondencia de pines con componentes en la tarjeta Altera DE1
puedes ser consultada en:
27
“DE1 Development and Education Board – User Manual”

 Al finalizar la asignación File -> Close


Proyecto Quartus II
La FPGA cuenta con 484 pines, de los cuales solo estamos utilizando una
pequeña fracción, para evitar algún daño a cualquiera de los pines no
utilizador debemos configurar estos como entradas en alta impedancia.

 Assigments -> Device.

Ing. Hector Cabrera


 Clic en botón Device and Pin Option… Esto nos desplegara un nuevo
asistente. En la Category -> Unused Pins -> As input tri-stated with
weak pull-up. Ok.

28
Proyecto Quartus II
Compilación y carga del diseño al FPGA

Por que?: La compilación crea un archivo de configuración especifica para el


FPGA, una vez creado este archivo se debe de descargar al dispositivo
reconfigurable para generar la infraestructura necesaria para la carga del
software del sistema.

Ing. Hector Cabrera


 Processing -> Start Compilation o . Esto inicia el proceso de
compilación, toda la operación puede tardar varios minutos.

 Tools -> Programmer. El asistente para la programación de dispositivos


se desplegara. Es importante corroborar que el hardware de
comunicación este seleccionado, en caso de no estarlo es necesario
buscar el dispositivo en -> Hardware Setup y elegirlo.

29
Proyecto Quartus II

Ing. Hector Cabrera


 Verificar la operación de Program/Configure

 Iniciar la carga en el FPGA, al termina la barra de progreso mostrara 30


100%. En este momento el sistema Nios II esta cargado en el
dispositivo pero aun no es capas de realizar ninguna tarea sin el
software apropiado.
Flujo Nios II EDS

Ing. Hector Cabrera


• Desarrollo de Software

31
Nota: Si se ejecuta el software Nios II

Proyecto Nios EDS


EDS en windows 7, ejecutarlo como
administrador.

Para el desarrollo del software del sistema es necesario utilizar el IDE eclipse
con un plug-in de desarrollo Nios Embedded Design Suit.

 Inicio -> Todos los Programas -> Altera -> Nios II EDS … -> Nios II …

Si es la primera vez que se lanza la aplicación Nios EDS se solicitara establecer

Ing. Hector Cabrera


una dirección para un área de trabajo determinada llamada «Workspace», en
esta dirección se almacenaran todos los proyectos desarrollados. .

32
Proyecto Nios EDS
Eclipse es una plataforma de desarrollo de software capaz de adaptarse a
diferentes lenguajes de programación, por lo que es importante asegurarnos
que se encuentra configurado para el desarrollo de aplicaciones para nios II.

Ing. Hector Cabrera


 Window -> Open Perspective -> Other … -> Nios II

Esta operación solo debe llevarse acabo si la perspectiva es diferente a Nios II,
otro forma de alternar de perspectivas es utilizando el acceso rápido colocado
en la esquina derecha superior.
33
Proyecto Nios EDS
Iniciar proyecto de software para Nios II.

 File -> New -> Nios II Application and BSP from Template.

El proyecto de software se encuentra


fuertemente ligado al hardware diseñado

Ing. Hector Cabrera


con SOPC Builder.

 Agregar el archivo de descripción


de sistema generado por SOPC
Builder. (.sopcinfo)

 Dar nombre al proyecto:


first_nios_system

 Seleccionar el nombre del núcleo 34


Nios II agregado al sistema.

 Templates : Blank Template


Proyecto Nios EDS
Todo proyecto Nios II consta de dos secciones, una sección de software y una
de hardware. Esta ultima se encarga de dar información al proyecto de eclipse
sobre que hardware se encuentra disponible para utilizar por el software del
sistema. Esta sección especifica los detalles para la sección de hardware.

 Seleccionar Create a new BSP project based on the application project

Ing. Hector Cabrera


template

 Dar nombre al proyecto

 Finish

35
Proyecto Nios EDS
El proyecto se divide en la carpeta de software y hardware, la carpeta de
hardware solo proporciona archivos de soporte para el software a desarrollar
por lo que no se llevaran acabo modificaciones en esa sección.

Crear nuevo archivo de código para nuestro


proyecto:

Ing. Hector Cabrera


 Clic derecho en first_nios_system -> new
-> Source File

 Source File : main.c

 Template : Default C source template

 Finish
36
Proyecto Nios EDS
El desarrollo de software se lleva acabo en la pantalla de edición, antes de
iniciar con la codificación de nuestra aplicación aclararemos algunos
conceptos.

Ing. Hector Cabrera


«system.h»

Esta librería es generada de manera automática en el sección de hardware


(first_nios_system_bsp). Esta librería contiene todas las direcciones de los
registros para controlar los periféricos del sistema. 37
Proyecto Nios EDS
Existen 3 métodos para el manejo por software de los periféricos que forman
al sistema Nios II, estos son:

Nivel de registros: Este es el nivel de abstracción mas bajo para el control de


los periféricos del sistema. Se basa en las operaciones de lectura/escritura en

Ing. Hector Cabrera


las direcciones de los registros de control. Altera proporciona macros para
facilitar estas operaciones, en las cuales solo es necesario proporcionar el dato
a escribir y la dirección objetivo.

Nivel HAL: Hardware Abstraction Layer es una forma de controlador entre el


nivel de registros y la aplicación de software, este ofrece un nivel de
abstracción mas alto donde las «funciones» realizar operaciones completas
con solo una sentencia como leer información de una memoria flash.
38
Proyecto Nios EDS
Nivel de librería estándar de C: Altera proporciona rutinas para el uso
funciones pertenecientes a las librerías estándar de ANSI C ligadas a
periféricos del sistema.

Este es el nivel mas alto de abstracción para el manejo de periféricos en una


aplicación desarrollada en C para Nios II.

Ing. Hector Cabrera


Un ejemplo de este mecanismo es ligar la librería «stdio.h» a un modulo de
UART, en este caso toda salida utilizando printf será envía de manera serial por
medio del modulo UART.

Es posible consultar mas información sobre el manejo de periféricos y


modelos de programación en:

«Altera Embedded Peripherals IP - User Guide»


«Nios II Software Developer’s Handbook» 39
Proyecto Nios EDS
Código fuente de aplicación:
#include "system.h"
#include "altera_avalon_pio_regs.h«
#include «unistd.h"

Ing. Hector Cabrera


int main(void){

unsigned char led_val = 0x01;

for (;;){
if (led_val == 0x00){
led_val = 0x01;
}
else{
IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, led_val);
usleep(100000);
led_val = led_val << 1;
} 40
}

return 0;
Proyecto Nios EDS
Edición de archivo BSP

Por que?: La edición del archivo de descripción de hardware nos permite


establecer parámetros para la compilación de código fuente así como ligar
librerías estándar de C a periféricos del sistema.

Ing. Hector Cabrera


 Clic derecho en
first_nios_system_bsp ->
niosII -> BSP Editor

 Seleccionar enable
reduced device drivers y
enable small c library

 Sys_clk_timer : sys_timer 41

 Generate, terminado Exit


Proyecto Nios EDS
Compilar código

Por que?: La compilación del código fuente anteriormente diseñado, permite


la verificación de la validez del código (léxico, sintáctico y semántico), además
de generar un archivo en código maquina el cual puede ser interpretado por el
microprocesador Nios II.

Ing. Hector Cabrera


 Clic derecho en first_nios_system -> Build project

 Después de una compilación exitosa estaremos listos para la carga del


sistema Nios II dentro del dispositivo FPGA.

42
Proyecto Nios EDS
Descarga de código al FPGA

Por que?: Esta acción nos permite verificar el funcionamiento de nuestro


sistema ejecutándose directamente en hardware.

Ing. Hector Cabrera


 Clic derecho en first_nios_system -> Run As -> 3 Nios II Hardware

 El sistema Inicia operación en la tarjeta

Nota: Antes de llevar acabo este paso es necesario llevar a 43


cabo la configuración del dispositivo FPGA con el hardware
diseñado en SOPC builder y Quartus II.

You might also like