Para la presente entrada, y para las siguientes, a menos que indique otra cosa, los diseños se probarán sobre la tarjeta de desarrollo de Altera Modelo DE1-SoC. Esta tarjeta cuenta como core a un FPGA de la Familia Cyclone V, y además, como si ya no fuera suficiente, cuenta con un Procesador ARM Cortex A9.
Programando nuestro primer FPGA
La tarjeta de desarrollo DE1-SoC viene con un set de 10 switches (SW), y un set de 10 Leds (LEDR).
La idea del primer programa que elaboraremos será mapear es estado de los 10 switches en los 10 Leds.
Empecemos por el código VHDL para este sencillo ejemplo.
library ieee; use ieee.std_logic_1164.all; entity puertos is port( sws :in std_logic_vector(9 downto 0); leds :out std_logic_vector(9 downto 0)); end puertos; architecture arch of puertos is begin leds<=sws; end;
Como se puede apreciar, el código consiste en asignar al vector leds el estado del vector sws. Al guardar el fichero creado, Quartus II nos consultará si deseamos crear un proyecto con este fichero. En este caso, le diremos que Sí (este es otro modo de iniciar un proyecto en Quartus II).
Esto arrancará el asistente para la creación de un proyecto, que es el mismo que vimos en entradas anteriores. Definimos una ruta donde se guardarán los archivos del proyecto, el Nombre del proyecto y el fichero .vhd de mayor jerarquía. Para nuestro caso, el nombre del proyecto será Test1 y el fichero .vhd de mayor jerarquía el que acabamos de crear, es decir, puertos.vhd.
Iniciando la creación de nuestro proyecto. |
Incorporando nuestro fichero de diseño. |
Ubicación del nombre del FPGA. |
Aplicando el filtro, seleccionamos del dispositivo disponible.
Hecho ello, hacemos click en Finish.
Bueno, si bien el paso anterior es importante, en caso de que no se disponga del nombre del FPGA y se defina luego de diseñado y testeado el sistema, siempre es posible realizar la selección del FPGA, acudiendo para ello a la Opción Device del Menú de Assignments, ubicado en la barra de herramientas de Quartus II. Esto es aplicable si se desea grabar un sistema en distintos FPGAs o CPLDs.
Seleccionando nuestro FPGA. |
Bueno, si bien el paso anterior es importante, en caso de que no se disponga del nombre del FPGA y se defina luego de diseñado y testeado el sistema, siempre es posible realizar la selección del FPGA, acudiendo para ello a la Opción Device del Menú de Assignments, ubicado en la barra de herramientas de Quartus II. Esto es aplicable si se desea grabar un sistema en distintos FPGAs o CPLDs.
Device, para seleccionar el dispositivo embebido que se empleará. |
Bueno, al momento ya estamos a mitad de camino. A continuación procederemos a verificar nuestro diseño. Para ello, hacemos click en Start Analysis & Synthesis. Esta opción permitirá verificar si hay algún error en nuestor código. Bueno, en nuestro caso, al final del proceso, obtenemos que no hay ni errores ni advertencias (eso es bueno).
0 errors, 0 warnings. La idea es ver este mensaje cada que acabemos un diseño. |
El siguiente paso es realizar la asignación de pines. Es decir, decirle a Quartus II qué pines se corresponderán con el vector leds y que otros con el vector sws.
Para ello, ingresaremos a la opción Pin Planner del Menu Assignments de la barra de herramientas.
Seleccionando Pin Planner. |
A mapear se ha dicho. |
La alternativa que personalmente empleo para estos casos es realizar la importación de una asignación de pines preestablecida para la tarjeta DE1-SoC. Estos archivos suelen encontrarse en las páginas de recursos de cada tarjeta de desarrollo de Altera. Para nuestro caso, este fichero puede descargarse desde el siguiente link: https://www.altera.com/support/training/university/boards.html#de1-soc (Buscar en Resources la opción Quartus Setting File with Pin Assignments, y descargar el fichero QSF).
Este fichero contiene mapeado todos los pines del FPGA en función de los periféricos conectados a ellos en la tarjeta de desarrollo. Para importar el archivo descargado, nuevamente ingresamos a la opción Assignments, pero esta vez elegiremos Import Assignments.
Importar asignaciones de pines. |
Seleccionando el fichero qsf. |
¿Varios desconocidos?... no se preocupen. Aun vamos por buen camino. |
library ieee; use ieee.std_logic_1164.all; entity puertos is port( SW :in std_logic_vector(9 downto 0); LEDR :out std_logic_vector(9 downto 0)); end puertos; architecture arch of puertos is begin LEDR<=SW; end;
Ejecutamos Start Analysis & Synthesis para verificar si el diseño funciona. Hecho esto, volvemos al Pin Planner, pero esta vez veremos que los puertos SW y LEDR ya tienen direcciones. Esto nos indica de que la asignación de los pines del FPGA con los puertos de nuestro diseño se realizó de manera exitosa.
Asignación exitosa. |
Ni siquiera el 1% de los recursos del FPGA son empleados. |
El siguiente paso es programar el FPGA. Para ello, conectamos nuestra tarjeta de desarrollo a un puerto USB de nuestro equipo PC. Si es la primera vez que se conecta una tarjeta de Altera a la PC, necesitaremos instalar los drivers del USB-Blaster. Estos se encuentran en la carpeta de instalación de Quartus II, en la siguiente dirección (que aplica en mi equipo, en la de ustedes puede variar): C:\altera\13.1\quartus\drivers
Una vez cargado los drivers, procederamos a ir al Menú Tools, y elegiremos la opción Programmer.
Arrancando el programador. |
Seleccionando al DE-SoC como hardware. |
Una vez hecho todo ello, se debe obtener una ventana similar a la mostrada a continuación.
Ya casi está... |
Hacemos click en Ok. Ahora, la cadena de programación se mostrará como en la siguiente figura.
Cadena de programación lista. |
Hacemos click sobre el FPGA, luego hacemos click en Change File. A continuación, buscamos en la carpeta output_files, y cargamos el fichero puertos.sof.
Cargando el fichero para la programación. |
A un paso de terminar. |
Exito! |
Bueno, ¿qué opinan? No fue complicado, cierto... El truco es intentarlo... Hasta la siguiente entrada.
No hay comentarios:
Publicar un comentario