Welcome to IDI Electronica!!!



Welcome!!! IDI Electronica is a blog for my personal projects and articles to help electronics enthusiasts like me.

Bienvenidos!!! IDI Electronica es un blog con mis proyectos personales y artículos con el fin de ayudar a entusiastas de la electrónica como yo.

Thursday, November 12, 2015

Creación de un Proyecto con la Placa de Desarrollo de FPGA Terasic DE0-Nano

El DE0-Nano es una de las placas de desarrollo para FPGA más populares debido a su bajo costo (menos de $100) y porque usa el FPGA Cyclone IV de Altera. El Cyclone IV es un circuito integrado lógico de bajo costo y bajo consumo de poder con más de 22 mil elementos lógicos.

La placa contiene:

- 2 conectores de 20 pines, 72 GPIO (pines de entrada y salida), dos pines de +5V, dos de +3V3 y cuatro de tierra
- 1 conector de 26 pines, 18 GPIO y 8 pines de entrada analógica para el ADC
- 1 ADC (convertidor de señal analógica a digital) de 12 bits
- 1 EEPROM de 2Kb (memoria reprogramable)
- 1 acelerómetro

Fig 1. Placa de Desarrollo de FPGA Terasic DE0-Nano


Terasic también provee programas para facilitar el uso del DE0-Nano: El panel de control (Control Panel) y el creador de sistemas (System Builder). El Control Panel permite comunicaciones y control del DE0-Nano desde una computadora. Desafortunadamente, tuve problemas para instalar el programa en mis 2 computadoras, por lo que no lo incluiré en esta guía.

El System Builder es una herramienta bastante útil que simplemente crea los archivos necesarios para comenzar un proyecto. Los archivos creados incluyen:
- .QPF: Archivo proyecto para Altera Quartus II
- .V: Archivo de Verilog declarando los puertos de entrada y salida del FPGA
- .QSF: Archivo con la asignación y configuración de pines de FPGA
- .SDC: Archivo para verificación y prueba de tiempos
- .HTML: Descripción detallada de cada pin


Fig 2. Mapa físico del DE0-Nano

Toda la información en esta guía puede ser encontrada en la página web de Terasic (en inglés) en la pestaña “Resources”. A continuación les dejo los pasos para crear un proyecto en el DE0-Nano.



1. PREPARACION DEL SOFTWARE


1.1. Software de Altera

Primero, necesitamos descargar Quartus II de la página web de Altera. Quartus II es un ecosistema que nos permite compilar, sintetizar, verificar y analizar nuestro código, además de crear mapas de RTL, simulaciones, entre otras cosas.

A menos que tengas acceso a una licencia pagada, vamos a usar la versión Web Edition.


Fig 3. Altera Quartus II main window


Puedes descargar Quartus II v15.0 y ModelSim en la página web de Altera. El archivo pesa varios GB y tarda entre 10 a 20 minutos en instalar debido a su tamaño.


1.2. Software de Terasic

El DE0-Nano viene acompañado de un CD-ROM con los manuales, proyectos de muestra y los programas necesarios para usar nuestra placa. Si no tienes el CD-ROM, puedes descargar una copia en la página de Terasic.

Es posible crear nuestro proyecto sin utilizar el System Builder. Sin embargo, ese programa nos ahorrará bastante tiempo al crear el archivo QSF de sistema.


1.3. Altera USB Blaster

Para poder conectar el FPGA con Quartus II necesitamos instalar el driver respectivo. Por fortuna, este viene incluido con la descarga de Quartus II, pero tiene que ser instalado manualmente.

Para instalar el driver:

- Conecta el DE0-Nano a tu computadora utilizando un cable de mini-USB.
- Abre el menú de Inicio y escribe “Administrador de Dispositivos” o “Device Manager” dependiendo de tu versión de Windows.
- Una vez abierto el Administrador, busca la opción para “Otros Dispositivos”.
- Haz click con el botón derecho del ratón en el dispositivo con la símbolo amarillo y selecciona “Actualizar software de Controlador...”
- Luego, selecciona Buscar Controlador en mi Computadora y selecciona la carpeta donde Quartus II esta instalado. Asegúrate de seleccionar el cuadrito para Incluir Subcarpetas.



2. CREACION DEL PRIMER PROYECTO

2.1. System Builder

Necesitamos dos archivos para comenzar: El archive de proyecto para Quartus II (QPF) y el archivo de configuración (QSF). Afortunadamente, el System Builder puede crearlos por nosotros.

- En el CD-ROM, abre la carpeta Tools y dentro de ésta, la carpeta DE0_Nano_SystemBuilder. En ella encontrarás el archivo ejecutable DE0_Nano_SystemBuilder.ex
- Una vez abierto el System Builder, nombra tu proyecto,  selecciona “GPIO Default” y crea un nombre genérico para ambos conectores.
- Luego, selecciona “Generate” y escoge dónde quieres guardar tu nuevo proyecto.


Fig 4. Terasic DE0-Nano System Builder


2.2. Quartus II

- Abre la carpeta donde creaste tu Nuevo proyecto y abre el archive QPF. Esto abrirá el programa Quartus II.
- Haz click en el menú Project (proyecto) y luego en Add/Remove Files (agregar/remover archivos) y luego sobre el ícono con los puntos suspensivos (…)
- Busca y elige el archivo con formato .V (Verilog) y luego haz click en Add y luego en OK.
- Double click on the Verilog file to see the template for our project.
- En la ventana principal de Quartus II, busca la pestaña Files para ver los archivos en el proyecto y haz doble click sobre el archivo de Verilog que agregaste.


Fig 5. Agregando archivos a proyecto


Fig 6. Quartus II mostrando los archivos en el proyecto


El archivo de verilog contiene las instancias de cada pin del FPGA gracias al System Builder.

Como nuestro objetivo es simplemente crear un circuito para probar nuestra placa, reemplaza el código en tu archivo Verilog con el código que les dejo a continuación.

NOTA: El módulo principal tiene que tener el mismo nombre que el proyecto. En mi caso, uso el nombre Project1.


module Project1(        // Modulo principal debe tener mismo nombre
input CLOCK_50,         // que el archive de proyecto
output reg [7:0]LED
);

reg   [25:0]count;     
reg   clk2;
reg   state=0;

// divisor de freqcuencia 50MHz a 1Hz
always@(posedge CLOCK_50)
    begin
        if(count==26'd25_000_000)    // cuenta hasta 25M ciclos de reloj
            begin                    // cambia clk2 hi or lo
             count<=0;               
             clk2 <= ~clk2;         
            end
        else
            begin
             count<=count+1;
            end
    end    

// maquina de estados para LEDs
always @(posedge clk2)
      begin
             case(state)
             1'b0:      begin
                  LED[7:0] <= 8'b01010101;
                  state <= 1'b1;
                  end
            1'b1:       begin
                  LED[7:0] = 8'b10101010;
                  state <= 1'b0;
                  end
            Default: begin
                  state <= 1'b0;
                  end
            endcase    
      end
endmodule


El código hace dos cosas, crea un divisor de reloj de 1Hz y crea una máquina de estados para hacer parpadear los LED en la placa.

Si no deseas copiar y pegar el codigo que les deje arriba, puedes descargarlo en un archivo de Verilog desde mi repositorio de Github bajo el nombre Project1.v
Recuerda cambiar el nombre del archivo y del módulo principal con el mismo nombre de tu proyecto. Sólamente necesitas agregarlo a tu proyecto (ver sección 2.2).



2.3. Compilación el Proyecto

- Cuando tu código de Verilog este listo, haz doble click en Compile Design. El proceso normalmente tarde uno o dos minutos dependiendo de tu sistema.
- Asumiento que no hay errores, haz doble click en EDA Netlist Writer para crear un archivo binario para configurar el FPGA.
- Finalmente, haz doble click en Program Device para abrir el programador de Quartus II.


2.4. Configuración el FPGA

- En la ventana principal de Quartus II Programmer debe de aparecer el archivo SOF creado por tu proyecto.
- En la esquina superior izquierda, haz click en Hardware Setup y selecciona “USB-Blaster”. Si no te aparece esa opción, mira la sección 1.3 de esta guía.
- Finalmente, haz click en “Start” en la ventana principal de Programmer y mira tu DE0-Nano en acción.

Nota: Los FPGA son dispositivos volátiles, por lo tanto perderás la configuración apenas desconectes la fuente de poder. Para mantener la configuración, debes de guardarla en la memoria flash montada en la placa.

Fig 7. Seleccionando hardware para programar el dispositivo


Fig 8. Notificación de programación exitosa del FPGA


2.5. Código de Prueba DE0-Nano


Si simplemente deseas probar tu placa, puedes descargar el archivo SOF que he creado para este proyecto y cargarlo en el FPGA usando Quartus II Programmer (ver sección 2.4)