Forum: FPGA, VHDL & Co. Xilinx ISE (bzw. der Programmer) unter Mac OS X


von Ralf (Gast)


Lesenswert?

Hallo Community!

Hat schon mal jemand versucht (und es vielleicht geschafft?) den 
Xilinx-Programmer direkt unter Mac OS X zu nutzen?
Ich weiß, das man Xilinx-ISE in einer virtuellen Maschine (Parallels, 
VMware, VirtualBox) verwenden kann (BTDT).
Allerdings benötigt so eine virtuelle Maschine ganz schön viel 
Rechenleistung (und damit Akkulaufzeit).
Und das Umschalten zwischen (meinem) Editor und der VM ist auch nervig.

Dank wine läßt sich Xilinx-ISE aber auch direkt im Mac OS X 
installieren (und auch verwenden).
Da ich meine Synthese oft per Skript ausführe, habe ich mir für 
einzelnen Xilinx-Programme (xst, ngdbuild, map, par, bitgen, impact) 
kleine Wrapper geschrieben:
1
$ cat map
2
wine 'C:/Xilinx/13.4/ISE_DS/ISE/bin/nt/map.exe' $*
Bis zum Bitfile läuft es (bis auf einige wine-warnings) offensichtlich 
problemlos durch.

Ich scheitere nur am letzten Schritt: Das Bitfile ins FPGA zu bekommen.

Damit der Xilinx-Programmer richtig funktioniert, braucht er beim 
Einstöpseln seine Firmware.
Unter Linux erledigt das udev mit den entsprechenden rules:
1
# version 0003
2
SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="0008", MODE="666"
3
BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="0007", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusbdfwu.hex -D $tempnode"
4
BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="0009", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_xup.hex -D $tempnode"
5
BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="000d", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_emb.hex -D $tempnode"
6
BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="000f", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_xlp.hex -D $tempnode"
7
BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="0013", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_xp2.hex -D $tempnode"
8
BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="0015", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_xse.hex -D $tempnode"


Da es unter OS X kein udev gibt muß man diesen Schritt manuell machen:
*** fxload (https://github.com/nall/nexys2-osx) hat scheinbar ein 
Problem mit dem Firmwaredownload:
1
$ fxload -t fx2 -D 03fd:0013 -I ~/.wine/drive_c/Xilinx/13.4/ISE_DS/ISE/data/xusb_xp2.hex
2
2014-05-14 21:58:24.146 fxload[66612:507] can't write 31 bytes external memory at 0x2022


Aber für den Cypress-FX2 gibt es ja auch noch andere Tools:

*** fx2loader (http://www.makestuff.eu/wordpress/software/fx2tools/)
1
$ ./fx2loader
2
dyld: Library not loaded: /usr/lib/libusb-0.1.4.dylib
3
  Referenced from: /Users/Ralf/fx2loader/libfx2loader-20110913/darwin/rel/./fx2loader
4
    Reason: no suitable image found.  Did find:
5
        /usr/local/lib/libusb-0.1.4.dylib: no matching architecture in universal wrapper
6
        Trace/BPT trap: 5
Das ist zwar für alle Systeme vorkompiliert, aber offensichtlich mag er 
die libusb nicht (mehr).

*** CycFX2Prog 
(http://www.triplespark.net/elec/periph/USB-FX2/software/)
laßt sich mit Verweis auf -I/opt/local/include und -L/opt/local/lib 
kompilieren, scheint aber nur teilweise zu funktionieren:
1
$ ./cycfx2prog --list
2
Bus 036 Device 003: ID 03fd:0013
3
Bus 036 Device 001: ID 05ac:8006
4
Bus 004 Device 003: ID 05ac:0237
5
6
$ ./cycfx2prog -id=03fd:0013 prg:~/.wine/drive_c/Xilinx/13.4/ISE_DS/ISE/data/xusb_xp2.hex
7
Using ID 03fd:0013 on 036.003.
8
Putting 8051 into reset.
9
Programming 8051 using "~/.wine/drive_c/Xilinx/13.4/ISE_DS/ISE/data/xusb_xp2.hex".
10
Failed to open ~/.wine/drive_c/Xilinx/13.4/ISE_DS/ISE/data/xusb_xp2.hex: No such file or directory
11
Segmentation fault: 11
12
13
$ ./cycfx2prog -id=03fd:0013 prg:xusb_xp2.hex
14
Using ID 03fd:0013 on 038.003.
15
Putting 8051 into reset.
16
Programming 8051 using "xusb_xp2.hex".
17
Segmentation fault: 11

*** Mit fx2_programmer 
(http://volodya-project.sourceforge.net/fx2_programmer.php) bekommt man 
die Firmware offenbar in den FX2:
1
$ ./fx2_programmer 038 003 program ~/.wine/drive_c/Xilinx/13.4/ISE_DS/ISE/data/xusb_xp2.hex
2
Using device 003 on bus 038 vendor id 0x03fd product id 0x0013
3
Using file "/Users/Ralf/.wine/drive_c/Xilinx/13.4/ISE_DS/ISE/data/xusb_xp2.hex"
4
Programming  16 bytes starting at 0x2022, checksum ok
5
Programming  15 bytes starting at 0x2032, checksum ok
6
Programming   3 bytes starting at 0x06f0, checksum ok
7
Programming  16 bytes starting at 0x17ba, checksum ok
8
Programming  16 bytes starting at 0x17ca, checksum ok
9
...
10
Programming  12 bytes starting at 0x0cb7, checksum ok
11
Programming  12 bytes starting at 0x0cc3, checksum ok
12
Programming   9 bytes starting at 0x0ccf, checksum ok
13
Programming   9 bytes starting at 0x0cd8, checksum ok
14
Programming   9 bytes starting at 0x0ce1, checksum ok
15
End of file

Die LED leuchtet aber erst, wenn ich mit CycFX2Prog noch einen Run 
ausführe:
1
$ ./cycfx2prog -id=03fd:0013 run
2
Using ID 03fd:0013 on 038.003.
3
Putting 8051 out of reset.
4
Segmentation fault: 11
Immerhin ein kleiner Erfolg!


Dummerweise führt der USB-Stack von OS X keine Reenumaration aus:
1
$ system_profiler SPUSBDataType 
2
...
3
  Vendor-Specific Device:
4
5
     Product ID: 0x0013
6
     Vendor ID: 0x03fd  (Xilinx Inc.)
7
     Version:  0.00
8
     Speed: Up to 480 Mb/sec
9
     Location ID: 0x26200000 / 3
10
     Current Available (mA): 500
11
     Current Required (mA): Unknown (Device has not been configured)
12
...

Unter Linux (und Windows, wo die ganze Prozedur der Treiber übernimmt) 
bekommt der Programmer dann die VID:PID 03fd:0008.
Wie bekomme ich das mit OS X hin, damit impact oder xc3sprog den 
Programmer nutzen können?


Viele Grüßee,
Ralf

von Kest (Gast)


Lesenswert?

Ich benutze OSX und Altera tools unter VMWare.
Mi Xilinx kenne ich mich überhaupt nicht aus, aber hast Du mal versucht 
OpenOCD zu verwenden?

Dafür gibt es unendlich viele Scripte und vieles wird unterstützt und 
ich wette, dass Xilinx Programmer damit wunderbar läuft

Grüße
Kest

von Christoph Z. (christophz)


Lesenswert?

Krass was du schon für einen Aufwand getrieben hast. Hätte nicht 
gedacht, dass man überhaupt so weit kommt :-)

Der Hinweis auf OpenOCD ist sicher gut, würde die Sache etwas einfacher 
machen als mit Wine versuchen USB Geräte zum Laufen zu bekommen. 
Chipscope ist dann natürlich nicht möglich.

Ralf schrieb:
> Die LED leuchtet aber erst, wenn ich mit CycFX2Prog noch einen Run
> ausführe:$ ./cycfx2prog -id=03fd:0013 run
> Using ID 03fd:0013 on 038.003.
> Putting 8051 out of reset.
> Segmentation fault: 11
> Immerhin ein kleiner Erfolg!
>
> Dummerweise führt der USB-Stack von OS X keine Reenumaration aus:

Die Reenumeration wird vom FX2 ausgelöst. Der USB-Stack reagiert nur 
darauf.
Der FX2 meldet sich vom Bus ab ("Kabel ausstecken") und nach kurzer Zeit 
wieder an ("Kabel wieder einstecken"). Das kann (und sollte auch) die 
Firmware des FX2 auslösen (aber die ist ja fix gegeben).

Habe jetzt auf die schnelle nichts gefunden, wie man die reenumeration 
vom USB Host aus auslösen kann.

Mein Gefühl sagt mir, dass die Xilinx FW gar nicht korrekt auf den FX2 
geschrieben wurde oder nach dem Reset diese FW nicht korrekt ausgeführt 
wird.

: Bearbeitet durch User
von Christian R. (supachris)


Lesenswert?

Sind da nicht sogar 2 Firmware Teile nacheinander reinzuladen? Unter 
Windows meldet der sich 2 mal mit was neuem an. ReNumeration löst die 
Firmware aus, wenn die das nicht macht, stimmt was nicht. Eventuell 
nicht nur ein Run machen sondern erst mal den Programm Counter wieder 
auf Null stellen? Ansonsten kannst du ja mal schauen, ob du eventuell 
einen Digilent HS1 Programmer auftreiben kannst, der hat einen FT2232H 
drin, und sollte mit XC3Sprog auch unter OS-X funktionieren.

von Ralf (Gast)


Lesenswert?

Hallo Community!

Es gibt gute Neuigkeiten: Es funktioniert!

Ralf schrieb:
> Ich scheitere nur am letzten Schritt: Das Bitfile ins FPGA zu bekommen.
Jetzt nicht mehr:

Problem war ja die fehlende Reenumaration und das Problem mit fxload
(2014-05-14 21:58:24.146 fxload[66612:507] can't write 31 bytes external 
memory at 0x2022)

1. Für fxload muß man den richtigen Chip einstellen, den fx2lp
2. die Reenumaration ist mir mit der folgenden Firmwaredatei geglückt:
http://www.xilinx.com/txpatches/pub/utilities/fpga/xusbdfwu-1025.zip

Hier der komplette Aufruf (nach Einstecken des USB-Kabels):
1
$ fxload -t fx2lp -I xusbdfwu.hex -D 03fd:0013
2
$ fxload -t fx2lp -I ../.wine/drive_c/Xilinx/13.4/ISE_DS/ISE/data/xusb_xp2.hex -D 03fd:0008

Danach findet xc3sprog den Programmer (und das FPGA):
1
$ xc3sprog -c xpc -j
2
XC3SPROG (c) 2004-2011 xc3sprog project $Rev: 760 $ OS: Darwin
3
Free software: If you contribute nothing, expect nothing!
4
Feedback on success/failure/enhancement requests:
5
  http://sourceforge.net/mail/?group_id=170565 
6
Check Sourceforge for updates:
7
  http://sourceforge.net/projects/xc3sprog/develop
8
9
JTAG loc.:   0  IDCODE: 0x41c22093  Desc:                       XC3S500E Rev: E  IR length:  6

Und schon kann man das Bitfile ins FPGA brezeln!
Damit kann man quasi nativ unter Mac-OS FPGA-Entwicklung betreiben!


Die Krönung wäre jetzt natürlich, wenn Impact unter wine auch noch den 
Programmer finden würde, aber warum kompliziert (impact) wenn's auch 
einfach (xc3sprog) geht.

Ich bin auch überzeugt, daß der Vorschlag von Christian mit dem 
FTDI-Kabel auch funktioniert. Ich hab mir inzwischen eins besorgt. Aber 
das hebe ich mir für später auf :-)

Viele Grüße,
Ralf

P.S.: "lsusb" sieht jetzt so aus:
1
$ system_profiler SPUSBDataType 
2
...
3
4
        XILINX    :
5
6
          Product ID: 0x0008
7
          Vendor ID: 0x03fd  (Xilinx Inc.)
8
          Version:  0.00
9
          Speed: Up to 12 Mb/sec
10
          Manufacturer: XILINX 
11
          Location ID: 0x04100000 / 4
12
          Current Available (mA): 500
13
          Current Required (mA): 150
14
15
...

von Ralf (Gast)


Lesenswert?

Ralf schrieb:
> Ich bin auch überzeugt, daß der Vorschlag von Christian mit dem
> FTDI-Kabel auch funktioniert. Ich hab mir inzwischen eins besorgt. Aber
> das hebe ich mir für später auf :-)
So, jetzt ist später. Auch das FTDI-Kabel funktioniert.
Ich habe hier das C232HM-DDHSL-0 von FTDI mit einem FT232H, der die 
MPSSE-Engine drinhat. GND, TCK, TMS, TDI und TDO müssen mit den 
entsprechenden JTAG-Pins verbunden werden.

MacOS muß es untersagt werden den FTDI-Chip als virtuellen COM-Port 
bereitzustellen:
1
sudo kextunload -b com.FTDI.driver.FTDIUSBSerialDriver

Je nach System muß u.U. stattdessen der Apple-Treiber deaktiviert 
werden:
1
sudo kextunload -b com.apple.driver.AppleUSBFTDI

Und schon läuft auch das FTDI-Kabel:
1
$ xc3sprog  -v -c ft232h system.bit 
2
XC3SPROG (c) 2004-2011 xc3sprog project $Rev: 760 $ OS: Darwin
3
Free software: If you contribute nothing, expect nothing!
4
Feedback on success/failure/enhancement requests:
5
  http://sourceforge.net/mail/?group_id=170565 
6
Check Sourceforge for updates:
7
  http://sourceforge.net/projects/xc3sprog/develop
8
9
Using built-in device list
10
Using built-in cable list
11
Cable ft232h type ftdi VID 0x0403 PID 0x6014 dbus data 00 enable 0b cbus data 00 data 00
12
Using Libftdi, Using JTAG frequency   1.500 MHz from undivided clock
13
JTAG chainpos: 0 Device IDCODE = 0x41c22093  Desc: XC3S500E
14
Created from NCD file: system.ncd;UserID=0xFFFFFFFF
15
Target device: 3s500evq100
16
Created: 2014/05/01 00:00:00
17
Bitstream length: 2270208 bits
18
done. Programming time 1511.7 ms
19
USB transactions: Write 148 read 7 retries 13

Wenn man jetzt noch die cablelist.txt frisiert:
1
#ft232h        ftdi    1500000 0x0403:0x6014:                     
2
ft232h        ftdi    30000000 0x0403:0x6014:
kann man richtig schnell FPGA-Updates fahren:
1
Using Libftdi, Using JTAG frequency  30.000 MHz from undivided clock
2
...
3
done. Programming time 109.7 ms
4
USB transactions: Write 148 read 7 retries 7

Viele Grüße,
Ralf

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.