Published: 27. 7. 2008   Category: GNU/Linux

Instalace WebPack ISE v prostředí GNU/Linux

Instalace proběhla na i386, jádro 2.6.15-1.1830_FC4, distribuce Fedora Core 4.

Nové: Instalace na i386, jádro 2.6.23.1-49.fc8, distribuce Fedora Core 8.
Změny: v počítači mi zůstala verze 8.2i I.34, bohužel s novým jádrem přestal fungovat WinDriver, naštěstí se objevila knihovna s názvem libusb-driver, která funguje v uživatelském prostoru a WinDriver není požadován.

Instalace WebPack ISE 8.1i

Instalace vyžaduje dostatek místa na disku, kde se nachází /tmp. Instalovat jako uživatel root. Instalátor běží pod X11, může být nutné například nastavit pro roota $DISPLAY a podobně. Jinak je instalace klikací.

Instalace skončila hláškou:

Error: Cannot run process /usr/local/Xilinx/.xilinx/install_driverscript

Tento skript obsahuje příkazy pro zavedení modulů do jádra, jeho ruční vyvolání skončí hláškou:

insmod: error inserting '/lib/modules/misc/windrvr6.o': -1 Invalid module format

Problém je v tom, že dodávaný předkompilovaný jaderný modul je pro jádro řady 2.4.x v distribuci Red Hat Linux a jinde je nepoužitelný... Pokud chceme v ISE i obvody programovat je nutné vytvořit nový modul, ale o tom později.

Spuštění vývojového prostředí

Skript pro puštění ISE s potřebným nastavením proměnných prostředí:

#!/bin/sh

# Environment variables
#
XILINX=/usr/local/Xilinx
PLATFORM=lin
LMC_HOME=$XILINX/smartmodel/$PLATFORM/installed_lin
PATH=$PATH:$XILINX/bin/$PLATFORM
LD_LIBRARY_PATH=$XILINX/bin/$PLATFORM:/usr/X11R6/lib
NPX_PLUGIN_PATH=$XILINX/java/$PLATFORM/jre/plugin/i386/ns4
DISPLAY=:0
export PRINTER=ml170

# Start ISE
#
$XILINX/bin/$PLATFORM/ise

Problém s během PACE

PACE slouží k nastavení I/O pinů obvodu, v ISE se spouští pomocí User Constrains / Assign Package Pins. Na rozdíl od ostatních aplikací používá PACE pro GUI knihovnu Motif. Je možné, že se po zavolání nespustí a ani se neobjeví žádná chybová hláška.

Po spuštění $XILINX/bin/$PLATFORM/pace z konzole, umře s hláškou:

Wind/U X-toolkit Error: wuDisplay: Can't open display

V tomto případě pomůže nastavit proměnnou DISPLAY:

export DISPLAY=:0

[ Rady na webu Xilinx ]

Navíc oproti Windows verzi se muselo označení I/O pinů zadávat s malými písmeny.

Programování obvodu přes LPT

Instalace ovladače kabelů

Programování pomocí podporovaného kabelu vyžaduje mít v jádře moduly windrv6 a xpc4drv.

Paralelní kabel JTAG3

Schéma kabelu s několika oddělovači sběrnice 74HC125. Funguje dobře ubastlený i ve stylu vrabčího hnízda.

1a. Instalace windrv6

Nefunguje pro jádro vyšší než 2.6.18, nahrazuje jej libusb-driver!.

Modul windrv6 slouží k jednoduššímu přenosu Windows ovladačů do Linuxu. Po zaregistrování je dostupný na stránkách www.jungo.com.

  1. Stáhnout: http://www.jungo.com/download/WD801LN.tgz.
  2. Rozbalit: tar xvzf WD801LN.tgz
  3. Zkompilovat: make
  4. Modul se nachází v adresáři WinDriver/redist/<verze jádra>
  5. Zavést do jádra: insmod ./windrvr6.ko
  6. Kontrola: dmesg | tail, ve výpise se objeví:
    windrvr6: no version for "struct_module" found: kernel tainted.
    WinDriver v8.01 Jungo (c) 1997 - 2006 Build Date: Apr  4 2006 X86 32bit loaded
    

1b. Instalace libusb-driver

Libusb-driver vytvořil Michael Gernoth, podporuje kabely pro USB i paralelní port.

  1. K běhu je nutná přítomnost modulů parport_pc, parport, ppdev, ty se zavedou příkazem:
    modprobe parport
    modprobe parport_pc
    modprobe ppdev
    
    Výpis modulů lsmod | grep par poté obsahuje:
    parport_pc             26981  0 
    parport                32393  2 ppdev,parport_pc
    
  2. Stáhnout: usb-driver-HEAD.tar.gz.
  3. Rozbalit: tar xvzf usb-driver-HEAD.tar.gz.
  4. Balíček pracuje s libusb a pro kompilaci je nutný také libusb-devel.
  5. Zkompilovat v adresáři ./usb-driver příkazem: make
  6. . Vznikne knihovna libusb-driver.so.
  7. Před spuštěním iMPACT je nutné nastavit použití této knihovny:
    export LD_PRELOAD=/...cesta k souboru.../libusb-driver.so
    
    Pozor na případné ochrany, které znemožňují nahrávání knihoven z mimo systémových oblastí (setenforce 0). LD_PRELOAD zajišťuje přednostní nahrání daných knihoven a ty mohou měnit některé systémové funkce. Výpis lsmod, pak vypadá následovně, obsahuje pouze dva moduly:
    Module                  Size  Used by
    windrvr6                   1  0 
    parport_pc                 1  0 
    
  8. Paralelní port LPT1 je označen jako /dev/parport0, aby jej mohl používat i běžný uživatel, je nutné jej zařadit do skupiny lp. To se provede editací /etc/group, přidání na řádku (u mně): lp:x:7:daemon,lp,uživatel. Novou skupinu ověřte příkazem id uživatel, ovšem přidání se projeví až po opětovném přihlášení do konzole, případně restartu X11!
  9. Nyní je možné paralelní kabel otestovat. Stačí spustit iMPACT v shellu příkazem impact. Pro lepší představu uvedu celý výpis, tučně jsou příkazy zadané uživatelem. Paralelní kabel byl připojen k desce obsahující obvody xc3s200 a xcf02s.
    Release 8.2i - iMPACT I.34
    Copyright (c) 1995-2006 Xilinx, Inc.  All rights reserved.
    >setMode -bs
    // *** BATCH CMD : setMode -bs
    >setcable -p parport0
    // *** BATCH CMD : setCable -port parport0
    Reusing 7801B801 key.
    Reusing FC01B801 key.
    Connecting to cable (Parallel Port - parport0).
     libusb-driver.so version: 2007-11-10 13:31:49.
     parport0: baseAddress=0x0, ecpAddress=0x400
     LPT base address = 0000h.
     ECP base address = 0400h.
    Cable connection established.
    >identify
    // *** BATCH CMD : identify
    Identifying chain contents ....Version is 0000
    '1': : Manufacturer's ID =Xilinx xcf02s, Version : 0
    INFO:iMPACT:1777 -
       Reading /usr/local/Xilinx/xcf/data/xcf02s.bsd...
    INFO:iMPACT:501 - '1': Added Device xcf02s successfully.
    ----------------------------------------------------------------------
    ----------------------------------------------------------------------
    Version is 0000
    '2': : Manufacturer's ID =Xilinx xc3s200, Version : 0
    INFO:iMPACT:1777 -
       Reading /usr/local/Xilinx/spartan3/data/xc3s200.bsd...
    INFO:iMPACT:501 - '1': Added Device xc3s200 successfully.
    ----------------------------------------------------------------------
    ----------------------------------------------------------------------
    done.
    Chain TCK freq = 0.
    Chain TCK freq = 0.
    Validating chain...
    Boundary-scan chain validated successfully.
    Elapsed time =      0 sec.
    // *** BATCH CMD : identifyMPM
    Elapsed time =      0 sec.
    >exit
    // *** BATCH CMD : quit
    ----------------------------------------------------------------------
    ----------------------------------------------------------------------
    

2. Instalace xpc4drv

S použitím libusb-driver není potřeba.

Modul xpc4drv zajišťuje programování přes paralelní port.

  1. Stáhnout a opatchovat: ftp://ftp.xilinx.com/pub/utilities/fpga/linuxdrivers.tar.gz nebo stáhnout už opatchovaný zdroják na linuxdrivers_patched.tar.gz.
    Originální patch je dostupný na stránce: http://stefan.endrullis.de/, aplikuje se následovně:
    tar xvzf linuxdrivers.tar.gz
    cd linuxdrivers
    patch -Np1 <../linuxdrivers.patch
    
    A navíc je nutné předělat Makefile, popsáno taktéž na http://stefan.endrullis.de/, v opatchovaném zdrojáku je to již uděláno.
  2. Zkompilovat: make
  3. Zavést do jádra: insmod ./xpc4drv.ko
  4. Kontrola: dmesg | tail, ve výpise se objeví:
    xpc4drvr: init_module
    

3. Zpřístupnění

V tuto chvíli by po spuštění lsmod | grep drv ve výpise měly být vidět řádky:

windrvr6              155712  0
xpc4drv                 8976  0

Zkontrolujte existenci zařízení /dev/windrvr6. Pokud se v systému neobjeví, je nutné ho vytvořit ručně (jako root):

set -- $(grep windrvr6 /proc/devices)
mknod -m 0666 /dev/windrvr6 c $1 0

Samozřejmě, by podle použitého kabelu LPT/USB by měly být v jádře přítomny i ovladače daných rozhraní (např. pro LPT – lp, parport, parport_pc) což většinou bývá...

Aby mohli obvody programovat i obyčejní uživatelé je nutné nastavit práva na následujících zařízeních:

chmod 666 /dev/windrvr6
chmod 666 /dev/lp0

Programování obvodu přes USB

Vývojová deska Spartan-3E Starter Kit (HW-SPAR3E-SK-US), má možnost programovat přes USB a také je k ní dodáván pouze USB kabel. I přes značnou snahu se mi USB kabel nepodařilo zprovoznit. Linux po připojení zařízení nalezne a ve výpisu lsusb je vidět zařízení Xilinx, ale bota bude zřejmě na straně ovladačů od Xilinxu a programu iMPACT.

Řešení: Používat kablík přes paralelní port. Deska Spartan-3E Starter Kit má na sobě samozřejmě JTAG vývod přes 6 pinový nasouvací konektor, takže funguje např. s kabelem JTAG3.

Zkušenosti navíc

Programování

V ISE v Processes záložce Generate Programming File zvolit Configure Device (iMPACT), pravé tlačítko, vybrat Properties, Display level Advanced, nastavit:

Port to by used: LPT1 (PC)
Baud rate: Auto
Configuration mode: Boundary Scan

Volbou Run se spustí aplikace iMPACT.

Problém s paralelním kabelem v ISE 9.2i

Program při programování skončí hláškou Program Failed a v podrobnostech se dozvídáme:

Programming terminated. DONE did not go high.

Řešení: V menu Edit → Preferences → iMPACT ConfigurationPreferences. zatrhnout položku: Use HIGHZ instead of BYPASS.

Programování EPROMky na přípravcích

  1. Generate Programming File → Configure Device (iMPACT)
  2. Boundary Scan a načtení zařízení připojených na JTAG.
  3. V záložce iMPACT Modes ... PROM File Formater: Připravení datového souboru pro nahrání do EEPROM
      	I want to target: Xilinx PROM
    	PROM File Format: MCS
    
    	a Next >
    	
  4. Auto Select Prom, Select PROM: vybrat správný obdod, který bývá zobrazen po Boundary Scanu, např. na S3BOARD je XCF02S. Zadat ADD, Next a Finish
  5. Vybere se správný *.bit soubor pro daný FPGA obvod a podle něj je vytvořen datový soubor pro EEPROMku
  6. Zpět do záložky Boundary Scan. Pravé tlačítko na obvod EEPROM → Assing New Configuration File a vybere se námi vytvořený *.mcs a iMPACT se opět zeptá na zařízení, takže Part Name: xcf02s.
  7. Pravé tlačítko na obvod EEPROM, zadat Program a případně zatrhnout Verify, aby se ověřilo, zda jsme byli úspěšní.

Zablokování kabelu

Může vzniknout problém se zablokováním kabelu , který se projeví následujícím výpisem v konzoly:

Cable is LOCKED. Retrying...
The cable is being used by another application.
Please try opening the cable connection at a later time.

Řešení: Spustit $XILINX/bin/lin/impact -batch a ručně zadat příkazy pro odblokování kabelu (cleancablelock), lze to také provést pomocí následujícího skriptu:

#!/bin/sh
export LD_PRELOAD=/usr/local/lib/libusb-driver.so # místo WinDriveru
XILINX=/usr/local/Xilinx
$XILINX/bin/lin/impact -batch << __EOF
setmode -bs
cleancablelock
setcable -p auto
quit
__EOF

Po restartu iMPACT vše funguje.

[ Rady na webu Xilinx ]

Linuxový iMPACT verze 8.2i I.34 má nepříjemný bug, pokud vygenerujete nový *.bit soubor, tak při jeho novém nahrání a programování iMPACT spadne a po spuštění se chová, jako by kabel nebyl připojen. Pro tento případ také pomůže odblokovat kabel výše uvedeným příkazem.

Chyba nenastává pokud před každým programování iMPACT restartujete.

Chyba 2259

Po spuštění iMPACT se objeví následující hláška a program skončí.

ERROR:iMPACT:2259 - The bit file '/home/bruchy/counting/my_counter.bit' does
not have the startup clock set to 'JtagClk'. Please re-generate the bitfile
with the startup clock option set to 'JtagClk'.

[ Rady na webu Xilinx ]

Spouštění ve Fedora Core Linuxu

Pokud je v distribuci zapnutá podpora SELinux (Security-Enhanced Linux) se ISE nespustí při nejsilnější úrovni zabezpečení, jelikož SELinux nedovolí natáhnout sdílené knihovny z míst mimo systémové cesty a zahlásí např.:

/usr/local/Xilinx/bin/lin/_pn: error while loading shared libraries: 
/usr/local/Xilinx/bin/lin/libSTL.so: cannot restore segment prot after reloc: Permission denied

Pro konfiguraci SELinux se v FC4 používá klikací nástroj system-config-securitylevel, kde to lze nastavit a nebo před spuštěním SELinux zakázat příkazem setenforce 0.

Tisk a export schémat

Pokud se ve startovacím skriptu nenastaví proměnná PRINTER, pak pokus o tisk skončí zamítavou hláškou: Print fails because the default printer hs not been selected!, a v klikacím nastavení není o tiskárně ani slovo. Do startovacího skriptu potom stačí přidat např.:

export PRINTER=ml170

Ačkoliv nevím co je tiskárna ml170 zač, tak se díky tomuto nastavení lze dostat alespoň do tiskového dialogu a zde zvolit tisk do PostScriptového souboru. Tento soubor pak lze jednoduše poslat na tiskárnu případně převést do bitmapy.

Odkazy

Instalace Modelsim SE v prostředí GNU/Linux

Simulátor v ISE má omezené možnosti, takže je lepší použít jiný nástroj, např. Modelsim. Modelsim vyžaduje přístup k licenčnímu serveru a následující návod, který vytvořil Děda je šitý na míru studentům ČVUT FEL.

  1. Stáhnout Modelsim a potřebné knihovny z http://www.model.com/downloads/, je nutné se zaregistrovat, kvůli přístupu na ftp.model.com. Je nutné stáhnout následující soubory:
    • ...@ftp.model.com/SE/6.2d/modelsim-base.tar.gz
    • ...@ftp.model.com/SE/6.2d/modelsim-linux.exe.gz
    • ...@ftp.model.com/SE/6.2d/modelsim-docs.exe.gz – dokumentace, není nutná pro rozběhnutí programu
  2. Instalace se provede v adresáři, kde jsou předchozí stažené soubory:
    tar xvzf modelsim-docs.tar.gz && gunzip modelsim-linux.exe.gz
    chmod +x modelsim-linux.exe
    ./modelsim-linux.exe
    
    V daném adresáři vznikne nový podadresář modeltech, ve kterém se ukrývá vše potřebné.
  3. Na konec souboru /etc/hosts přidejte řádek:
    147.32.80.30    moon.felk.cvut.cz    moon
    
  4. Protože licenční server není přístupný z vnější sítě, je nutné vytvořit ssh tunel pomocí některého ze školních unixových serverů na kterém máte konto, příkaz je následující, nezapomeňte zadat svoje username:
    ssh -L 1718:moon.felk.cvut.cz:1717 username@dual2.felk.cvut.cz	
    
    V použitém terminálu se takto přihlásíte na server dual2.felk.cvut.cz, tunel poběží, dokud zůstanete vzdáleně připojeni.
  5. Nastavit proměnnou prostředí LM_LICENSE_FILE:
    export LM_LICENSE_FILE="1718@localhost"
    
  6. V tuto chvíli je už vše připraveno pro spuštení Modelsimu:
    modeltech/bin/vsim