28358833 Estudio Del Microprocesador Nios II

download 28358833 Estudio Del Microprocesador Nios II

of 17

Transcript of 28358833 Estudio Del Microprocesador Nios II

Estudio del microprocesador Nios IIEl "soft processor" Nios II de AlteraCopyright 2010 Jorge Rodrguez Arajo, [email protected]

14 de marzo de 2010

Contenido1.1 Memoria descriptiva......................................................................................11.1.1 Objeto.......................................................................................................................... 1 1.1.2 Antecedentes...............................................................................................................1 1.1.3 Justificacin................................................................................................................. 1 1.1.4 Introduccin.................................................................................................................1 1.1.5 El Nios II...................................................................................................................... 2 1.1.6 Gestin de excepciones..............................................................................................3 1.1.7 Conexin y acceso a memoria....................................................................................6 1.1.8 Conexin y acceso a perifricos..................................................................................7 1.1.9 Red Avalon..................................................................................................................8 1.1.10 Juego de instrucciones............................................................................................10 1.1.11 Programacin del Nios II.........................................................................................12

Memoria del microprocesador Nios II

1. Memoria del microprocesador Nios II1.1 Memoria descriptiva1.1.1 Objeto El objeto de esta parte del proyecto es proporcionar una visin clara de las caractersticas y posibilidades del microprocesador Nios II. 1.1.2 Antecedentes En proyectos afines se haba trabajado con microprocesadores de 8 bits configurables sobre FPGAs, pero no con procesadores de propsito general de 32 bits y alto rendimiento, unos 420 DMIPS. 1.1.3 Justificacin El conocimiento del microprocesador resulta fundamental para completar el desarrollo de los perifricos de control de la etapa posterior. 1.1.4 Introduccin El fabricante Altera proporciona una infraestructura completa para crear sistemas microprocesador embebidos, completamente a medida segn las necesidades del diseador, por medio de la combinacin de una serie de componentes configurables sobre sus FPGAs. Para ello, proporciona un entorno especfico, al que denomina SOPC Builder, que permite la definicin y configuracin a medida del sistema microprocesador Nios II, y que gracias a la herramienta de sntesis Quartus II puede ser implementado directamente sobre una FPGA de la marca. NIOS II SYSTEMNIOS II (CORE)Instruction Bus Data Bus

AVALON (SYSTEM BUS)

MEMORY PROGRAM / DATA

PERIFERICS

INPUT / OUTPUT

Ilustracin 1: Sistema microprocesador basado en Nios II

Este sistema microprocesador estar compuesto por: el ncleo procesador Nios II, memoria interna de programa y de datos, perifricos integrados e interfaces para memoria externa y/o entrad/salida. Al tratarse de un sistema flexible que puede ser adaptado a las necesidades especficas de cada diseo, no slo posibilita ajustar su tamao al de un determinado dispositivo, sino que deja decidir al diseador cuando una implementacin se debe realizar en software y cuando en hardware, permitiendo elevar el rendimiento y ajustar los costes. 1

Memoria del microprocesador Nios II

1.1.5 El Nios II El Nios II es un ncleo procesador configurable que se puede implementar en alguna de las tres versiones disponibles segn se busque minimizar el consumo de recursos de la FPGA o maximizar el rendimiento del procesador: El Nios II/f (fast) es la versin diseada para alto rendimiento, y que con un pipeline de 6 etapas proporciona opciones especficas para aumentar su desempeo, como memorias cach de instrucciones y datos, o una unidad de manejo de memoria (MMU, Memory Management Unit). El Nios II/s (standard) es la versin con pipeline de 5 etapas que dotada de unidad aritmticolgica (ALU, Arithmetic Logic Unit) busca combinar rendimiento y consumo de recursos. El Nios II/e (economy) es la versin que requiere menos recursos de la FPGA, sin pipeline y muy limitada, dado que carece de las operaciones de multiplicacin y divisin.

Cada una de estas versiones se completa con una serie de componentes, memoria y perifricos, por medio de su interconexin a travs de un bus de sistema al que denominan Avalon Switch Fabric, para obtener un sistema Nios II completo en un chip (SOC, System On Chip).Caractersticas y arquitectura

El Nios II es un procesador de 32 bits de propsito general, basado en una arquitectura tipo Harvard, dado que usa buses separados para instrucciones y datos; y cuyas principales caractersticas son: Tamao de palabra asignado de 32 bits Juego de instrucciones RISC de 32 bits 32 registros de propsito general de 32 bits (r0 r31) 6 registros de control de 32 bits (ctl0 - ctl5) 32 fuentes de interrupcin externa Capacidad de direccionamiento de 32 bits Operaciones de multiplicacin y divisin de 32 bits Instrucciones dedicadas para multiplicaciones de 64 y 128 bits Instrucciones para operaciones de coma flotante en precisin simple Acceso a variedad de perifricos integrados e interfaces para manejo de memorias y perifricos externos

2

Memoria del microprocesador Nios II

Ilustracin 2: Diagrama de bloques que define la arquitectura del Nios II

De este modo, se encuentra formado por una serie de unidades funcionales, dependiendo de la versin implementada. Entre estas, las principales son: los registros, la unidad aritmtico-lgica, la interfaz para instrucciones definidas por el usuario, el controlador de excepciones, el bus de instrucciones, el bus de datos, la memoria cach de instrucciones y datos, la interfaz de acoplamiento directo de memoria de instrucciones y datos y el mdulo de depuracin JTAG. 1.1.6 Gestin de excepciones El controlador de excepciones es el circuito encargado de realizar las tareas ligadas a la atencin de excepciones, que son aquellas situaciones anormales que interrumpen el flujo de ejecucin de un programa, dado que requieren la atencin del procesador. Las excepciones pueden ser: Excepciones software: Instruccin trap (software trap): se produce cuando en un programa aparece una instruccin trap. Lo que se utiliza para transferir el control a un programa diferente, como un sistema operativo. Instruccin no implementada (unimplemented instruction): se produce cuando el procesador encuentra una instruccin vlida que no ha sido implementada en hardware. Esto posibilita que se llame a una rutina que emule, en software, la operacin requerida cuando no 3

Memoria del microprocesador Nios II

se encuentra implementada, en hardware. Como sera el caso de las instrucciones de multiplicar y dividir en una implementacin del II/e. Excepciones hardware: Interrupcin hardware (hardware interrupt): se produce cuando se da un evento sobre una de las 32 entradas de peticin de interrupcin de las que dispone el microprocesador (IRQ0 a IRQ31), lo que permite el acoplamiento asncrono entre un perifrico y el microprocesador.

Identificacin de excepciones

Cuando se produce una excepcin, el procesador transfiere la ejecucin al controlador de excepciones que, en este caso, las gestiona a travs de una nica direccin. Esto provoca que la rutina de atencin deba determinar que tipo de excepcin se ha producido, empeorando el tiempo de respuesta (latencia), por medio de la realizacin de las siguientes tareas: 1. Comprobar el registro de interrupciones pendientes (IPENDING) para verificar que se ha producido una interrupcin hardware y poder lanzar la rutina de atencin apropiada. 2. Comprobar que la instruccin que estaba siendo ejecutada cuando se produjo la interrupcin era una instruccin trap, siendo esta la correspondiente a la direccin de retorno de excepcin (EA) menos 4, y poder lanzar la rutina apropiada. 3. De otro modo, la excepcin habr sido provocada por una instruccin no implementada, y se podr programar un algoritmo que la emule.Controlador de interrupciones

El Nios II incluye en todas sus versiones un controlador interno de interrupciones (ICC), y ofrece la posibilidad de configurar un bloque controlador de interrupciones externo (EIC). El controlador de interrupciones interno gestiona las 32 entradas de peticin de interrupcin (IRQ0 a IRQ31) por medio de un nico vector de interrupcin, con lo que las tareas de identificacin y resolucin de prioridad deben ser resueltas por software. El controlador de interrupciones externo proporciona un control de interrupciones vectorizado (VIC, Vectored Interrupt Controller) con el que se da respuesta a las interrupciones a travs de vectores de interrupcin separados y segn un determinado nivel de prioridad 1. As, cuando se produce una interrupcin se transfiere la ejecucin directamente a la rutina de atencin (ISR, Interrupt Service Rutine) apropiada, indicada por dicho vector a travs de una instruccin de salto. Cuando se produce una peticin de interrupcin (IRQ, Interrupt ReQuest), se realiza el siguiente proceso: 1. Se cancela la ejecucin de la instruccin en curso. 2. Se salva el estado de la CPU, valor del contador de programa e informacin de estado, para poder1 Los niveles de prioridad se establecen para resolver el conflicto que aparece cuando se producen varias interrupciones de forma simultnea o mientras el microprocesador se encuentra atendiendo otra interrupcin.

4

Memoria del microprocesador Nios II

reanudar el programa en el punto en el que se ha interrumpido. 3. Se deshabilitan las interrupciones externas al procesador. 4. Se cede el control al gestor de interrupciones para que identifique la fuente de interrupcin y la marque en el registro de control de peticin de interrupcin, donde se reflejan las interrupciones que se encuentran pendientes de ser atendidas. 5. Se salta a la direccin donde se encuentra la rutina de atencin de interrupcin y se ejecuta, tras lo cual, se debe borrar la marca de peticin de interrupcin correspondiente. 6. Se reanuda la ejecucin del programa, una vez finalizada la rutina de atencin de interrupcin. Hay que tener en cuenta que, para que se pueda generar una interrupcin, se deben cumplir las siguientes tres condiciones: Que se encuentre activado el bit (PIE) del registro de estado que habilita las interrupciones de forma global. Que se produzca una llamada a una de las entradas de atencin de interrupcin (IRQ). Que se encuentre activado el bit correspondiente a dicha entrada en el registro de control de interrupciones habilitadas (IENABLE).

Ilustracin 3: Diagrama de bloque de un ejemplo de sistema Nios II

5

Memoria del microprocesador Nios II

1.1.7 Conexin y acceso a memoria El Nios II utiliza 32 bits para realizar un direccionamiento por byte, poseyendo buses separados para instrucciones y datos, con lo que se corresponde con una arquitectura tipo Harvard. En este tipo de conexin, el bus de instrucciones se utiliza para leer el programa, situado en memoria, que debe ser ejecutado por el procesador, mientras que el bus de datos proporciona acceso a la diferentes bloques de memoria y a los perifricos del sistema. Sin embargo, existen tres modos posibles de conexin con memoria: Conexin de memoria a travs de la red Avalon, tanto de memoria interna como externa.Tipos de memoria: arquitecturas de conexin con

Arquitectura Harvard: se utilizan buses independientes para comunicar la CPU con la memoria de instrucciones (programa) y con la memoria de datos, con lo que aunque se necesitan ms terminales, se reducen los tiempos de acceso, al producirse el acceso simultneo o instrucciones y datos. Arquitectura Von-Newmann: se utiliza un nico bus tanto para instrucciones como para datos, lo que reduce el nmero de terminales a costa de la velocidad, dado que se encuentra limitada por el uso compartido del bus entre instrucciones y datos. Adems, la longitud de las instrucciones est limitada por la longitud de los datos, con lo que el procesador debe realizar varios accesos a memoria para buscar instrucciones complejas.

Conexin directa de bloques de memoria interna, con lo que se proporciona un rpido acceso a memoria. Conexin de memoria a travs de cach (cache memory).Memoria cach

El Nios II puede incluir tanto cach de datos (Nios II/f) como de instrucciones (Nios II/f y Nios II/s), implementadas en los bloques de memoria del chip FPGA. La inclusin de estas memorias cach aumenta el rendimiento de forma significativa, sobre todo cuando la mayora de la memoria principal se sita en un chip SDRAM externo.

6

Memoria del microprocesador Nios II

La memoria cach se organiza, al igual que la RAM, en un arreglo tipo tabla, formado por filas y columnas. En este caso, los tamaos de cach son configurables, aunque la cach de instrucciones se organiza en lneas de 8 bytes, mientras que la cach de datos se organiza en lneas de 4, 16 o 32 bytes. La gestin de cach se realiza por software, mediante las instrucciones definidas para este propsito segn se trate de cach de instrucciones o datos. Se diferencian dos tipos de instruccin: para la carga y asociacin de una lnea de cach con una determinada direccin de memoria (init) y para llevar y vaciar el contenido de una lnea de cach asociada con una determinada direccin de memoria (flush).

La memoria cach se organiza en una serie de filas o "lneas de cach" que representan la entidad bsica de almacenamiento. De modo que en cada movimiento de cach se transfiere informacin suficiente para cubrir una lnea. A cada lnea de cach se le asocia un identificador (TAG) que indica la porcin de la RAM a la que se encuentra asociada, constituyendo una memoria asociativa (CAM, Content Addressable Memory), dado que la bsqueda de informacin se realiza por la direccin de la RAM. Debido a que el tiempo de acceso, cuando la memoria cach es completamente asociativa, es muy elevado debido a que cada lnea de cach se puede llenar con cualquier posicin de la memoria RAM (porcentaje de acierto mximo), lo que se suele emplear es la cach asociativa en conjuntos de N lneas, donde a cada grupo de lneas le corresponde un determinado rango de memoria RAM. As, una determinada posicin de memoria slo puede estar dentro de un determinado grupo de cach, con lo que se reduce el tiempo de bsqueda dentro del conjunto cuya cach es totalmente asociativa. Alcanzndose una solucin ptima con la correcta seleccin del valor N.

Aunque por norma, se usar la cach cuando exista, es posible saltarse el acceso a travs de cach y realizarlo de forma directa. Pero no deben mezclarse ambos mtodos, dado que se puede provocar que la coherencia de los datos de memoria y cach se vea comprometida. 1.1.8 Conexin y acceso a perifricos En el Nios II, la memoria de datos y los perifricos comparten la capacidad de direccionamiento de 32 bits, y por tanto el bus. As, el acceso de entrada/salida (I/O) se realiza a travs del mapa de memoria, del mismo modo que cualquier otra direccin de memoria memoria (acceso a travs de las mismas instrucciones).

7

Memoria del microprocesador Nios IIAddresable memoryFFFFFFFF FFFFFFFF

PERIFERIC OUTPUT PERIFERIC

MEMORY INPUT00000000 00000000

IB

DB

Ilustracin 4: Organizacin de memoria y perifricos en el Nios II

Dado que el conjunto de perifricos y la capacidad de memoria son configurables, el mapa de direcciones de memoria y perifricos depende del sistema diseado, establecindose en el momento de generar el sistema, al igual que las direcciones de reset e interrupcin.Perifricos estndar

Altera proporciona un conjunto de perifricos comnmente usados, como: temporizadores, interfaces de comunicacin serie, entradas/salidas (I/O) de propsito general, controladores SDRAM y otras interfaces de memoria.Perifricos a medida

La verdadera potencia de los sistemas embebidos configurables, implementables sobre FPGA, aparece en el momento en que el diseador tiene la posibilidad de decidir que partes del sistema sern implementadas en software y cuales en hardware. As, todas aquellas tareas cuyo rendimiento sea crtico, pueden ser implementadas en hardware a travs del desarrollo de un perifrico a medida. Con lo que se obtiene un doble beneficio, un mayor desempeo gracias al carcter concurrente de la implementacin hardware y se libera al procesador para realizar otras funciones en paralelo, mientras el perifrico procesa los datos. La integracin de perifricos a medida con el sistema procesador Nios II presenta una serie de alternativas segn las necesidades especficas del diseo, pasando en la mayora de los casos, por implementar una determinada interfaz de la red Avalon. Al igual que se pueden definir perifricos a medida, el Nios II tambin ofrece la posibilidad de aadir instrucciones propias a la unidad aritmtico lgica (ALU), sobre todo pensando en aplicaciones de procesamiento digital de seales (DSP, Digital Signal Processing). 1.1.9 Red Avalon Para la interconexin de los diferentes componentes, o bloques de diseo, que conforman un

8

Memoria del microprocesador Nios II

sistema hardware se pueden identificar, tradicionalmente, cuatro arquitecturas de conexin diferentes: Conexin en Bus: se basa en la conexin de maestros y esclavos por medio de una unidad de arbitraje comn, lo que permite operar a frecuencias relativamente altas a costa de perder la concurrencia. Conexin Full Crossbar Switch: se basa en la conexin directa de maestros y esclavos por medio de una matriz de conexiones, lo que permite transacciones concurrentes entre los diferentes elementos del sistema, siendo uno de sus usos principales las aplicaciones de computacin de alto rendimiento. Conexin Partial Crossbar Switch: se basa en la conexin directa de un maestro con un determinado grupo de esclavos, lo que permite ahorrar recursos en la creacin de la matriz de conexiones. Conexin en Streaming: se basa en la conexin directa entre fuente (source) y sumidero (sink), creando un flujo de datos unidireccional para la transferencia de datos a alta velocidad, dado que elimina la unidad de arbitraje al crear una conexin punto a punto, siendo uno de sus principales usos el procesamiento de vdeo.

Altera, basndose en una arquitectura Partial Crossbar Switch, implementa una serie de interfaces, a las que designa como Avalon, que facilitan la interconexin de componentes en sistemas complejos, y permiten la interconexin de sistemas concurrentes, gracias a su estructura multimaestro. As, un posible ejemplo de aplicacin podra ser el siguiente:NIOS II NIOS IIMASTER CONTROL BUS DATA BUS SLAVE SLAVE MASTER

MEMORY PROGRAM / DATASLAVE

SYSTEM BUS

STREAMING

VIDEO SOURCE

FILTER

DMA VIDEO SINK

Ilustracin 5: Ejemplo de aplicacin de la red Avalon

En este ejemplo se tiene un sistema de procesamiento de vdeo donde, el procesador controla el funcionamiento del sistema por medio de una conexin en bus a travs del mapa de memoria, los datos fluyen desde el dispositivo de entrada de vdeo hasta el de salida de forma paralela, permitiendo el preprocesado hardware de la imagen. Adems, la imagen se transfiere a memoria por medio de un acceso directo a memoria (DMA, Direct Memory Access), lo que permite su procesado por medio de un algoritmo de alto nivel que se implementara en el procesador. Con esta configuracin se reduce la carga computacional del procesamiento de vdeo al realizar 9

Memoria del microprocesador Nios II

las etapas de preprocesado por hardware a travs de una conexin en streaming, donde los datos se transfieren de forma secuencial y directa desde la fuente de vdeo hasta memoria. Por otro lado, la conexin al bus del sistema permite que el control sea realizado por el microprocesador y facilita el intercambio de informacin con memoria, posibilitando el postprocesado final de la imagen mediante su programacin en un lenguaje de alto nivel, lo que eliminara las dificultades y costes asociados a su desarrollo en hardware, y dara una mayor flexibilidad al sistema.Interfaces Avalon

Existen seis tipos diferentes de interfaz: La Avalon Memory Mapped Interface (Avalon-MM) es una interfaz de lectura/escritura basada en direcciones, tpica de conexiones maestro-esclavo. La Avalon Streaming Interface (Avalon-ST) es una interfaz que soporta un flujo de datos unidireccional, incluyendo streams multiplexados, paquetes y datos DSP. La Avalon Memory Mapped Tristate Interface es una interfaz triestado de lectura/escritura basada en direcciones para el soporte de perifricos externos al chip. As, mltiples perifricos pueden compartir buses de datos y direcciones para reducir el nmero de terminales de interconexin a la FPGA o el nmero de rutas en la PCB. La Avalon Clock es una interfaz que enva o recibe seales de reloj y reset para sincronizar interfaces y proveer conectividad de reset. La Avalon Interrupt es una interfaz que permite que los componentes enven seales de eventos a otros componentes. La Avalon Conduit es una interfaz que proporciona seales para ser llevadas fuera del nivel del SOPC Builder donde poder conectar otros mdulos diseados sobre la FPGA o a los terminales de la misma.

As, un componente puede incluir una o varias de estas interfaces, o varias instancias de la misma interfaz, posibilitando la interaccin de sistemas heterogneos complejos. 1.1.10 Juego de instrucciones El procesador Nios II presenta un juego de instrucciones reducido (RISC, Reduced Instruction Set Computer), siendo la longitud de todas las instrucciones de 32 bits.

10

Memoria del microprocesador Nios II

Adems de estas 64 instrucciones, su lenguaje ensamblador soporta una serie de seudoinstrucciones que se traducen en varias instrucciones en cdigo mquina para agilizar el desarrollo de programas a bajo nivel. Las instrucciones se pueden agrupar en una serie de tipos: Instrucciones carga (load) y almacenamiento (store): realizan la transferencia de contenido entre memoria o interfaces de entrada/salida y los registros de propsito general, pudiendo leer y escribir al nivel de palabra (32 bits), media palabra (16 bits) o byte (8 bits).

Distintos tipos de juegos de instrucciones: - RISC (Reduced Instruction Set Computer): juego de instrucciones reducido, compuesto por operaciones simples de la unidad de control, donde cada instruccin puede operar con cualquier registro y modo de direccionamiento. Por lo general se encuentra asociado a estructuras Harvard con solapamiento de instrucciones (Instruction Pipelining). - CISC (Complex Instruction Set Computer): juego de instrucciones complejo, compuesto por operaciones complejas y especficas, motivo por el que pueden tener limitaciones de acceso a zonas de memoria o de modos de direccionamiento. - SISC (Specific Instruction Set Computer): juego de instrucciones especfico, compuesto por operaciones especficas para tareas de control es un caso particular del CISC o del RISC.

Instrucciones aritmticas: realizan operaciones aritmticas (add, sub, mul, div) con los datos que se encuentran en los registros de propsito general o con un valor dado en la instruccin (valor inmediato). Hay que tener presente que las operaciones de suma y resta se realizan tanto con operandos con signo (signed) como sin el (unsigned), pero dado que el Nios II no dispone de mecanismo de deteccin de acarreo o desbordamiento, si se producen, deben ser detectados por software. Instrucciones lgicas: realizan operaciones lgicas ("and", "or", "xor", "not") con los datos que se encuentran en los registros o con un valor dado. Instrucciones de transferencia entre registros: seudoinstrucciones que copian el contenido de un registro en otro, o un valor indicado de forma inmediata. Instrucciones de comparacin: comparan el contenido de dos registros o el contenido de un registro y un valor inmediato, y escriben el resultado en el registro indicado. Instrucciones de rotacin y desplazamiento: rotan o desplazan el contenido de un registro. Instrucciones de ruptura y salto: cambian el flujo de ejecucin de un programa ya sea de forma condicional o no. As, mientras con el salto incondicional se permite ubicar instrucciones en zonas de memoria con direcciones no consecutivas, con el salto condicional se permite modificar la secuencia de ejecucin de instrucciones en funcin del resultado de las operaciones del programa. Instrucciones de llamada a subrutina: permiten la llamada ("call") y el retorno ("ret") de subrutinas. De modo que, cuando se llama a una subrutina se carga en el contador de programa (PC) la direccin de salto y se memoriza la direccin de retorno (RA) para volver a cargarla en el

11

Memoria del microprocesador Nios II

PC cuando se retorno de la ejecucin de la subrutina. Instrucciones de manejo de excepciones: permiten la generacin de una interrupcin software (trap) y el retorno (eret) de la rutina de atencin de interrupcin. Instrucciones de control: instrucciones especiales para leer y escribir los registros de control.Modos de direccionamiento

El modo de direccionamiento es la forma en que el campo de direccin de la instruccin especifica la direccin efectiva, disponindose de cinco modos diferentes de direccionamiento: Direccionamiento inmediato: el operando se da de forma explcita en la instruccin como un valor de 16 bits. Direccionamiento de registro: el operando se da a travs del valor de un registro del procesador. Direccionamiento con desplazamiento: la direccin efectiva del operando es la suma del contenido de un registro y un valor de desplazamiento, de 16 bits con signo, dado en la instruccin.

Otros modos de direccionamiento no disponibles en le Nios II: - Direccionamiento relativo: la direccin efectiva se calcula sumando el contenido del campo de direccin de la instruccin al contenido del contador de programa (PC, Program Counter). - Direccionamiento indirecto: la direccin efectiva viene dada por el contenido de la posicin de memoria indicada en la instruccin. - Direccionamiento indexado: la direccin efectiva se calcula sumando al contenido del campo de direccin de la instruccin el contenido del registro interno del microprocesador que se suele denominar registro de ndice. - Direccionamiento en pgina: la memoria se estructura en una serie de bloques, pginas, cuya seleccin se realiza de forma implcita, y sobre la cual se realiza el direccionamiento, con lo que se reduce el nmero de direcciones necesarias.

Direccionamiento indirecto de registro: la direccin efectiva del operando viene dada como el contenido de un registro especificado en la instruccin. Por tanto, es equivalente al modo con desplazamiento donde el valor de desplazamiento es igual a 0. Direccionamiento absoluto: la direccin efectiva del operando se especifica directamente como parte de la instruccin, siendo su tamao de tan slo 16 bits.

1.1.11 Programacin del Nios II Para la programacin del Nios II se dispone de un entorno completo, basado en Eclipse, con el que Altera da soporte para el desarrollo de aplicaciones en C/C++. Al utilizar este entorno (framework) se emplea una capa de software (HAL, Hardware Abstraction Layer) que oculta los detalles de la configuracin hardware, haciendo transparente al programador el desarrollo de aplicaciones. Adems, esta capa HAL interpreta la prioridad de las interrupciones desde IRQ0 a IRQ3, para lo que requiere de la configuracin de un temporizador. Para programar el Nios II directamente en ensamblador (assembler) se deben tener en en cuenta una serie de consideraciones y apreciaciones.

12

Memoria del microprocesador Nios II Identificacin de perifricos

El carcter configurable del Nios II exige que en todo programa se presente una primera etapa en la que se han de definir todos y cada uno de los perifricos del sistema, por medio de las direcciones que se les asignaron durante la configuracin. Esto facilita la comprensin del programa, aumenta su reusabilidad y, sobre todo, evita errores, al identificar cada uno de los perifricos con su correspondiente direccin de memoria, permitiendo su tratamiento como punteros de acceso a perifricos.# Refleja la posicin de los interruptores # a travs del estado de los indicadores .include "nios_macros.s" .equ .equ pi8, 0x00003000 po8, 0x00003010 # interruptores # indicadores

.global _start _start: movia r2, pi8 movia r3, po8 loop: ldbio r4, 0(r2) stbio r4, 0(r3) br loop

# # # # # # # # # # #

// Programa equivalente en C // Refleja la posicin de los interruptores (Switches) // a tras de los indicadores (LEDs) #define Switches (volatile char *) 0x0003000 #define LEDs (char *) 0x0003010 void main() { while (1) *LEDs = *Switches; }

Gestin de la pila

La pila (stack) es un segmento de memoria que se utiliza para almacenar la informacin sobre las llamadas a subrutinas que se encuentran en ejecucin en un programa. Y aunque su propsito primario es almacenar las direcciones de retorno, con el uso de compiladores puede ser utilizada para funciones adicionales por medio del aumento del tamao del bloque de apilamiento (frame). Cuando se llama a una subrutina (call) se almacena la direccin de retorno en el registro r31 (RA, Return Address) para volver cuando se finaliza la ejecucin de la misma (ret). Por tanto, dado que la llamada a subrutinas no se gestiona a travs de la pila (stack), si se pretende realizar llamadas anidadas a subrutinas habr que realizar su gestin de forma manual.

13

Memoria del microprocesador Nios IIStack M anagement00007000

STACK

SP0 SP

MEMORY

00003000

Ilustracin 6: Gestin de la pila

Dado que la memoria se llena desde sus posiciones inferiores, para evitar errores en la gestin de la pila debido a su crecimiento sobre posiciones de datos, se recomienda inicializar el puntero de pila (SP, Stack Pointer) en la direccin ms alta de memoria y hacerla crecer hacia direcciones inferiores. As, para la manipulacin explcita de la pila se ha de implementar la funcionalidad de apilar (push), para colocar un elemento en la pila, y de desapilar (pop), para retirar de la pila el ltimo elemento almacenado.# Gestiona la pila para la llamada anidada de subrutinas .include "nios_macros.s" # Asignacin de la direccin de inicializacin de la pila (SP0) .equ SP0, 0x00007000 .equ .equ PI8, 0x00003000 PO8, 0x00003010

.global _start _start: br main nop nop nop nop nop nop nop nop # Programa principal main: # Inicializacin del puntero de pila (SP) movia SP, SP0 # Llamada a subrutina call subr0 # Programa movia r2, PI8 movia r3, PO8 loop: ldbio r4, 0(r2) stbio r4, 0(r3) br loop # Subrutinas

14

Memoria del microprocesador Nios II

subr0: # Gestin de la pila # Se apila la direccin de retorno (push) subi SP, SP, 4 # decrementa el puntero de pila stw RA, 0(SP) # almacena la direccin de retorno # Se llama a la subrutina (call) call subr1 # Se desapila la direccin de retorno (pop) ldw RA, 0(SP) # restaura la direccin de retorno addi SP, SP, 4 # incrementa el puntero de pila # Operacin addi r6, r6, 1 ret subr1: # Gestin de la pila subi SP, SP, 4 stw ra, 0(SP) call subr2 ldw ra, 0(SP) addi SP, SP, 4 # Operacin addi r6, r6, 1 ret subr2: addi r6, r6, 1 ret

Gestin de interrupciones

En el Nios II, el control de interrupciones se realiza por medio de los registros de control, que requieren del uso de unas instrucciones de lectura y escritura especiales, donde: La habilitacin global de interrupciones se realiza por medio del primer bit del registro ctl0 (PIE). La desinhibicin de cada una de las interrupciones (IRQ0 a IRQ31) se controla a travs de los bits del registro ctl3 (IENABLE). Las interrupciones pendientes de atencin se controlan a travs de los bits del registro ctl4 (IPENDING).

La lectura y escritura de los registros de control se realiza por medio de las instrucciones rdctl y wrctl, de tal modo que: rdctl rC, ctlN: lee el valor del registro de control N y lo almacena en el registro rC. wrctl ctlN, rA: escribe el valor del registro rA en el registro de control N.

Dado que cuando se produce una interrupcin: primero se almacena la direccin de la prxima instruccin en el registro de retorno de excepcin (EA) y segundo se cancela la ejecucin de la instruccin en curso para, finalmente, saltar a la direccin de atencin de interrupcin; la direccin de retorno no refleja la posicin real en la que debe reanudarse la ejecucin del programa y hay que disminuir en 4 el valor del registro (EA), antes de salir de la rutina de atencin de interrupcin, para ejecutar la instruccin que fue abortada con anterioridad.

15

Memoria del microprocesador Nios II

# Refleja la posicin de los interruptores # a travs del estado de los indicadores .include "nios_macros.s" # Direcciones de entrada/salida .equ PI8, 0x00003000 .equ PO8, 0x00003010 # Mscara de interrupciones .equ PI8IM, 0x00003008 # Mscara de interrupciones # Direccin del puntero de pila .equ SP0, 0x00007000 .global _start _start: br main nop nop nop nop nop nop nop br interrupt

# direccin +0x0020

# Programa principal main: # Inicializacin del puntero de pila movia sp, SP0 # Inicializacin de la mscara de interrupcin de PI8 movia r7, PI8IM movi r5, 0b1 stbio r5, 0(r7) # activa la interrupcin para el interruptor 0 # Desinhibicin de interrupciones (IRQ) movi r5, 0x0002 # desinhibicin de la interrupcin (ienable(1)=1) wrctl ienable, r5 movi r5, 0x0001 # desinhibicin de interrupciones (PIE=1) wrctl status, r5 # Programa movia r2, PI8 movia r3, PO8 loop: ldbio r4, 0(r2) stbio r4, 0(r3) br loop # Atencin de interrupciones interrupt: # Se encienden todos los LEDs movi r4, 0x00FF stbio r4, 0(r3) addi ea, ea, -4 eret # corrige la direccin de retorno

16