Implementación de LEDs secuenciales y salida serial con Nios II

Implementación de LEDs secuenciales y salida serial con Nios II Soft Core

En el campo del diseño electrónico moderno, las FPGA (Field Programmable Gate Arrays) se han convertido en la plataforma preferida para implementar sistemas digitales complejos debido a su flexibilidad y capacidad de procesamiento paralelo. Nios II, como procesador soft core proporcionado por Altera (actualmente parte de Intel), ofrece un potente núcleo de procesamiento para FPGAs, ampliando aún más su aplicación en el diseño de sistemas embebidos.

El objetivo principal de esta práctica es aprovechar la capacidad de programación del procesador soft core Nios II combinada con la implementación de lenguaje de descripción de hardware (HDL) para completar dos tareas fundamentales: control de LEDs secuenciales y transmisión de datos por puerto serie.

Descripción de la tarea

Comprensión del procesador soft core Nios II

Nios II es un procesador embebido configurable que opera dentro de una FPGA, proporcionado por Altera (ahora Intel FPGA). Soporta múltiples opciones de configuración, incluyendo diferentes niveles de pipeline, tamaño de caché, manejo de interrupciones y excepciones. Comprender Nios II es crucial para dominar el uso de FPGAs en el diseño de sistemas complejos.

  • Aprender la arquitectura básica y principios de operación del procesador Nios II
  • Familiarizarse con las herramientas y entorno de desarrollo de Nios II
  • Entender cómo configurar el soft core Nios II para satisfacer requisitos específicos de aplicación

Introducción a Platform Designer (anteriormente Qsys)

Platform Designer (antes conocido como Qsys y anteriormente AES) es un entorno de desarrollo integrado basado en gráficos proporcionado por Altera para diseñar e integrar rápidamente sistemas complejos. A través de Platform Designer, se pueden integrar fácilmente el soft core Nios II con otros núcleos IP (como controladores de memoria, interfaces periféricas, etc.) para formar un sistema completo.

Implementación de LEDs secuenciales

Los LEDs secuenciales representan un experimento clásico en el diseño de FPGAs, donde se controla un grupo de LEDs para encenderse en secuencia simulando un efecto de flujo de agua. Esta tarea combinará lenguaje de descripción de hardware con programación de software Nios II.

Implementación de comunicación serial

El puerto serie es una interfaz de comunicación asíncrona comúnmente utilizada en sistemas embebidos para intercambio de datos. Esta tarea requiere implementar comunicación serial a través del procesador Nios II para completar la transmisión y recepción de datos.

Características del procesador Nios II

Nios II es un procesador soft core embebido aplicado a FPGAs de Intel, actuando como componente central del sistema embebido Platform Designer. Tiene fuertes capacidades de rendimiento y características personalizables. Se pueden construir múltiples procesadores Nios II dentro de una sola FPGA, actuando como CPU principal o como coprocesadores que coordinan de manera ordenada las funciones del sistema complejo.

Las características principales incluyen:

  • Arquitectura de pipeline configurable desde tres hasta ocho etapas
  • Arquitectura Harvard con cachés de instrucciones y datos independientes
  • Manejo de interrupciones y excepciones soportando hasta 32 fuentes de interrupción
  • Soporte extenso para periféricos estándar como temporizadores, puertos serie, depuración JTAG
  • Instrucciones personalizadas que permiten añadir funcionalidad específica según necesidades
  • Diseño de bajo consumo optimizado para dispositivos portátiles alimentados por batería

Plataforma Designer (Qsys)

Platform Designer (anteriormente conocido como SOPC Builder) es una herramienta de integración de sistemas en Quartus II. Es una plataforma para construir, desarrollar y mantener sistemas, típicamente sistemas embebidos centrados en el procesador Nios II, aunque también puede funcionar sin él.

Un sistema básico de Platform Designer incluye reloj del sistema, procesador Nios II, interfaz JTAG, ROM y RAM. El procesador Nios II actúa como el IP central del sistema, gestionando tareas de control como asignación de interrupciones, gestión de direcciones y planificación de memoria. Los controladores de periféricos como GPIO y SDRAM Controller se comunican con dispositivos externos. La comunicación entre Nios II y los controladores de periféricos se realiza a través del bus Avalon.

Flujo del experimento

Diseño de hardware

Creación del proyecto

Iniciar el software Quartus II, seleccionar File → New Project Wizard, completar la ruta y nombre del proyecto, continuar con Next hasta completar la creación del proyecto.

Uso de Platform Designer

Seleccionar Tools → Platform Designer y seguir estos pasos:

  • Agregar el procesador Nios II: buscar "nio" y añadir Nios II Processor
  • Agregar memoria On-Chip: buscar "on_chip" y añadir On-Chip Memory con tamaño de 10K
  • Agregar JTAG UART: buscar "jtag" y añadir JTAG UART
  • Agregar System ID Peripheral: buscar "sys" y añadir System ID Peripheral
Conexión de núcleos IP

Los componentes clk, reset y datamaster deben conectarse con todos los demás núcleos IP. El puerto de instrucciones del Nios II solo se conecta con la memoria. Configurar los vectores de reset y excepción, luego asignar direcciones base al sistema.

Generación y uso de recursos FPGA

Seleccionar Generate → Generate, mantener configuración predeterminada y guardar. Crear archivo de nivel superior:

module led_serial_demo(
    input sys_clk,
    input btn_reset
);
system u_platform_designer (
        .sys_clk_clk       (sys_clk),    
        .btn_reset_reset_n (btn_reset)   
    );
endmodule

Diseño de software

Creación del proyecto

Abrir Nios II Software Build Tools for Eclipse y crear nuevo proyecto seleccionando File → New → Nios II Application and BSP from Template.

Implementación de código
Leds secuenciales
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"

const alt_u8 pattern_sequence[8] = {0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF};

int main(void)
{
    int counter = 0;
    alt_u8 output_pattern;
    volatile int delay_counter;
    
    while(1)
    {
        if(counter == 7)
        {
            counter = 0;
        }
        else
        {
            counter++;
        }
        
        output_pattern = pattern_sequence[counter];
        IOWR_ALTERA_AVALON_PIO_DATA(LED_OUTPUT_BASE, output_pattern);
        
        delay_counter = 0;
        while(delay_counter < 500000)
            delay_counter++;
    }
    
    return 0;
}

Salida serial
#include "system.h"
#include <stdio.h>

int main(void)
{
    volatile int timing_delay;
    
    while(1)
    {
        printf("Nios II Communication Test - Hello World!\n");
        timing_delay = 0;
        while(timing_delay < 5000000)
            timing_delay++;
    }
    
    return 0;
}

Guardar los cambios, generar BSP para el proyecto, y compilar nuevamente.

Resultados del experimento

El experimento logró implementar con éxito el control de LEDs secuenciales y la comunicación serial basada en el procesador soft core Nios II. Este proceso profundizó la comprensión del procesador Nios II y su integración con lenguajes de descripción de hardware, mejorando las habilidades de programación y depuración de hardware.

La implementación incluyó la creación de un sistema personalizado usando Platform Designer, control de LEDs mediante código C, y comunicación serial funcional. La experiencia proporcionó una base sólida para proyectos más avanzados de sistemas embebidos en FPGA.

Etiquetas: niosii FPGA embedded-systems serial-communication platform-designer

Publicado el 8-16 18:28