domingo, 24 de novembro de 2013

Ejemplo 2 : Cargar nuestro programa al FPGA Spartan 6

En este ejemplo se explicaran los pasos necesarios para cargar nuestro programa al FPGA Spartan 6 (Nexys 3)

Paso 1: Creamos un nuevo proyecto usando las especificaciones para nuestro Spartan6

Family: Spartan6
Device: XC6SLX16
Package: CSG324
Speed: -2

Preferred Language: VHDL


Paso 2: Nuestro programa será el que creamos en "Ejemplo 1".

Paso 3: Creamos nuestro archivo con extencion ".ucf ", para esto necesitamos compilar nuestro programa haciendo doble click sobre "Synthesize- XST" y si no hay errores hacer doble click sobre el icono "Floorplan Area/IO/Logic (PlanAhead)", será creado nuestro archivo en blanco "test.ucf".


Paso 4: Se abrira una nueva ventana llamada PlanAhead, pero para nuestro ejemplo no la vamos a usar.
Modificamos nuestro archivo creado "test.ucf" dandole doble click y digitamos los siguientes valores en él.

Los valores son para designar a "CLK", "Led" y "SW" los valores perifericos del FPGA Spartan 6 que tenemos, para saber los demas perifericos entrar en el siguiente link.

https://github.com/Samuirai/fpga/blob/master/Nexys3_Master.ucf

Paso 5: Perifericos del FPGA Spartan 6 (Nexys 3)

Se puede observar la cantidad de perifericos de esta placa, para nuestro caso usaremos los que estan con rectangulos rojos. No aparece el clock porque es interno, pero su direccion es V10 con una velocidad de 100MHz

Aqui está mas detallado los perifericos(IO) que usaremos

Paso 6: Luego hacer doble click sobre el icono "Generate Programming File" para generar nuestro archivo con extencion ".bit" que es el que tenemos que cargar al FPGA, es como una extencion .hex en el caso de los PIC's. Si no hay ningun error se deben activar los 3 checks verdes como son mostrados a continuacion


Puede ser que existan unos "warnings" en otros proyectos que vamos a realizar, eso es normal, lo que no deben existir son los errores que tienen simbolos de "X" rojos.

Paso 7: Luego expandimos la opción "Configure Target Device" y damos doble click en "Manage Configuration Project (iMPACT)"



Paso 8: Se abrirá la siguiente ventana


Paso 9: Creamos un nuevo proyecto en FILE-> NEW PROJECT, aparecerá la siguiente ventana


 La dejamos como está en la figura y damos "ok", se abriran algunas ventanas preguntando por si tenemos algunos archivos, solo las cerramos. Asegurense de tener el FPGA encendido y conectado a su computador.

Paso 10: La ventana debe estar como sigue



Paso 11: Hacemos doble click sobre el chip Xilinx de color gris, nos pedirá por el archivo con extencion ".bit" de nuestro proyecto, en este caso es "test.bit", lo seleccionamos y le damos click en abrir.




Paso 12: Se abrira una ventana en el cual tenemos que seleccionar la opcion "No"


Paso 13: Luego damos click derecho sobre el chip y seleccionamos la opcion "Program"


Paso 14:  Se abrira la siguiente ventana, escogemos la opcion " Cancel "



Paso 15:  Con esto ya tendriamos programado nuestro FPGA


Paso 16: A continuación se muestra el FPGA con el programa cargado

Para SW = "10101010"


Para SW = "11111111"



Para SW = "11110000"



Para SW = "00110011"


Ejemplo 1 : Crear un proyecto en Xilinx ISE 14.6

El primer ejemplo que realizaremos será de crear  una aplicacion de encender 8 leds con el uso de un dipswitch(8 pines).

Paso 1: Crear un nuevo proyecto, esta ubicado en la parte izquierda del programa
             (FILE->New Project), nuestro proyecto se llamará "Encender_leds"



Paso 2: Vamos a programar una FPGA Spartan 6(Nexys3) y por eso tenemos que dejar la siguiente ventana como sigue, estas configuraciones son para seleccionar que tipo de FPGA es y para seleccionar el tipo de programacion, existen 2 tipos, Verilog y VHDL en este Blog usaremos la programacion VHDL para todos los proyectos.


Paso 3: Despues será mostrado la siguiente ventana


Paso 4: Con esto estará creado nuestro proyecto usando una arquitectura Spartan 6




Paso 5: Ahora hacemos click en Project->New Source, y seleccionamos la opción VHDL Module, el nombre de nuestro programa será "test" y tendra la extención vhd.




Paso 6: Creamos las variables que vamos a usar, "clk" es la variable para el clock del FPGA y es de tipo entrada(in), "led" serán los 8 leds que tenemos que encender y es tipo salida (out), y "sw" es el dipswitch de 8 pines y será tipo entrada(in), para las variables led y sw necesitamos darle check en el cuadrado de la opcion Bus para almacenar 8 bits en cada uno de ellos.



Paso 7: Con esto estara creado nuestro archivo "test.vhd" para programar en VHDL. 


Paso 8: Luego nuestro programa estara  con declaracion de las variables, falta adicionar un proceso que pase los datos de "SW" a la variable "LED". Cuando programamos en VHDL las mayusculas y minusculas son lo mismo, todo lo contrario que cuando programamos en C.


Paso 9: Modificamos nuestro programa adicionando un proceso(mas adelante será explicado) para hacer que en cada cambio de 0 a 1 del clock el valor de "sw" pase al valor de "led".
Damos doble click sobre "Synthesize-XST" que esta en la parte izquierda, esa es la forma de compilar en VHDL. Si todo está correcto aparecerá el siguiente mensaje en la parte inferior:

 Process "Synthesize-XST" completed successfully



Paso 10: Para simular nuestro proyecto, seleccionamos la opcion "Simulation", damos click sobre nuestro programa y luego en la parte inferior damos doble click sobre "Simulate Behavioral  Model"



Paso 11: Se abrirá una nueva ventana en la cual podemos observar las variables que acabamos de crear, las simulaciones que vamos hacer serán con un clock = 1us, para poder observar esto tendremos que ajustar nuestra ventana de simulación seleccionando el siguiente boton:


Paso 12: Realizamos varios click en la lupa con simbolo menos en su interior para ajustar espacios de 1 us


Paso 13: Ahora llegó el proceso de simulacion, damos click derecho sobre el valor de "clk" y escogemos la opcion "Force Clock" es para simular un clock.



Paso 14: Dejamos los parametros como sigue


Paso 15: Hacemos click derecho sobre el valor de "sw" y escogemos la opcion "Force Constant", es atribuir un valor constante a "sw"


Paso 16: Colocamos el valor de "11110000" para "sw"


Paso 17: Ahora simulamos por 1us 


Paso 18: Moviendo la barra vertical amarilla, podemos obtener los valores de cada variable en cada instante de tiempo.


Paso 19: Expandiendo los valores de "sw[7:0]" y "led[7:0]"  podemos ver bit por bit como varian en cada instante de tiempo.


Paso 20: Por ultimo podemos ver la arquitectura de nuestro programa haciendo doble click sobre "View RTL Schematic", es observado que nuestra arquitectura es formado por un flip flop tipo D para cada bit.




sábado, 23 de novembro de 2013

Introduccion

Este blog está siendo creado para enseñar como programar un FPGA de la Xilinx, aqui aprenderas a usar los perifericos como son puerto de comunicacion serial, mouse,teclado,usb host,usb periferico ,audio,video(VGA y DVI),buffers,memorias ram, ddram2,picoblaze,ethernet,sata,conecciones con otros hardware(arduino y sus sensores,pic 18F4550,freedom board de la freescale,raspberry pi,cubieboard),etc.

Por ahora cuento con dos FPGA's: un Spartan 6 (Nexys3) y un Virtex 5 (ML507) que es un fpga mas avanzado, mas adelante explicaremos las diferencias entre ellos que algunas son notorias a simple vista. La programacion que usaremos es VHDL en el entorno ISE y el software que usaremos es Xilinx ISE version 14.6.

Para que tengan conocimiento de estas 2 tarjetas estoy colocando el link de cada una:

Nexys 3:

http://www.digilentinc.com/Products/Detail.cfm?NavPath=2,400,897&Prod=NEXYS3



Virtex 5:

http://www.xilinx.com/products/boards-and-kits/HW-V5-ML507-UNI-G.htm




El primer ejercicio es crear una aplicacion en Xilinx ISE 14.6
Para descargar el programa tienen que entrar a la siguiente pagina:

http://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/design-tools/v2012_4---14_6.html

Tienen que crearse su cuenta para que después la Xilinx les envie la licencia.