FPGA Libre
EnglishEspañolS.F. Summary
Hosted by:
Get Free FPGA development tools at SourceForge.net. Fast, secure and Free Open Source software downloads

Introducción

Esta página es una introducción al proyecto y en ella se explican conceptos básicos sobre las herramientas usadas, modificadas y/o creadas por el mismo.
En las otras páginas se omiten los detalles volcados en esta introducción por lo que esta página sirve como aclaración para muchos aspectos encontrados en otras páginas del proyecto.

¿Qué es una FPGA?:

Este proyecto está orientado a personas que ya conocen que es una FPGA por lo que sólo les diremos que se trata de circuitos electrónicos reconfigurables que permiten crear nuevos circuitos que se comportan como nosotros querramos. Una definición de la palabra FPGA se puede encontrar en la Wikipedia.


¿Cómo nace el proyecto?:

El proyecto FPGA Libre nació con la idea de poder compartir herramientas y cores desarrollados en la Unidad Técnica Instrumentación y Control perteneciente al centro Electrónica e Informática del INTI (Instituto Nacional de Tecnología Industrial).

En el Primer Workshop Latinoamericano de Tecnología FPGA nos encontramos con mucha gente deseosa de compartir conocimientos sobre el apasionante tema de las FPGA y por eso decidimos crear este espacio como un lugar abierto para todos los que quieran unirse.


Objetivo:

El objetivo principal de este proyecto es el de facilitar el intercambio de los elementos necesarios para el desarrollo con FPGA.

El intercambio de medios físicos (hardware) es complejo debido al costo de replicación y el intercambio de programas bajo licencias es un delito. Por estas razones es que el proyecto pone énfasis en software libre o gratuito y en cores que puedan ser redistribuidos sin restricciones.

Partiendo de estas bases se enuncian los siguientes objetivos formales:

  1. Impulsar el desarrollo con dispositivos FPGA utilizando herramientas de software libre u open source.
  2. Fomentar el intercambio y desarrollo de IP cores con licencias que posean el mismo espíritu que las del software libre.

Entre las ventajas del uso de software libre podemos citar:

  • La capacidad de aprender observando el código fuente de las aplicaciones y los cores.
  • La posibilidad de adaptar a gusto según las necesidades particulares de cada interesado.
  • La oportunidad de mejorar el código y brindar esas mejoras al resto de la comunidad.
  • Bajo costo. Los productos propietarios de este rubro suelen tener altos costos de licencias, lo que limita y restringe su aplicación en forma masiva en proyectos e instituciones de bajos recursos y en países en desarrollo.


¿Para qué dispositivos y plataformas?:

Nuestro proyecto no está ligado a ningún dispositivo o plataforma en particular. Pero al mismo tiempo los proyectos que lo componen se realizan con las herramientas que poseen sus integrantes.

En la actualidad la plataforma usada es Debian GNU/Linux y los dispositivos son los de Xilinx. Pero como ya se dijo el proyecto es abierto.

En los últimos meses hemos estado trabajando con FPGAs de Lattice, en particular las iCE40 que tienen algunas ventajas muy interesantes.


Componentes del ciclo de desarrollo de FPGALibre:

Las partes componentes que hacen posibles el ciclo de desarrollo con dispositivos FPGA actualmente utilizadas por los desarrolladores de FPGA Libre puede resumirse en los siguientes items:

  • El código HDL
    • Selección del HDL para realizar los diseños.
    • Convenciones y reglas del código para desarrollo en grupo y mayor reusabilidad.
    • Interconectividad de cores.
    • Extensiones y asistentes a lenguajes HDL.
    • Librerías HDL.
    • Cores IP.

  • Edición del código
    • Software de edición.
    • Asistentes del software de edición.

  • Simulación
    • Herramienta de simulación.
    • Banco de pruebas.
    • Asistentes del banco de pruebas.
    • Visualización de formas de onda.
    • Asistentes para el proceso de simulación.

  • Síntesis
    • Herramienta de síntesis.

  • Transferencia a la FPGA
    • Selección del dispositivo FPGA.
    • Hardware para grabación en la FPGA o memoria.
    • Software para grabación en la FPGA o memoria.

A continuación veremos cada una de estos items con más detalles


El código HDL:

Selección del HDL para realizar los diseños

Existen varios HDLs que pueden utilizarse para realizar la descripción de un diseño. Los más utilizados y populares son Verilog, VHDL y SystemC. Debido a que el VHDL es de uso común en muchas instituciones universitarias y proyectos de gran importancia (por ejemplo el procesador León) creemos que es la mejor alternativa para los objetivos planteados. Por este motivo el lenguaje de preferencia para el proyecto FPGA Libre es el VHDL, sin embargo está abierto a cualquier contribución o avance futuro en otros lenguajes.

El lenguaje VHDL está definido en el estándar IEEE 1076. Algunas herramientas propietarias muy utilizadas han implementado características que violan este estándar.

Es importante destacar que en la actualidad existe un flujo de desarrollo basado completamente en software libre. El mismo sólo soporta Verilog como lenguaje.

El lenguaje de preferencia para el proyecto FPGA Libre es el VHDL estándar.


Convenciones y reglas del código para desarrollo en grupo y mayor reusabilidad

El lenguaje VHDL, al igual que muchos otros, ofrece cierta libertad en cuanto al formateado del código, indentado, nombres de las variables, etc. Sin embargo cuando se pretende fomentar el trabajo en grupo, permitir que otras personas colaboren y aumentar la reusabilidad del código, es necesario definir pautas que complementen la sintaxis del lenguaje. Para abordar este tema se tomaron dos recomendaciones en cuanto a escritura de código VHDL: Recomendaciones de la Agencia Espacial Europea y recomendaciones para proyectos en OpenCores. En base estas dos recomendaciones, el proyecto FPGA Libre define sus recomendaciones, también llamadas guidelines, para escritura de código VHDL.

El proyecto FPGA Libre posee guidelines propias para la escritura de código VHDL.

Para implementar el concepto se ha desarrollado un lint muy básico y rústico para VHDL llamado bakalint. Para mayor claridad sobre el concepto, se cita una definición de lint tomada de la web:

lint: "A Unix C language processor which carries out more thorough checks on the code than is usual with C compilers."

En este caso la definición de lint no se refiere a C sino a VHDL. Es decir un verificador de código VHDL, que se fija en cosas que el compilador acepta o ignora. El objetivo es tener una herramienta que ayuda a respetar los guidelines para lograr uniformidad y coherencia entre códigos de distintos autores.

El proyecto FPGA Libre ha desarrollado un lint llamado bakalint para facilitar la aplicación de los guidelines para código VHDL.


Interconectividad de cores

Para aprovechar al máximo los desarrollos de cores IP y sacar mayor beneficio de la modularidad que estos brindan, es necesario definir y establecer un mecanismo de interconexión común. Siguiendo los objetivos del proyecto se buscó una especificación abierta y libre para cubrir esta necesidad. Tomando como referencia el proyecto OpenCores se selecciona la arquitectura de interconexión Wishbone para IPs en SoCs. Además de sus características y ventajas técnicas, esta especificación es de dominio público y permite su libre utilización sin ningún tipo de contrato, acuerdo, royalty o pago.

El proyecto FPGA Libre utiliza la especificación Wishbone para la interconexión de cores IP.

Para automatizar la generación de entidades de interconexión de cores con la especificación Wishbone puede utilizarse la herramienta WISHBONE Builder de OpenCores. El proyecto FPGA Libre ha realizado modificaciones y mejoras a esta herramienta.

El proyecto FPGA Libre utiliza la herramienta WISHBONE Builder (modificada) para generar las entidades de interconexión de cores Wishbone.


Extensiones y asistentes al lenguaje HDL

Comparado con lenguajes de programación como el C, el lenguaje VHDL posee limitaciones que dificultan y demoran el desarrollo. Para solucionar algunos de estos inconvenientes se desarrollan herramientas complementarias para el lenguaje. Estas son las pequeñas herramientas desarrolladas hasta ahora:

  • vhdlspp - VHDL Simple Pre-Processor que permite fácilmente incluir archivos. Similar a la sentencia #include del lenguaje C.
  • hex2vhdl - Conversor de archivos en formato HEX a un array VHDL. Utilizado por ejemplo para incluir el contenido de la memoria de programa de un procesador dentro de un diseño.
  • xtracth - Este es un script muy simple para extraer definiciones de un package VHDL y colocarlas en un .h y/o un .inc.


Librerías VHDL

Existen varias librerías que facilitan y aceleran el desarrollo de cores. Estas son algunas de las utilizadas hasta ahora:

  • std_logic_1164 - manejo básico de bits, estandarizada por la IEEE
  • numeric_std - manejo básico de enteros, estandarizada por la IEEE
  • C - emulación de la librería de C estándar, ESNUG 2004

El proyecto FPGA Libre recomienda el uso de los tipos definidos en std_logic_1164 y numeric_std y no los definidos por Synopsys.


cores IP

Existen gran cantidad de cores IP disponibles en la red, con licencias que permiten su uso sin ningún tipo de restricciones.

Se descarta la utilización de cores IP que no sigan los principios del software libre, por no brindar el código fuente, restringir su campo de aplicación o solicitar el pago de royalties.

De todos los cores IP con estas licencias, este proyecto tiene preferencias por aquellos escritos en VHDL, que compilen correctamente con GHDL y posean interfase Wishbone.

Se prefieren aquellos cores escritos en VHDL, que compilen con GHDL y posean interfase Wishbone.


Edición del código:

Software de edición

No son muchos los editores libres que poseen facilidades avanzadas para la edición de código VHDL. Uno de estos editores es el SETEdit, un editor pensado para programadores, con soporte para gran cantidad de lenguajes de programación. Estas son algunas de las características que lo hacen una buena elección para el trabajo con VHDL:

  • Resaltado de sintaxis para VHDL.
  • Macros específicas con construcciones típicas de VHDL.
  • Utilización de Exuberant C Tags ECTAGS con soporte específico para VHDL.
  • Indentado coherente con los guidelines del proyecto.

Para más información consultar la sección SETEdit.

El proyecto FPGA Libre utiliza el software SETEdit para la edición de código VHDL.


Asistentes del software de edición

Para potenciar las capacidades del software de edición, existen aplicaciones externas que pueden ayudar en el trabajo de edición. Una de estas aplicaciones es CTAGS o Exuberant CTAGS que ayuda en la tarea de búsqueda e inspección dentro del código fuente. Al momento de escribir este documento la versión oficial de Exuberant CTAGS soporta Verilog pero no VHDL. El proyecto FPGA Libre ha agregado soporte para VHDL en CTAGS.

SETEdit puede utilizar Exuberant CTAGS para facilitar la navegación de código.

Para más información consultar la sección Exuberant CTAGS.

Para editar código VHDL, SETEdit se utiliza con una versión de CTAGS con soporte para VHDL agregado por el proyecto FPGA Libre.

Otra herramienta útil es tpl2file que es una utilidad para extraer las plantillas de ejemplos VHDL que vienen con el ISE WebPack y colocarlas en archivos independientes dentro de una estructura de directorios.

Para más información consultar la sección tpl2file.


Simulación:

Herramienta de simulación

Se han evaluado varias alternativas teniendo siempre como objetivo el desarrollo en lenguaje VHDL para su aplicación principal en dispositivos FPGA. Dándole siempre prioridad a las alternativas bajo licencias de software libre u open source, se han evaluado las siguientes herramientas: SAVANT, FreeHDL, Alliance y GHDL. Debido a su amplio uso y a la capacidad de compilar sin problemas proyectos tales como el procesador LEON y el DLX se ha seleccionado el GHDL como herramienta principal de simulación. GHDL utiliza la tecnología del GCC, el compilador de software libre más utilizado.

Para más información consultar la sección GHDL.

El proyecto FPGA Libre utiliza el simulador GHDL.

Para los amantes del Verilog recomendamos visitar el sitio de Icarus Verilog.


Banco de pruebas

Para verificar el correcto desempeño de un core, es necesario aplicarle estímulos y observar su comportamiento. Para realizar esto se puede utilizar el mismo lenguaje VHDL. El código adicional que realiza esta tarea se llama testbench.

El proyecto FPGA Libre utiliza bancos de pruebas también escritos en VHDL.


Asistentes del banco de pruebas

Muchas veces la escritura de testbenches sencillos donde un patrón de entrada debe corresponderse con un patrón de salida puede resultar tediosa y monótona. Sólo para estos casos se ha creado la herramienta llamada natebege, que genera automáticamente un testbench, ingresándole los patrones de entrada y salida.

natebege es una herramienta muy básica y simple para automatizar la generación de bancos de prueba triviales.

Otras veces la información generada por el testbench es de gran volumen y análisis complejo. En estos casos se hace necesario recurrir a otras herramientas de software que procesen o analicen lo generado por el testbench. Algunas de las opciones posibles son programas en lenguaje C o scripts Perl, entre otros, que tomen la información generada por el testbench y la procesen.

El proyecto FPGA Libre utiliza herramientas escritas en lenguaje C y/o Perl para complementar los bancos de prueba.


Visualización de formas de onda

Los programas de simulación pueden generar archivos donde se vuelcan todas las formas de onda de la simulación. Actualmente dentro del proyecto se trabaja con los dos formatos soportados por el GHDL:

  • Formato VCD: Verilog Change Dump o también Value Change Dump. Este formato pensado originalmente para Verilog no soporta los tipos de VHDL.
  • Formato específico del GHDL: GHDL Waveform Format (GHW).

Los archivos en formato VCD pueden visualizarse con GTKWave y Dinotrace. Los archivos en GHDL GHW sólo pueden visualizarse utilizando GTKWave.

Para más información consultar la sección GTKWave y la sección Dinotrace.

El proyecto FPGA Libre utiliza GTKWave como visor de forma de ondas.


Asistentes para el proceso de simulación

La generación de los archivos necesarios para la simulación es un proceso sencillo que puede volverse complicado cuando se manejan varios archivos de descripciones y varias herramientas de asistencia. Para automatizar este tipo de tareas se utiliza el GNU Make.

Se recomienda la utilización de GNU Make para compilación y la generación de todos los archivos asociados a un proyecto.


Síntesis:

Herramienta de síntesis

Luego de pasar por el proceso de simulación, es necesario realizar la síntesis del diseño para su posterior grabación en la FPGA o en la memoria de configuración. Lamentablemente no conocemos herramientas de síntesis con licencias free software u open source para los fabricantes más populares. Los dos fabricantes más importantes de dispositivos FPGA brindan herramientas, cada uno para sus propios productos, de síntesis de uso gratuito. Por otro lado existen herramientas libres para las iCE40 de Lattice. Para más información consultar iCE40.

En los comienzos de nuestro trabajo con FPGAs hemos utilizado dispositivos de la empresa ALTERA con el software MAX+PLUS y luego Quartus. Esto nos planteó dos problemas principales: La utilización de entornos Windows (no existía alternativa gratuita para sistemas operativos GNU/Linux) y la imposibilidad de automatizar el proceso de síntesis con línea de comandos sin utilizar la IDE propia del programa. Nota: Quartus II actualmente soluciona estos problemas.

Por estos motivos, y viendo que otros grupos de trabajo con objetivos similares a los nuestros utilizaban los dispositivos de Xilinx, abandonamos el uso de los dispositivos de ALTERA. El proyecto FPGA Libre está abierto a cualquier tecnología y dispositivo FPGA, siempre que pueda lograrse su utilización bajo entornos de software libre, como es el caso de GNU/Linux. La herramienta de síntesis ISE WebPack de Xilinx es de uso gratuito (no libre), tiene una versión para sistemas GNU/Linux y permite su utilización con línea de comandos, lo que facilita la automatización del proceso con herramientas como GNU Make.

Para más información consultar la sección ISE.

Hasta el momento se ha utilizado la herramienta de síntesis ISE WebPack para los dispositivos de Xilinx.

Actualmente también utilizamos iCEcube2 con FPGAs iCE40 de Lattice.

Las únicas herramientas libres para desarrollo con FPGAs sólo soportan las iCE40 y el lenguaje Verilog. Son la mejor opción para un flujo verdaderamente libre.


Hardware y FPGA:

Selección del dispositivo FPGA

Debido a la utilización del ISE WebPack la selección del dispositivo para nuestros trabajos se restringió a los dispositivos de Xilinx (Spartan II, Spartan 3/3A/3E, Spartan 6, Virtex 4/5/6). En la actualidad estamos incluyendo dispositivos iCE40 de Lattice.


Hardware de desarrollo

Para desarrollar una aplicación, además del chip FPGA es necesaria una electrónica de soporte: Circuito impreso, circuitos de alimentación, memoria, conectores, etc.

La forma más fácil de abordar este tema es comprando algún kit de desarrollo para FPGA (Plaqueta con FPGA). Nuestro primer kit de desarrollo comprado es una placa Memec Spartan II LC (hoy obsoleto). En la actualidad Digilent es un buen proveedor de kits de desarrollo.

Pasadas las etapas iniciales de desarrollo, es necesario encarar el diseño, la construcción y ensamblaje de una placa con FPGA. Como parte del proceso de aprendizaje se planteó el diseño de una placa de similares características a la utilizada, realizada con herramientas EDA de software libre y con toda la documentación y los archivos de diseño de libre acceso. De allí nació la S2Proto. Más tarde pasamos a la tecnología BGA y desarrollamos la S3Proto-Mini.

Actualmente hemos desarrollado una placa con FPGAs iCE40 del Lattice denominada Kéfir I.


Hardware para grabación de la configuración

Los dispositivos FPGA pueden poseer varios mecanismos para su configuración. Uno de los mecanismos más usados es el estándar IEEE 1149.1 del JTAG (Joint Test Action Group). De esta forma un hardware de interfase para configuración JTAG será útil para más de un fabricante de FPGA y memorias de configuración.

Originalmente nos basamos en varias notas de aplicación de Xilinx y en circuitos publicados en la web para desarrollar una interfase JTAG de muy bajo costo que se conecta al puerto paralelo. El circuito fue desarrollado con una herramienta EDA de software libre llamada KiCad. Todos los archivos de diseño y la documentación asociada están disponibles y son de libre uso. Para más información: DLC5

El problema con este cable es que las interfaces paralelo se volvieron poco frecuentes, y por lo tanto se necesitaba utilizar adaptadores. Por esta razón migramos a cables USB. Dentro de los cables USB los basados en el FTDI FT2232H ofrecen una amplia compatibilidad con el software disponible. Existen varios proyectos de hardware abierto basado en este chip, nosotros originalmente utilizamos el Opendous FT2232H JTAG, pero luego desarrollamos uno más flexible: MILK.

Se dispone de una interfase JTAG para puerto paralelo, y otra USB, que permiten configurar los dispositivos FPGA y las memorias de configuración. Los archivos de diseño de estos hardware están desarrollados con herramientas EDA de software libre.


Software para grabación de la configuración

La transferencia de la configuración al hardware involucra dos tipos de conocimientos. Por un lado el protocolo de transferencia, que en nuestro caso es el JTAG, y por otro lado el conocimiento de las características específicas del dispositivo a usar.

La herramienta iMPACT de Xilinx resuelve ambos aspectos pero tiene una desventaja muy importante, su versión para GNU/Linux requiere del uso de una distribución en particular (Red Hat Enterpise) y de módulos del kernel propietarios. Sin embargo Michael Gernoth creó una ingeniosa biblioteca dinámica que permite evitar instalar dichos módulos.

Utilizando la biblioteca antes mencionada y un grupo de scripts Perl es posible transferir la configuración de forma simple y automatizada. Estas herramientas se encuentran en el paquete iMPACT Helper. Nota: el paquete soporta ambos cables previamente mencionados.

En el caso de las iCE40 la configuración se realiza utilizando el protocolo SPI. Las herramientas de Lattice soportan cualquier cable USB basado en el FT2232H.


webmaster.

Valid HTML 4.01! Valid CSS! GIMP Any browser! SourceForge.net Logo

Copyright © 2005-2017 proyecto FPGALibre.
Generated using CAL v0.2.0 and ARENA v0.1.0 on jue ago 17 08:46:06 -03 2017