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

Síntesis

Introducción:

Este es el proceso por el cual convertimos nuestro HDL en una descripción de bajo nivel que permitirá realizar nuestro hardware. En el caso de las FPGA esto es simplemente la configuración de las macroceladas y recursos de interconexión de la misma (entre otros).


ISE:

ISE es el entorno de desarrollo para FPGAs de Xilinx. Es software privativo, pero posee una versión gratuita.

Lamentablemente no conocemos ningún Software Libre que permita desarrollar con FPGAs de Xilinx. Aunque si existe Software Libre que permite trabajar con FPGAs de la línea iCE40 de Lattice, la información relacionada con esas herramientas se encuentra en la página dedicada a las iCE40. Nota: Actualmente existen esfuerzos en progreso para soportar FPGAs de Xilinx en dichas herramientas.

La línea 7 de Xilinx se encuentra correctamente soportada por la herramienta Vivado. El soporte para líneas anteriores se encuentra precisamente en ISE (son siglas, por lo que se pronuncia ai-es-i y no ais)

ISE corre tanto en Windows como en Linux. El ISE incluye herramientas de línea de comando que nos permiten automatizar este proceso. Nota: no todos los dispositivos estan soportados. La serie Spartan original (no la II y 3) y la serie 4000 no estan soportadas. Tampoco soporta algunos dispositivos muy grandes. Estos últimos son soportados por la versión full del ISE.

Instalación de los ISE WebPack modernos en Debian GNU/Linux:
Ya desde la versión 8 Xilinx nos ofrece una versión verdaderamente nativa del ISE para Linux. Su instalación es muy simple, la única recomendación importante es que si tenemos algún problema para correr el instalador probemos cambiar /bin/sh. En sistemas Debian y sus derivados (como Ubuntu) es normal que /bin/sh sea un link a /bin/dash, este es un shell liviano, pero que no posee toda la funcionalidad del bash. En varias versiones del instalador de ISE (y también del Quartus II de ALTERA) notamos que el instalador es un script que sólo funciona si /bin/sh es bash. Si eso no se cumple en nuestro sistema es probable que no podamos correr el instalador. Para solucionarlo podemos hacer algo como esto:

usuario@ubuntu$ sudo sh -c "rm /bin/sh; ln -s /bin/bash /bin/sh"

El resto de las recomendaciones para la versión 10.1 aplican a versiones modernas de ISE.

Instalación de ISE WebPack 10.1 en Debian GNU/Linux Etch:
Al igual que en la versión 8.2 se trata de una aplicación nativa Linux que puede instalarse sin problemas en Debian. No es necesario instalar los Cable drivers para hacer uso del iMPACT (iMPACT Helper).
Debido a que fue instalado sobre una instalación anterior seguimos manteniendo las instrucciones necesarias para versiones más viejas.

Instalación del ISE WebPack 8.2 en Debian GNU/Linux Sarge:
A diferencia de versiones anteriores esta versión está mucho mejor adaptada a Linux. En lugar de utilizar la Wind/U los programas usan directamente Qt. Si bien también está pensado para instalar en Red Hat no hay problema alguno en instalarlo en Debian. La instalación se llevó acabo en una máquina donde ya estaba instalada la versión 7 por lo que mantenemos las instrucciones de instalación para la versión 7 en caso de que sirvan de ayuda.
El único detalle de la instalación es que los módulos del kernel no funcionan con Debian y por lo tanto el Impact no posee toda su funcionalidad. Nosotros utilizamos JBit y por lo tanto esto no nos afecta. Cabe destacar que para operaciones complicadas es posible generar un SFV con el Impact y luego transferirlo con GNU jtag.

Instalación del ISE WebPack 7 en Debian GNU/Linux Sarge:
Estas son algunas recomendaciones y/o advertencias para su instalación. Hay que tener en cuenta que el ISE para Linux no es más que el ISE para Windows compilado usando una biblioteca comercial (bastante pobre por cierto) llamada Wind/U. Por lo que es una especie de parche y no una verdadera versión para Linux. Para colmo el programa fue pensado únicamente para Red Hat.

  • El paquete probado es el ISE WebPack 7.1i
  • Hay que tener en cuenta que el paquete una vez instalado ocupa unos 1,2 GB y que se necesita aun más espacio durante la instalación. También hay que tener en cuenta que el 7.1i son 379 MB y la actualización otros 319 MB por lo que deberemos descargar unos 698 MB.
  • Es necesario instalar libmotif. Esto es el paquete libmotif3 que está en la sección non-free.
  • Es necesario instalar el paquete libcurl2_7.9.5-1_i386.deb de Woody.
  • Para el correcto funcionamiento del Wind/U es necesario que el portmap este instalado. Este programa es una tradicional fuente de inseguridad. Por lo que si estamos instalándolo sólo para esto recomendamos agregar una línea que diga portmap: 127.0.0.1 al archivo /etc/hosts.allow. Con esto estaremos restringiendo el uso del portmap sólo a programas locales. Esto no es seguro, pero es mejor que nada. Lamentablemente los programadores de Wind/U no encontraron mejor manera de hacer funcionar su demonio de registry que en mi opinión debería usar sockets en el filesystem local. Nota: Wind/U no se conecta a 127.0.0.1 sino que a lo que sea el hostname por esta razón no es posible iniciar el portmap con -i 127.0.0.1 que sería un poquito más seguro.
  • Por alguna razón desconocida las aplicaciones Wind/U son incapaces de parsear correctamente la variable DISPLAY. Por lo que es necesario alterarla de la siguiente manera: Si tenemos DISPLAY=":0.0" cambiarlo por DISPLAY=":0". Esto lo podemos agregar al script settings.sh del ISE.
    Una opción interesante es usar el siguiente código:
    export DISPLAY=`perl -e '$a=@ENV{"DISPLAY"}; $a=~s/\.(.*)//; print $a;'`

  • Hay que tener en cuenta que luego de que corramos cualquiera de las aplicaciones del ISE esta iniciará el demonio del Wind/U que no terminará al finalizar la aplicación. Si deseamos eliminarlo habrá que matarlo explicitamente.
  • Antes de correr cualquier aplicación del ISE es necesario correr el script settings.sh que setea las variables de entorno necesarias.
  • El ISE incluye módulos para el kernel de Red Hat y supone que el sistema es un Red Hat. Esto es necesario sólo para grabar el bitstream usando el impact. Hay alternativas mucho más livianas y automatizables por lo que nuestra recomendación es evitar todo esto. Lamentablemente el instalador del ISE no permite no instalar estas cosas por lo que recomendamos instalarlo usando un usario común y no root. El instalador nos va informar varios errores sobre el hecho de que no puede alterar nuestro sistema.
  • Para instalar la actualización a 7.1.3i Es necesario descomprimir el .zip y ejecutar el comando setup. Pero previamente tenemos que setear el entorno tal como si fueramos a correr cualquier otra herramienta del ISE.
  • Instrucciones detalladas que muestran cada uno de los diálogos que aparecen durante la instalación se pueden encontrar el en site de IeaRobotics. Otras instrucciones en inglés más simplificadas se pueden encontrar en el site de Wolfteck

No es extraño que el proceso sea un tanto complicado ya que en realidad se trata de instalar un programa pensado y concebido para Windows en Linux.

Uso de las herramientas de línea de comandos:
Es probable que muchos piensen ¿Para qué si tengo el entorno gráfico completo?, la respuesta es simple: esto nos ahorrará cantidades enormes de tiempo y nos permitirá integrar la síntesis a nuestro flujo de diseño sin estorbos.

Para simplificar el proceso que explicamos a continuación hemos desarrollado un conjunto de herramientas llamadas Xil Tools.

A continuación se explica el procedimiento que realizan los Makefiles que que nosotros usamos. Suponemos un proyecto llamado test
xst -intstyle ise -ifn test.xst -ofn test.syr
Esto llama al programa de síntesis (xst) indicándole que lea la configuración desde el archivo test.xst y genere un reporte en test.syr.
El archivo test.xst podría contener algo como esto:

set -tmpdir tmp
set -xsthdpdir ./xst
run
-ifn test.prj
-ifmt mixed
-ofn test
-ofmt NGC
-p xc2s100-5-pq208
-top cpu_test
-opt_mode Speed
-opt_level 2
-iuc NO
-uc test.xcf
-keep_hierarchy NO
-glob_opt AllClockNets
-rtlview Yes
-read_cores YES
-write_timing_constraints YES
-cross_clock_analysis NO
-hierarchy_separator /
-bus_delimiter <>
-case maintain
-slice_utilization_ratio 100
-verilog2001 YES
-fsm_extract YES
-fsm_encoding Auto
-fsm_style lut
-ram_extract Yes
-ram_style Auto
-rom_extract Yes
-rom_style Auto
-mux_extract YES
-mux_style Auto
-decoder_extract YES
-priority_extract YES
-shreg_extract YES
-shift_extract YES
-xor_collapse YES
-resource_sharing YES
-mult_style lut
-iobuf YES
-max_fanout 100
-bufg 4
-register_duplication YES
-equivalent_register_removal YES
-register_balancing No
-slice_packing YES
-optimize_primitives NO
-tristate2logic NO
-iob auto
-slice_utilization_ratio_maxmargin 5
  

No vamos a entrar en detalle de que es lo que significa cada opción, eso lo podemos encontrar en los manuales del xst (doc/usenglish/books/docs/xst de la instalación). Las opciones más relevantes son:

  • set -tmpdir tmp indica que hemos creado un directorio llamado tmp donde se guardarán los archivos intermedios.
  • set -xsthdpdir ./xst indica que hemos creado un directorio llamado xst donde se guardarán los archivos de caché del xst.
  • -ifn test.prj indica que la lista de fuentes que integran nuestro proyecto se encuentra en el archivo test.prj.
  • -ofn test indica que se use test como nombre base para los archivos generados.
  • -p xc2s100-5-pq208 indica cual es nuestra FPGA en este caso una Spartan II.
  • -top cpu_test indica cual es la entidad top level a sintetizar.
  • -uc test.xcf indica que hemos creado un archivo de restricciones (constraints) llamado test.xcf, si no lo hemos hecho hay que omitir esta línea.

ngdbuild test
Este paso es necesario para cambiar el formato generado por xst a uno usable por el comando map. map -o map.ncd test
Esto realiza un mapeo de lo sintetizado a los recursos disponibles en nuestra FPGA
par -w -ol high map.ncd test.ncd
Se encarga de hacer el proceso de place & route de nuestro diseño. Es durante este proceso que verdaderamente sabremos cuantos recursos hemos usado.
Para generar el bitstream para nuestra placa (que posee una memoria para bajarlo) usamos:
bitgen -g startupclk:Cclk -w test test.bit
Si deseamos obtener un reporte de los tiempos indicados por los constraints podemos usar: trce test map.

Archivo .prj:
En este archivo le indicamos al xst que fuentes componen nuestro proyecto. Por cada fuente debemos agregar:

  vhdl work nombre.vhdl
  


Ejemplo para ISE:

Para ilustrar el uso del ISE usando la línea de comandos hemos creado un pequeño ejemplo que hace destellar un led de la placa S2Proto. El ejemplo puede adaptarse a otras FPGAs sin mucho esfuerzo (si alguien lo hace por favor contribuya los cambios para que los podamos incluir).

El ejemplo asume que tenemos ISE instalado, disponemos de iMPACT Helper y de ResumenXil.

Para descargar el ejemplo: Ejemplo para el ISE.


Resumen de síntesis:

La información entregada por las herramientas de síntesis es muy grande y en ocasiones sólo queremos saber los detalles más relevantes del resultado, tales como área insumida y máxima frecuencia de trabajo. Este script permite extraer dicha información y grabarla en un archivo de texto donde es posible llevar un histórico de nuestro proyecto.

Un ejemplo de uso de este script se encuentra en Ejemplo para el ISE.

Para descargar script: ResumenXil

Versión Debian GNU/Linux: ResumenXil


Xil Tools:

Las Xil Tools son un conjunto de herramientas que nos permiten trabajar sin necesidad de correr ISE (o iCEcube2 en el caso de Lattice). Estas herramientas permiten generar archivos tipo Makefile que se encargan de realizar la síntesis de nuestro circuito. Por supuesto que es necesario instalar ISE/iCEcube2.

Los dos componentes principales son:

  1. xil_project_wz.pl Es una herramienta gráfica que nos permite ahorrarnos un monton de problemas relacionados con seleccionar la FPGA de nuestro kit y demás. Esta herramienta basicamente sirve para generar archivos de proyecto con extensión .xilprj. También la podemos usar para navegar los errores y warnings generados por las herramientas de síntesis. Para entender un poco mejor como funciona esta herramienta podemos ver el siguiente ejemplo: Ejemplo de botones capacitivos con xil_project_wz.pl (paso a paso).
  2. xil_project.pl Es una herramienta de línea de comandos que permite generar un archivo Makefile a partir de un archivo .xilprj. Este último puede haber sido creado usando xil_project_wz.pl o simplemente usando un editor de texto. Para entender un poco mejor como funciona esta herramienta podemos ver el siguiente ejemplo: Ejemplo de botones capacitivos con xil_project.pl.

Actualmente sólo soporta el ISE para Xilinx y el iCEcube2 para Lattice.

Las únicas placas actualmente soportadas son:

  • Avnet Mini Spartan II evaluation board (xc2s150-5-pq208)
  • Avnet Spartan 3 PCI Evaluation Kit (xc3s1500-fg456)
  • Avnet Spartan 3A Evaluation Kit (xc3s400aft256-4)
  • Avnet Virtex 4 Evaluation Board (xc4vlx25-ff668)
  • Gaisler Research PCI-XC5V-LX110 (xc5vlx110-ff1153-2)
  • Gaisler Research XC3S-1500 (xc3s1500-fg456-4)
  • Gaisler Research Spartan 6 LX75 (xc6slx75-fgg484-2)
  • iCEblink40-HX1K Evaluation Kit (iCE40HX1K-VQ100)
  • iCEblink40-HX8K Evaluation Kit (fake) (iCE40HX8K-CB132)
  • iCEstick Evaluation Kit (iCE40HX1K-TQ144)
  • Kéfir I (1K) (iCE40HX1K-TQ144)
  • Kéfir I (4K) (iCE40HX4K-TQ144)
  • S2Proto Gamma (r1.2) [Sp. II 100-6] (xc2s100-pq208-6)
  • S2Proto v2 (r1.34) [Spartan II 150] (xc2s150-pq208-5)
  • S2Proto v2 (r1.34) [Spartan II 150] (xc2s150-pq208-5)
  • S2Proto v2 (r1.34) [Spartan II 150-6] (xc2s150-pq208-6)
  • S2Proto v3 (r1.45) [Spartan II 150-6] (xc2s150-pq208-6)
  • S2Proto v4 (r1.48) [Spartan II 200] (xc2s200-pq208)
  • S3Proto Mini (xc3s1600e-fg320-4)
  • Xilinx Virtex 6 Evaluation Board (XC6VLX240T-1-FF1156)
  • Xilinx Spartan 6 SP601 Evaluation Kit (xc6slx16-2-csg324)

No es muy complejo agregar nuevas placas.

El manual en formato HTML se puede navegar aquí.

Estas herramientas necesitan de otras herramientas que son parte de este proyecto:

  • Para poder configurar la FPGA es necesario instalar iMPACT Helper
  • Para poder utilizar la placa Avnet Spartan 3A Evaluation Kit es necesario instalar ASTriAEKiPro, ver aquí
  • Para poder navegar los errores de síntesis es necesario instalar SETEdit

Para sistemas operativos Debian GNU/Linux y derivados lo más simple es agregar el repositorio de paquetes de este proyecto y luego instalar el paquete xiltools. El procedimiento para agregar el repositorio se explica acá. Luego podemos usar el gestor de paquetes que más nos guste. Un ejemplo desde la línea de comandos sería:

usuario@ubuntu$ sudo apt-get install xiltools

Para descargar los fuentes: Xil Tools 1.4.2

Versión Debian GNU/Linux: Xil Tools 1.4.2


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 vie jun 23 09:01:59 -03 2017