Xilinx
ISE, Xilinx EDK para XUP-V2Pro en Linux 300409 150610 310512 |
Herramientas
|
La tarjeta de desarrollo XUPV2P (Virtex 2 Pro) La tarjeta de desarrollo XUPV2P ...
La documentación de la tarjeta XUPV2P ... |
Requerimeintos de linux Apesar de que las herramientas de Xilinx
son prácticamente autocontenidas, siempre será de
utilidad contar con las herramientas básicas de desarrollo:
#apt-get install gcc #apt-get install g++ #apt-get install vim vim-full vim-gtk vim-gui-common Debido a que la mayoría de las herramientas de Xilinx fueron desarrolladas en C++, es necesario instalar las bibliotecas con clases desarrolladas y compiladas con versiones de g++ en versiones 3. La biblioteca que lleva a cabo el renombramiento de las clases se conoce como The GNU Standard C++ Library V3, en Debian se instala de la siguiente forma: #apt-get install libstdc++5 para fedora: #yum install libstdc++5 o de manera equivalente: #yum install compat-libstdc++-33 |
Instalación del ISE 8.2i La instalación del ISE se lleva a
cabo al ejecutar el script de instalación
contenidos en los DVD's:
$<DVD-ROM-ISE>/setup Es posible que la configuración por defecto del HAL, no permita la ejecución del script desde la ruta creada de forma dinámica, en ese caso se podría detener el HAL y montar manualmente el DVD. En caso de contar con las imágenes ISO, se deberán montar la imágen para acceder a los archivos. Para montar algún dispositivo o imágen se debe contar con privilegios de super-usuario: #mount -o loop imagenISO-ISE.iso /mnt Ahora la ruta de instalación será: $/mnt/setup En sistemas de escritorio personalizado un usuario podría hacer su instalación del ISE al invocar el script de instalación, la instalación creará un directorio en su home llamado Xilinx. Lo anterior no es recomendable para servidores multiusuario, ya que el software se instalaría para cada usuario. Será el administrador del sistema el encargado de la instalación y el otorgamiento de privilegios. Seleccionamos solo los módulos que necesitamos: Virtex2/Virtex2P/Spartan3/Spartan3E Design Environment Tools Cable Drivers Standalone Programming tools Para la instalación de los "Drivers Cables" (win drivers), es necesario contar permisos de superusuario, sin embargo, nosotros utilizaremos otros módulos para la programación del dispositivo. |
Instalación del EDK 8.2i La instalación del EDK es muy
similar al del ISE:
$<DVD-ROM-EDK>/setup En este caso se creará por defecto el directorio EDK el home del usuario. Algunas herramientas del EDK, requieren de la biblioteca dinámica: libdb-4.1.so, la cual contiene módulos para el acceso a bases de datosde desde C++ y se encuntra en /usr/lib. Es posible que en una instalación típica de Debian no se instalen dichas bibliotecas. En ese caso instalamos la más reciente y creamos un enlace simbólico #apt-get install libdb4.6++-dev #ln -s /usr/lib/libdb-4.6.so /usr/lib/libdb-4.1.so Para desmontar algún dispositivo o imágen se ejecuta el siguiente comando: #umount /mnt |
Ejecución del ISE y EDK Para
lanzar tanto ISE como el EDK, será necesario crear variables
de ambiente para la relación de sus aplicaciones. Existe un
script para ello en ambas herramientas:
$Xilinx/settings.sh $EDK/settings.sh Una vez creadas las variables de ambiente, se lanza las aplicaciones, al invocar la herramienta adecuada, por ejemplo, para lanzar Xilinx Plataform Studio del EDK: $EDK/bin/lin/xps o simplemente: $xps En el caso del ISE ejecutamos: $Xilinx/bin/lin/ise |
Simulador del ISE La suite de software de Xilinx
incluye un simulador llamado ISE
Simulator. El simulador permite la simulación funcional
del circuito y cuenta con una línea de comando para recargar
proyectos, inicializar variables, asignar tiempos, etc. Por ejemplo,
para solicitar ayuda desde la línea de comandos:
%help Un error muy común en versiones anteriores al 11.2i del ISE es que al lanzar el simulador generaba el siguiente error: "ERROR:Simulator:222 - Generated C++ compilation was unsuccessful" Lo anterior es debido a que Xilinx integró en la instalación del ISE herramientas de GNU, como el compilador y el enlazador. En algunos casos las herramientas de Xilinx deben de enlazar módulos que están en bibliotecas (estáticas o dinámicas) del sistema. Para poder llevar a cabo el enlazado de módulos que están en bibliotecas externas se deberá de hacer con el enlazador que está instalado en el sistema y no el que está contenido en la instalación del ISE. La manera más sencilla es que evitar los enlazadores del ISE, para ello simplemente le cambiamos el nombre: $cd <ISE-HOME>/gnu/gcc/3.2.3/lin/i686-pc-linux-gnu/bin $mv ld ld.old $cd <ISE-HOME>/gnu/gcc/3.2.3/lin/bin $mv ld ld.old Definitivamente un simulador más profesional es el MODELSIM, sin embargo es software propietario, cuando lo compre, les digo cómo funciona en linux =-) |
Xilinx JTAG en linux El puerto de configuración Joint Test Action Group (JTAG) es utilizado por varias herremientas de Xilinx, tanto para configuarar y programar dispositivos (Impact) como para hacer depuración en tiempo de ejecución (Chipscope y XMD) de hardware programado en los dispositivos. El dispositivo Virtex 2 Pro (XC2VP30) de la tarjeta XUP-V2Pro, cuenta con un puerto JTAG tanto para la configración y depuración de hardware como para programación de los procesadores PowerPC 405 incrustados en el mismo. El acceso se puede llevar a cabo por medio del puerto paralelo (Parallel Cable III, PCIV y PCIV modes) o por el puerto USB. Inicialmente para tener acceso al JTAG del dispositivo desde linux, por medio del puerto paralelo o el puerto USB, se utilizaba un módulo de kernel llamado Jungo. Para los kernels actuales (>2.6.18) se ha desarrollado la biblioteca libusb, la cual emula el módulo en el espacio de direcciones del usuario, permitiendo el acceso de las herramientas de Xilinx al JTAG de los dispositivos. Las limitaciones es la velocidad de operación del JTAG...: Se pueden bajar las fuentes, configurar el Makefile, compilar e instalar: $tar jxvf libusb-1.0.0.tar.bz2 $cd libusb-1.0.0 $./configure $make #make install En distribuciones de linux para desarrollares (Debian claro!) esta biblioteca es el caballito de batalla para el creación de drivers de sistema con acceso USB, por tal razón ya está incluida en sus repositorios. #apt-get install libusb-dev para fedora: #yum install libusb-devel libusb-static libusb1-devel libusb1-devel-doc libusb1-static Para acceder por medio del puerto USB, se utiliza la biblioteca usb-driver, la cual también puede trabajar con el puerto paralelo. Bastará con bajar las fuentes, compilar y crear una variable de ambiente para que las herramientas de Xilinx la puedan utilizar: $tar zxvf usb-driver-HEAD.tar.gz $cd usb-driver $make $export LD_PRELOAD=/path/to/libusb-driver.so $impact Para utilizar el dispositivo como un usuario ordinario, creamos el archivo en /etc/udev/rules.d/libusb-driver.rules, con la siguiente información: ACTION=="add", BUS=="usb", ATTRS{idVendor}=="03fd", MODE="666" Reiniciamos el demonio de dispositivos #/etc/init.d/udev restart Conectamos la tarjeta XUPV2Pro al sistema USB y comprobamos que exista la entrada: $/sbin/lsusb ... BUS 007 Device 003: ID 03fd:0008 Xilinx, Inc. ... Una variación en los dígitos de identificación del vendor:product, indicará una descarga inadecuada del firmware, lo que generará problemas con las aplicaciones para configurar el FPGA, en específico el impact. Un error muy común es que las tarjetas de Xilinx no identifican el firmware de manera inicial, entonces se deberá hacer de manera explicita por medio de una línea de comando y una posterior edición de los archivos involucrados. Problemas con la carga del firmware Todo lo involucrado con el reconocimiento del dispositivo, la asignación de una ruta al dispositivo y la carga del firmware adecuado, lo lleva a cabo la aplicación udev, sucesor de hotplug. udev funciona de la siguiente forma: al insertar un dispositivo al sistema por medio de un puerto USB, el kernel alerta al demonio udevd de que un nuevo dispositivo ha sido detectado en uno de los concentradores de puertos USB, en nuestro ejemplo anterior es el bus 007 y el dispositivo 003. udevd identifica al dispositivo asignandole un nodo de entrada, el cual consiste en número mayor (189) y un número menor (653) y un número de dispositivo. Además udevd le asigna una entrada en el directorio /dev. Podemos ver los números asignados si listamos: $ls -al /dev/bus/usb/007 ... crw-rw-rw- 1 root root 189,653 2010-04-09 12:49 003 ... En este punto, udevd buscará si existe alguna acción o regla específica con el dispositivo y la llevará a cabo. Como ya se comentó, los archivos de reglas se encuantran en: /etc/udev/rules.d/. Es común encontrar reglas para cambiar el modo de acceso y cargar un firmware específico. La instalación del software de Xilinx tiene sus archivos de reglas y los archivos de firmware en: <XILINX_HOME>/bin/lin/ o también en: <XILINX_HOME>/bin/lin/install_script/install_drivers/linux_drivers/pcusb/ Algunas versiones del ISE requiere que se copien los archivos de reglas y firmware en las rutas adecuadas y otras utilizan scripts para hacerlo y claro, que las rutas pueden cambiar para cada distribución de linux. Por ejemplo, para la versión 10.1i del ISE, solo es necesario ejecutar el script que se encuentra en <XILINX_HOME>/10.1/ISE/bin/lin : $source ./setup_pcusb El cual es un script que compia el archivo de reglas y los archivos de firmware a las rutas preestablecidas. Los archivos de reglas son archivos de texto sin formato que puede editarse, por ejemplo el archivo xusbdfw o xusbdfw.rules se puede ver así: SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="0008", MODE="666", BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="0007", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusbdfwu.hex -D $TEMPNODE" BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="0009", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_xup.hex -D $TEMPNODE" BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="000d", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_emb.hex -D $TEMPNODE" BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="000f", RUN+="/sbin/fxload -v -t fx2 -I Puede notarse que se utiliza el comando fxload para la carga del firmware adecuado. Es posible que podamos cargar el firmware que necesitemos al ejecutar el comando con los parámetros adecuados. Por ejemplo, tomando los valores anteriores: #/sbin/fxload -v -t fx2 -I /usr/share/usb/xusbdfwu.hex \ -D /dev/bus/usb/007/003 Con la información anterior se puede editar los archivos de reglas para que se pueda detectar y configurar de manera automática la tarjeta de desarrollo. |
Crear un sistema mínimo (en construcción) Para crear un sistema mínimo en la XUPV2P: CPU, memoria RAM y sistema de buses; se crean los archivos: system.mhs, system.mss, system.ucf...: Curso intertrimestral: Sesión 1: Introducción al EDK Sesión 2: sistema mínimo en xupv2p Sesión 3: IP de catalogo Sesión 4: Agregando mi IP Propuesta de: Temas Selectos de Sistemas Digitales (para alumnos de electrónica y computación) Desarrollo de sistemas empotrados basados en FPGAs, codiseño hardware/software Creación del hardware: $plangen -p xc2vp30ff896 -lang vhdl \ /home/oscar/edk_seminario/lib system.mhs $cd synthesis $./synthesis.sh $xflow -wd implementation -p xc2vp30ff896-7 -implement \ xflow.opt system.ngc $ngdbuild -p xc2vp30ff896-7 -nt timestamp -bm system.bmm $map -o system_map.ncd -pr b system.ngd system.pcf $par -w -ol high system_map.ncd system.ncd system.pcf $trce -e 3 -xml system.twx system.ncd system.pcf $cd implementation $bitgen -w -f bitgen.ut system Creación del software: $libgen -mhs system.mhs -p xc2vp30ff896-7 \ -lp /home/oscar/edk_seminario/lib system.mss $gmake Configuración del dispositivo: |
make y gmake En algunas distribuciones el comando make también es nombrado como gmake. Y es simplemente para diferenciarlos de otros compiladores, pero de nuevo, la comunidad de Debian es medio radical en el uso de nombres y licencias y para ellos existe solo un nombre. #ln -s /usr/bin/gmake /usr/bin/make |
USB-RS232 Linux deberá de reconocer el adaptador de USB a RS232: $/sbin/lsusb ... BUS 009 Device 002: ID 4348:5523 WinChipHead USB->RS232 adapter... ... Linux creará un dispositivo el
cual deberá ser asociado con mknode
a la nueva entrada. /dev/ttS* o /dev/ttyUSB* |
Minicom Con esta aplicación podremos conectarnos por el puerto serie (DB9) a un switch, router o a la terminal RS232 de la tarjeta XUP. #apt-get install minicom Minicom está configurado por defecto para conectarse a un dispositivo /dev/ttS1 o tal vez a /dev/modem. En nuestro caso el dispositivo al que desamos acceder es /dev/ttyUSB0, entonces será necesario configurarlo: #minicom -s tomamos las opciones: Serial port setup y cambiamos el Serial device. También se puede crear un enlace simbólico e iniciar el minicom: #ln -s /dev/ttyUSB0 /dev/modem #minicom Para configuararlo: CTRL+A y después Z. La opción P permite cambiar la configuración de acceso, por ejemplo C: 9600-8-N-1. |
GTKTerm Otra terminal para el RS232 es gtkterm, la cual trabaja sobre las X utilizando las capas de GTK. Su configuración y funcionamiento son de forma muy similar al minicom, incluso se parece más a la hypertérminal de windogs. #apt-get install gtkterm |