Escrito por : Walter Moreno Quiroz
Objetivos
-Conocer e implementar un sistema embebido utilizando un softcore (Nios II) de 32 bits. -Permitir que el diseño empleado se pueda aplicar en diferentes procesos y/o procesadores.
Nios II es una estructura de procesador embebido de 32 bits diseñado específicamente para Altera, en la familia de FPGAs . Nios II incorpora muchas mejoras con respecto a la arquitectura original niosll/e, por lo que es más adecuado para una gama más amplia de aplicaciones informáticas integradas, de DSP para el sistema de control. por otra parte es el procesador mas versátil del mundo, según Gartner Research, es el procesador mas flexible y amplia mente utilizado en la industria de la FPGA , El procesador Nios II ofrece una flexibilidad sin precedentes para su sensibles a los costes, en tiempo real, la seguridad crítica (DO-254), ASIC-optimizado, en las necesidades de procesamiento de aplicaciones. El procesador Nios II es compatible con todos los Altera ® familias SoC y FPGA
En la anterior imagen se muestran los diferentes módulos que esta compuesto el niosll, estos módulos son configurables, debug option,fixed,optional.
Características
Procesamiento de aplicaciones : Con una opción de configuración sencilla, el núcleo del procesador rápido Nios II puede utilizar una unidad de gestión de memoria (MMU) para ejecutar Linux embebido. Tanto el código abierto y versiones compatibles comercialmente de Linux para procesadores Nios II están disponibles.
Energético y el coste sensibles : Con un precio tan bajo como 600 elementos lógicos, el núcleo del procesador economía Nios II es ideal para aplicaciones de micro-controladores. El núcleo del procesador economía, herramientas de software y controladores de dispositivos Nios II se ofrecen de forma gratuita.
Tiempo real : Un rendimiento sin jitter absolutamente determinista en tiempo real con hardware únicas opciones de funciones en tiempo real .
Vector controlador de interrupción.
Memoria de estructura rígida
Procesador Nios II es el procesador en tiempo real ideal para usar con los aceleradores de hardware basadas en DSP Constructor, para proporcionar resultados en tiempo real de alto rendimiento deterministas.
. Procedimiento
En la siguiente guía se dará los pasos para realizar el diseño de esta nueva practica
1.Vamos y generamos una nueva plantilla con el system builder de para la DEO NANO SoC FPGA Board ( con el nombre que deseemos crear el archivo en este caso se creara como practica Nios ll )
Para finalizar vamos a botón de generate y generamos nuestra plantilla ,
2. Abrimos la carpeta que nos creo el system builder y para poder abrir el archivo buscamos una ruta cercana al disco principal para poder trabajar cabe recordar que dicha ruta no debe tener espacios ni símbolos extraños .
3. Ya teniendo nuestro archivo en una ruta corta procedemos al abrirlo y buscar un archivo .qpf y nos abrirá un archivo en Quartus, estando en en Quartus vamos ala parte superior donde dice tools y buscamos una opción que dice Qsys y los abrimos.
4. Al darle click ala opción de Qsys, nos aparecerá una venta así
En la parte izquierda aparecerá la ip catalog es donde estará todos los complementos o módulos que le podemos agregar a nuestro diseño
5. Luego procedemos a guardar nuestro diseño, guardándolo como Niosll después vamos ala ip catalog y buscamos el primer modulo que vamos agregar el cual sera el procesador en base Nios ll para ello buscamos nios, hay nois aparecerá uno llamado Nios ll prossesor a hace le damos doble click
6. Al darle doble click nos aparecera una ventana igual al de la imagen y escogeremos la opción nios/e
Las dos opciones de nios sirven, el Nios ll/e es le mas básico de todo en cambio el Nios ll/f es el que tiene el procesador ,mas rápido y ejecutar mas instrucciones por segundo. en este caso escogeremos la versiónNios ll/e y le damos finish ala ventana.
7. Continuando con el siguiente modulo vamos ala IP catalog y buscamos la palabra chip y dentro de la opciones nos aparecerá una opción de on-chip memory le damos doble click y nos aparecerá
una nueva ventana para
En esta venta configuramos el on-chip memory , solo debemos configurar la capacidad de la memoria a 116000 y despues de eso le damos finish
Ya con esto hemos agregado otro modulo.
8. Para agregar el nuevo modulo vamos y buscamos la palabra PLL y le damos al modulo Altera PLL y pulsamos doble click
Cuando se abre una nueva ventana podemos configurar el nuevo modulo que hemos seleccionado, tenemos un reloj inicio de 50Mhz de y despues otro a 150 Mhz como lo muestra la imagen.
9.Continuando con el siguiente modulo se agregara debemos escribir jtag uart y damos doble click
Con la ventana de configuración se abre, no se modifica nada se deja tal cual muestra la imagen
10 Para el siguiente modulo se agregaran tres módulos del mismo nombre pero con diferentes funciones vamos y nos acercamos IP CATALOG y buscamos la palabra PIO de hay agregaremos dando doble click como muestra la imagen
A continuación se mostrara las diferentes configuraciones para los puertos PIO que seran de entradas y salidas.
La primera sera una entrada de 4 bitis como muestra la imagen
Para el segundo puerto sera uno de salida de 8 bits
Y por ultimo sera uno de 32 bits
11.Para el siguiente modulo se buscara la palabra uart y se escogera UART SERIAL se le dará doble click y en su parte de configuracion no se cambiara en nada
12 Ahora el ultimo modulo que agregaremos es el interval timer los escogemos y le damos doble click, igualmente su configuración no la cambiamos para nada
13. Ya teniendo todos los módulos pasamos a a cambiarles el nombre para poderlos diferenciar unos de otros así como muestran las imágenes ,
el primero en cambiarle el nombre es al clk_0 por clk_50mhz.
El siguiente para cambiarle el nombre es al nios2_gen2_0 al nombre cpu,
El siguiente para cambiarle el nombre es al on-chip_memory2_0 para el nombre RAM
El siguiente para cambiarle el nombre es al pll_0 para el nombre pll,
El siguiente para cambiarle el nombre es al pio_0 es el que 4 entradas a este le ponemos el nombre sw,
El siguiente para cambiarle el nombre es al pio_1 es el que 32 salidas a este le ponemos el nombre div_freq,
El siguiente para cambiarle el nombre es al pio_2 es el que 8 salidas a este le ponemos el nombre Leds,
El siguiente para cambiarle el nombre es al jtag_uart_0 a ese le ponemos como nombre jtag_uart
El siguiente para cambiarle el nombre es al uart_0 a ese le ponemos como nombre uart
El siguiente para cambiarle el nombre es al sys_clk_0 a ese le ponemos como nombre sys_clk
13. Para observar como vamos en el proyecto nos dirigimos view y le damos doble click schematic
Al dar doble click nos mostrara una venta con los módulos que llevemos y con la entradas y salidas que llevemos que llevemos en momento en nuestro proyecto,
14. Ahora precedemos a hacer las conexiones de cada modulo como se muestran en la siguientes imágenes, como nota importante todo los módulos que conectemos serán conectados ala cpu y clk de 50 mhz, el primero en conectarse es el pll
Para el pll la primera entrada que se conectara sera refclk que se conectara al clk_50mhz como se muestra en la figura ,
Después se conectara el reset al clk_50mhz_reset como lo muestra la figura anterior. a si finalizamos la conexión de del pll pasamos al siguiente modulo que es la Ram
En el modulo de la Ram, el clk de la ram va conectado a la salido del clk del pll ,
Después se conecta el s1 de de la ram al cpu.data_master
Y por ultimo se conecta el reset a reloj de 50 mhz y seguimos con el otro modulo que es el jtag
Conectamos la salida de clk de jtag ala entrada del clk del pll
Ahora el reset del jtag lo conectamos al clk de 50 mhz
Ahora nos ubicamos en el jtag avalon y lo conectamos al data master de la cpu,
Y por ultimo no vamos al recuadro del jtag irq y lo conectamos cpu.irq y continuamos con el siguiente modulo que es el sw
El primero en conectar es el clk del sw en el clk de 50 mhz
Despues el reset lo conectamos en el clk_50mhz y en el cpu.debug_reset haci como se muestra en las imágenes
Ahora conectamos a SW1 a cpu.data_master y asi terminamos este modulo
Ahora proseguimos con el siguiente modulo sera Leds
El clk de leds va ir conectado al clk de 50 mhz
en este caso el reset va colocado en dos sitios el primero va conectarse el clk de 50 mhz y el segundo pin de conexión seria al cpu.debug_reset_request
y por ultimo conectamos el S1 con al cpu data master
Pasamos al modulo Uart y vamos hacer sus respectiva conexiones
Lo primero que conectamos vamos hacer es el clk al conectar con pll.out
Después vamos a conectar el reset a dos puertos al clk de 50mhz y a cpu.debug_reset
Y ahora vamos a conectar s1 al cpu.data_master
Y ahora nos vamos uart.irq y lo conectamos a cpu.irq
Y ahora continuamos conectando el siguiente modulo div_freq
Se conecta el clk del Div_freq al clk_50mhz
Despues se conecta el reset de div_freq a los puertos de clk_50mhz y al cpu_freq.reset
y por ultimo se conecta el s1 de div_freq hacia cpu.data_master
Por ultimo se conecta el ultimo modulo sys
primero se conecta el clk del sys en el clk de 50mhz
El siguiente es el reset ase conecta al clk de 50 mhz
Después se conecta el S1 del sys y se conecta al cpu.data_master
Y por ultimo se conecta irq del sys al irq del cpu.
15.Siguiendo el manual observamos como quedaron las conexiones y como va quedando la intanciacion de nuestro programa.
Así queda la instance para ello nos vamos a generate y nos dirigimos HDL Examples
Y asi queda instance pero nos falta exportar los puertos que habiamos creado antes
Ahora para exportar los puerto que teníamos no vamos ala parte derecha de ellos en la columna de exportar y le damos doble click y colocamos el nombre de cada puertro de salida y de entrada que tengamos.
ya teniendo las entradas y salidas exportadas revisamos como que do el archivo instance para observar si exportamos los puertos
El siguiente paso seria resolver errores de posición que nos genera los módulos para el nos vamos ala parte de superior izquierda al botón de system y damos doble click a assign addreses y assign interrup al hacer esto se nos va los errores que teníamos
y ya por ultimo no queda generar el archivo HLD que lo podemos generar en parte inferior o en la parte superior como lo muestra la figura
y cuando termine de compilar le damos finish a nuestro modulo
Referencias
https://www.altera.com/products/processors/overview.html