SHARKBoard FPGA

OLD VERSION BOARD BOARD_FPGA_SHARKBoard_V1.0

El proyecto SHARKBoard nace como una plataforma de bajo costo que permite a estudiantes interesados en el desarrollo de aplicaciones sobre lógica programable diseñar y probar de manera rápida sus aplicaciones. El eje central de este proyecto es la tarjeta SHARKBoard creada por la empresa Go-Bit.co apoyada en la Universidad de los Andes, Colombia. La SHARKBoard esta compuesta por una FPGA Spartan 3E en encapsulado 100-VQFP, una dataflash de 1MB y una interfaz de programación USB.

= INSTALACIÓN DE HERRAMIENTAS =

BASICAS: ISE Xilinx - GTKWave
Para poder trabajar con la tarjeta SHARKBoard es necesario la instalación de las siguientes herramientas:

Los pasos detallados para la instalación de las herramientas mencionadas los puede consultar el siguiente link: FPGA Toolchain
 * Xilinx WebPack 12.4: Software para la sintesis de diseños en HDL.
 * GTKWave: Software para simulación.
 * Otros: Demas herramientas como drivers usb y adicionales.

Driver iMPACT (Dataflash)
ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="cff8", MODE="666"
 * Descargar las fuentes del driver acá
 * Descomprimir la carpeta mediante el comando:
 * Ubicarse dentro del directorio y ejecutar en un terminal el siguiente comando:
 * Verificar la creación del archivo libusb-driver.so dentro del directorio.
 * Conectar la SHARKboard y ejecutar en un terminal:
 * Identificar el id de vendedor(0403) y el id(cff8) de producto. (Pueden ser diferentes en su caso): Bus 003 Device 005: ID 0403:cff8 Future Technology Devices
 * Ubicar el archivo libusb-driverrc (en el directorio descargado inicialmente) y copiarlo a ~/.libusb-driverrc.
 * Editar el archivo copiado con los id encontrados anteriormente: LPT3 = FTDI:0403:cff8
 * Agregar la siguiente linea en un nuevo archivo en /etc/udev/rules.d/ llamarlo libusb-driverrc.rules. (Reemplazar los id por los encontrados anteriormente)
 * Reiniciar udev:
 * Para iniciar iMPACT ejecutar: (Reemplazar /path/to por el path donde se encuentra el archivo libusb-driver.so):

LM32 Toolchain
LM32 Toolchain

KINECT

=RECURSOS=

Archivos del Proyecto (GIT)
Todos los archivos relacionados con el proyecto estan disponibles a traves del controlador de versiones GIT, el cual se actualiza constantemente con los ultimos avances realizados.

Para descargar los archivos ejecute en un terminal (Linux):

Para visualizarlos directamente desde su explorador vaya al sigueinte enlace: https://sourceforge.net/p/sharkboard/code

Para recibir información sobre las ultimas actualizaciones, puede inscribirse a la lista de correo del proyecto en el siguiente enlace: https://lists.sourceforge.net/lists/listinfo/sharkboard-devop

sharkboard-code
sharkboard-code es el directorio GIT donde se encuentran todos los archivos del proyecto. A continuación se describiran los archivos y sub-directorios más importantes contenidos:


 * design-files/: Contiene los archivos de diseño de algunas tarjetas de expansión para la SHARKBoard
 * doc/: Documentación y Erratas
 * projects/: Contiene los Ejemplos Desarrollados para la Sharkboard
 * rtl-generic/: Contiene módulos genéricos utilizados en los proyectos ejemplos o a utilizar en los proyetos realizados por los usuarios.
 * sUpdateDownGit.sh: Script de actualización del GIT. Se recomienda al usuario ejecutarlo periodicamente. (Doble-clic -> Ejecutar).

Pinout
http://157.253.195.173/ttdewikim1/images/9/9c/SharkBoardV1_9-SilkS_Front.pdf

=EJEMPLOS=

Proyecto Base - Blinkingled
Los archivos principales para la descripcion, simulación, sintesis e implementación de un proyecto HDL para la SHARKBoard son los sigueintes:


 * system.v: contiene la descripcion del hardware el cual se sintetizara. Aca podra programar y realizar todo el codigo que necesite


 * system_tb.v: configura y da los parametros de simulacion.


 * system.ucf: define los pines a ser usados en la FPGA y su respectivo nombre.


 * rtl/: se encuentran las carpetas de cada uno de los modulos que se utilice en el system.v.


 * Makefile: realiza las tareas de construccion para generar los archivos necesarios para programar y sintetizar.

Todos los projectos de ejemplo (disponibles dentro del directorio /projects en sharkboard-code) tienen la distribución mostrada anteriormente. Se recomienda al usuario tomar como base cualquiera de estos (copiar, pegar y cambiar el nombre en el mismo directorio) al comenzar cualquier nuevo proyecto.

Simulación, Sintesis e Instalación de un Proyecto
Los comandos acontinuación deben ser ejecutados en un terminal (Linux) desde la carpeta del proyecto respectivo.

Este comando mostrará la ventana de simulacion del proyecto en caso de no presentar errores el mismo. Este comando generará los archivos de sintesis necesarios de no presentar errores el proyecto. Para ejecutar el comando de instalación es necesario haber sintetizado el proyecto de forma exitosa. Además este comando solo podrá ser ejecutado una unica vez despues del comando de sintesis; en caso de requerir una nueva instalación es necesario realizar nuevamente la sintesis.
 * Simulación:
 * Sintésis:
 * Instalación

UART
La SHARKBoard esta compuesta por un chip FTDI el cual, entre otras cosas, permite la comunicación con un PC a través del protocolo RS232 por medio de la misma conexion usb utilizada durante la programación.

Al conectar la SHARKBoard al PC, el sistema la reconoce como un dispositivo /dev/ttyUSB(X), donde X es el numero del puerto al cual queda asignada la conexion. Para verificar dicho número ejecute el comando   en un terminal (linux), despues de haber conectado la SHARKBoard. Ahora podra enviar y recibir datos serialmente a través de este puerto por medio de un emulador serial como minicom.

Los pines a los cuales estan conectadas las lineas RX y TX de la SHARKBoard son respectivamente:

NET "uart_rxd" LOC = "P54" | IOSTANDARD = LVTTL; NET "uart_txd" LOC = "P69" | IOSTANDARD = LVTTL;

Dataflash como memoria no volatil
La FPGA Spartan 3E contenida en la SHARKBoard tiene memoria volatil, por lo tanto cada vez que se desconecta de su alimentación la configuración contenida se borra, por lo cual es necesario realizar nuevamente el proceso de sintesis y programación. Para evitar esto es posible almacenar el archivo de configuración en la dataflash contenida en la SHARKBoard, tal que cada vez que se encienda la tarjeta, la FPGA se configure de forma automatica con el contenido de la memoria.

A continuación se daran los pasos necesarios para:
 * Crear un archivo de configuración spi_prom.mcs con el formato necesario para almacenar en la dataflash.
 * Programar el archivo de configuracion spi_prom.mcs en la dataflash
 * Iniciar el programa desde la dataflash cuando se encienda la tarjeta.

Creación de Archivo spi_prom.mcs con formato .mcs
Para la creación del archivo spi_prom.mcs es necesario contar con el archivo de configuración generico (system.bit) que se desea implementar en la SHARKBoard.


 * Iniciar iMPACT con el comando:(Reemplazar /path/to por el path donde se encuentra el archivo libusb-driver.so)


 * En la ventana que aparece, seleccionar la opción: Prepare a PROM File


 * Aparecerá la ventana PROM File Formatter seleccionar las siguientes opciones:
 * STEP1: SPI Flash -> Configure Single FPGA
 * STEP2: Seleccionar el tamaño de la dataflash dependiendo de version de FPGA utilizada: 1MBits (xc3s100e), 2MBits (xc3s250e), 4MBits (xc3s500e). Seleccionar Add Storage Device.
 * STEP3: Seleccionar las opciones siguientes: Checksum Fill Value: FF, Output File Name: spi_prom (puede seleccionar cualquier nombre de su preferencia), Output File Location: Directorio donde se guardara el archivo generado, File Format: MCS


 * Aparecera la ventana Add Device en la cual debera seleccionar el archivo de configuración que se implementara en la SHARKBoard. (system.bit).
 * En el menu principal (Barra Superior) seleccionar: Operations -> Generate File.... Se generara el archivo spi_prom.mcs en el directorio seleccionado anteriormente.

Programación de Dataflash

 * Conectar la SHARKBoard al PC a través del cable miniUSB.
 * Iniciar iMPACT con el comando:(Reemplazar /path/to por el path donde se encuentra el archivo libusb-driver.so)
 * En la ventana que aparece, seleccionar la opción: Configure devices using Boundary-Scan (JTAG) -> Automatically connect to a cable and identify Boundary-Scan chain
 * Se le preguntará si desea asignar un archivo de configuración. Seleccione Yes.
 * En la ventana que aparece busque y seleccione el archivo de configuración de su proyecto (system.bit).
 * Se le preguntará si desea conectar una PROM SPI al dispositivo. Seleccione Yes.
 * En la ventana que aparece busque y seleccione el archivo para almacenar en la dataflash creado anteriormente (spi_prom.mcs).
 * Aparecerá una ventana en la que debe seleccionar el tipo de Dataflash (SPI PROM) y la referencia dependiendo de la version de FPGA utilizada: M25P10A (xc3s100e), M25P20 (xc3s250e),  M25P40 (xc3s500e).
 * Para programar la dataflash, selecionarla en el esquema. Y seleccionar Operations -> Program.

Iniciar el programa desde Dataflash
Antes de iniciar, asegurese que el jumper K501 esta puesto sobre los dos pines mas cercanos al conector miniUSB (mas lejanos de la FPGA).


 * Para iniciar, conecte la SHARKBoard a la alimentación o presione el pulsador PROG_B (SW1402). El programa debera iniciar de forma automatica en la SHARKBoard.

=TROUBLESHOOTING=

Toolchain SHARKBoard Spartan 3E xc3s250e
El soporte para sintetización sobre la versión de FPGA xcs3s250e para la SHARKBoard, no se encuentra en los paquetes instalados anteriormente. Para obtener dicho soporte deberá seguir los siguientes pasos.

0001110000011010	xc3s250	xc3s250
 * Descargar y descomprimir el directorio xc3s250.
 * Copiar el directorio xc3s250 en /usr/local/share/urjtag/xilinx
 * Habilitar los permisos de ejecución del directorio xc3s250
 * Adicionar la siguiente linea al archivo /usr/local/share/urjtag/xilinx/PARTS

Descarga de sharkboard-code (GIT)
Para descargar los archivos del proyecto del repositorio GIT sharkboard-code, deberá tener instalado en su PC el programa para control de versiones GIT. Para instalarlo, ejecute el siguiente comando en un terminal: sudo apt-get install git