Forum: FPGA, VHDL & Co. XILINX JTAG ACE Player oder FT2232 für "Firmwareupdates"


von Andreas N. (poolspieler)


Lesenswert?

Hallo,
ich möchte eine Firmwareupdate-Option für das Platform Flash XCF04S 
(welches im JTAG-Chain ist) anbieten.
Am Labortisch programmiere ich es mit dem XILINX Parallelportkabel PC3 - 
werde mir aber irgend wann mal ein USB-Kabel zulegen...

Mein Lösungsansatz (nach Tagelangem googeln) wäre folgender:
Ich biete eine USB-Schnittstelle für Firmwareupdates an.
An der USB-Schnittstelle hängt ein USB/Serial-Wandler.
An der seriellen Schnittstelle hängt ein Mikroprozessor.
Der Mikroprozessor bedient den JTAG ACE Player von XILINX. 
[[http://www.xilinx.com/support/documentation/application_notes/xapp424.pdf]]

Den JTAG ACE Player würde ich evtl. auf einem CPLD (z.B. XC9572) laufen 
lassen.

Mir kommt mein Lösungsansatz aber reichlich umständlich vor - hat da 
eventuell jemand von Euch einen Besseren Vorschlag?
Wie macht Ihr Firmwarupdates von FPGAs im Feld?

Ich habe mir auch schon die FTDI-Lösung mit dem FT2232 angeschaut.
Habe mir extra von Amontec den JTAG-KeyTiny gekauft (da ist ein FT2232D 
drauf)
Jetzt ist nur die Frage, wie man die DLL von FTDI nutzen muss. Das 
Demoprogramm von FTDI macht nur irgendwelche kryptischen SCAN-INs und 
SCAN-OUTs...??? Aber wie man eine SVF-Datei in den PROM schiebt, habe 
ich noch nirgends gefunden.
Und z.B. OPENOCD geht nicht für XILINX - habe es zumindest nicht zum 
laufen gebracht.

Gruß,
Andreas

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Auf der Xilinx Site gibt es eine Appnote wo beschrieben wird wie man 
mittels nem uC und dem SVF File den FPGA beschreiben kann, in der 
Codesammlung gibt es auch ein "low-cost" configuration rom mit einem 
Tiny von Falk, vieleicht ist das ne option?

von Christian R. (supachris)


Lesenswert?

Hm, wir denken hier auch immer mal über eine Option nach, wie man unsere 
Geräte, die meist aus mehreren FPGAs bestehen, am besten im Feld 
aktualisieren könnte. Die XAPP058 ist schon mal ein Ansatz....werd auf 
jeden Fall weiter mitlesen hier....

von Andreas N. (poolspieler)


Lesenswert?

Hallo,
habe gerade versucht, den Player im XC9572 zu synthetisieren.
Ergebnis:
Der Player benötigt 145 Macrocells (XC9572 hat aber nur 72).
Es müßte dann also mindestens ein XC95216 sein. Der hat dann schlappe 
160 Pins, von denen gerade mal ca. 20 genutzt werden... Das habe ich mir 
dann schon etwas anders vorgestellt... Irgendwie "schnuckeliger" ;-)

Kennt jemand evtl. eine Alternative mit mindestens 150 Macrocells und 
höchsten ca. 50 Pins?

Oder sollte die FTDI-Schiene doch die Bessere sein...???

@Läubi:
Beitrag "SVF-Interpreter (z.B. Xilinx CPLDs) im Mega32" tut eigentlich genau das, 
was ich will. Leider gibt es keinen C-Code --> Ich hätte schon gern 
einen PIC verwendet...
Eventuell beiße ich halt in den sauren Apfel und schreib mir den 
SVF-Player halt selber. Wobei ich mir sicher bin, dass hier das Rad 
bestimmt zum n-ten mal neu erfinden muss!
Vielleicht schaffe ich es aber auch ohne PIC - direkt mit der DLL von 
FTDI - mal schaun.

Gruß,
Andreas

von Christian R. (supachris)


Lesenswert?

Naja, in der XAPP058 ist ja der Quellcode für einen SVF Player für 
beliebige µC drin, das sollte helfen. Ich hatte das mal auf einem TI DSP 
implementiert. Ging ganz gut, damit einen CPLD zu programmieren. Müsste 
man noch mal probieren, ob das auch mit dem Platform Flashes geht....

Wieso es allerdings noch keinen SVF Player für den FT2232 gibt, ist mir 
auch rätselhaft, der ist doch geradezu dediziert dafür.

von John-eric K. (mockup)


Lesenswert?

wie wäre es damit
http://www.embedded-projects.net/index.php?page_id=157

der Quelltext ist da auch verfügbar.

von Uwe Bonnes (Gast)


Lesenswert?

Ich arbeite an und mit xc3sprog, mit DLC5 Clones, FT2232 und Cypress 
FX2. Auf sourceforge habe ich relativ aktuelles Fileset. Inzwischen habe 
ich auf das CMake System umgestellt und kann (bei vorhandener 
win32-libusb und win32-libftdi) auf fuer Windows crosskompilieren. Damit 
faellt das ganze SVF gedoehns weg, selbs ein MCS File braucht man nicht 
mehr, sondern das Bitfile fuer XC3S bzw. XCF, Jedec fuer XC95XL|XV und 
an der Portierung von JAVR arbeite ich gerade.  Aktuelle Files bei 
Interesse und gegen das Versprechen der Rueckmeldung...

von Benedikt K. (benedikt)


Lesenswert?

@Uwe
Kannst du mit xc3sprog auch die PROMs, also die XCFxx, über den FT2232 
unter Windows programmieren? Ich habe das bisher noch nicht hinbekommen. 
FPGAs gehen wunderbar, bei PROMs startet der PC neu (mit der originalen 
Version) bzw. die Daten im PROM werden gelöscht, aber nicht richtig 
beschrieben (mit einer verbastelten Version).

Die XAPP058 hatte ich auch mal auf einen FT2232 portiert, damit konnte 
ich problemlos FPGAs programmieren, nur bei PROMs versagte auch diese 
Software.

von Uwe Bonnes (Gast)


Lesenswert?

Unter Linux geht das Programmieren von XCF mit dem Bitfile. Das 
Crosskompilat habe ich bisher noch nicht ausprobiert. Dazu  muss ich 
dann auf dem Rechner einer Arbeitskollegen libusb-win32 installieren. 
Ich hoffe, den Test unter Win32 nimmt mir jemand anderes ab. Xc3sprog 
kennt jetzt auch eine verify Option, damit loescht Du dir nicht das PROM 
und kannst trotzdem sehen, ob die Kommunikation klappt.

Ich habe jetzt einen takeover request fuer sourceforge xc3prog gestellt, 
mal schauen, wann und wie er bearbeitet wird.

von Martin S. (strubi)


Angehängte Dateien:

Lesenswert?

Hi Gemeinde,

Uwe: Takeover klingt gut, das Projekt schien mir recht tot. Bekam auch 
nie eine Antwort auf eingereichte Patches.

Gibt ueberdies noch eine weitere brauchbare OpenSource-Ware namens 
xilprg, mit der programmiere ich normalerweise die EEPROMs / FPGAs 
direkt ueber ein gehacktes X-Board, oder per Impact mit dem cblserv.
Leider auch alles etwas verwaiste Projekte, habe die Patches also nur 
lokal.

Fuer den FT2232 hab ich einen XSVF-Player, allerdings basiert der auf 
einer optimierten JTAG library die nicht OpenSource ist (Teil des 
ICEbear JTAG adapter). Allerdings gibt's bei den XSVF-Files ab und an 
Timing-Probleme unbekannter Art, wenn direkt per Impact erzeugt. Wenn 
erst nach SVF und dann nach XSVF konvertiert, geht's. Aber da nicht 
wirklich praktikabel, liegt die Loesung eher in der Schublade. Habe den 
Code mit der Bitbang-Option (nicht per MPSSE, der Teil ist in der JTAG 
library) mal angehaengt. Fehlen wohl nur noch die paar I/O-Funktionen. 
Vielleicht nutzt's ja wem.

Gruesse,

- Strubi

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> ich möchte eine Firmwareupdate-Option für das Platform Flash XCF04S
> (welches im JTAG-Chain ist) anbieten.
Was hängt da für FPGA dran?   Hast du da noch Platz?
Kannst du mit dem Kommunizieren (z.B. über einen uC)?

Ich programmiere das Config-Prom z.B. über einen Prozessor, der über ein 
paar FPGA-Pins an der JTAG-Schnittstelle des Config-Proms hängt, das 
Prom. Beim nächsten Start wird das FPGA dann mit den neuen Daten aus dem 
Config-Prom geladen. Das Ganze basiert auf dem XSVF-Player von Xilinx.

von Andreas N. (poolspieler)


Lesenswert?

Lothar Miller wrote:
>> ich möchte eine Firmwareupdate-Option für das Platform Flash XCF04S
>> (welches im JTAG-Chain ist) anbieten.
> Was hängt da für FPGA dran?   Hast du da noch Platz?
Es ist ein Spartan XC3S400. Habe noch ca. 200 Slices frei.

> Kannst du mit dem Kommunizieren (z.B. über einen uC)?
Ja, kann ich. Es ist ein MicroBlaze implementiert - der hängt auch an 
einer seriellen Schnittstelle.

> Ich programmiere das Config-Prom z.B. über einen Prozessor, der über ein
> paar FPGA-Pins an der JTAG-Schnittstelle des Config-Proms hängt, das
> Prom. Beim nächsten Start wird das FPGA dann mit den neuen Daten aus dem
> Config-Prom geladen. Das Ganze basiert auf dem XSVF-Player von Xilinx.
Das wollte ich auch zuerst machen - weil es das Naheliegendste ist!
Ich bin dann aber (glaube ich) an der Größe des XSVF-Players 
gescheitert.
Ich habe (noch) kein externes SRAM dran und bin auf BRAM beschränkt...
Und BRAM habe ich nur noch ca. 5kB frei.
Könntest Du evtl. etwas C-Code des Players posten?

Wie sieht denn dann die JTAG-Chain bei Dir aus? Hast Du den JTAG-Port 
des XCF04S Parallel auf einige IOs gelegt - oder wie machst Du das? Das 
war auch ein Problem - ich wußte/weiß nicht, wie ich vom Microblaze aus 
die JTAG-Pins ansteuern kann...

Gruß,
Andreas

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Könntest Du evtl. etwas C-Code des Players posten?
Den bekommst du bei Xilinx über den Link in der XAPP058

Du könntest den Player auch auf dem Download-Rechner (PC, Laptop) laufen 
lassen, und die Daten byteweise zum FPGA übertragen. Das muß dann nur 
noch mit den passenden Pins wackeln.

> wie ich vom Microblaze aus die JTAG-Pins ansteuern kann...
Du kannst die JTAG-Pins des FPGAs nicht ansteuern.
Stattdessen nimmst du belieige freie FPGA-Pins und klemmst dort dran die 
JTAG-Schnittstelle des Proms. Dann gibst du die Signale auf diesen 
User-IO-Pins aus.

von Andreas N. (poolspieler)


Lesenswert?

Lothar Miller wrote:
>> Könntest Du evtl. etwas C-Code des Players posten?
> Den bekommst du bei Xilinx über den Link in der XAPP058
Habe ich mir gerade (nochmal) besorgt.

> Du könntest den Player auch auf dem Download-Rechner (PC, Laptop) laufen
> lassen, und die Daten byteweise zum FPGA übertragen. Das muß dann nur
> noch mit den passenden Pins wackeln.
Bin gerade dabei, es mit dem FTDI-Baustein zu probieren.

>> wie ich vom Microblaze aus die JTAG-Pins ansteuern kann...
> Du kannst die JTAG-Pins des FPGAs nicht ansteuern.
OK, so habe ich das auch verstanden...

> Stattdessen nimmst du belieige freie FPGA-Pins und klemmst dort dran die
> JTAG-Schnittstelle des Proms. Dann gibst du die Signale auf diesen
> User-IO-Pins aus.
Dann muss man nur noch einen Multiplexer verwenden - weil ja die 
JTAG-Schnittstelle einerseits nach draussen geführt ist - und 
andererseits direkt für das Firmwareupdate benutzt wird... Aber das soll 
das Problem nicht sein.

von Andreas N. (poolspieler)


Lesenswert?

Hallo,
ich bin nun so weit, dass ich die .xsvf-Datei mittels eines Prozessors 
und dem (modifizierten) C-Code von XAPP058 abspielen kann.

ABER:
Leider funktioniert das nur für einen CPLD (XC9572).
Für den Spartan und den Platformflash geht es nicht.
Ich kann nicht mal die IDs auslesen...
An der Chain liegt es nicht - weil mit dem PC3 Programmierkabel geht es 
ja auch...

Hat jemand eine Idee, an was sowas liegen kann?

Beste Grüße,
Andreas

von Andreas N. (poolspieler)


Lesenswert?

Hallo nochmal,
ich habe mir die Spannungspegel der JTAG-Schnittstelle nochmal mit dem 
Oszi angeschaut:
Sieht alles gut aus!
Hohe Flankensteilheit ist vorhanden.
Spannungspegel (HIGH) von 3,3V ist da.
Auf der TDO-Leitung tut sich auch was. --> Die Chain schein also schon 
zu funktionieren und zu antworten.
Beim Auslesen des ID-Codes kommt aber immer 00000000 zurück. Läuft da 
eventuell mit dem Reset oder so was schief???

Bleibt die Frage:
Was ist JTAG-mäßig bei dem CPLD anders zum FPGA bzw. Platform Flash???
Kann man eventuell die JTAG-Schnittstelle auch zu langsam ansteuern?

Gruß,
Andreas

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Bei Openocd wird gerade  xsvf eingebaut. Dann hat man endlich ein JTAg 
für alle Problem. ARM und FPGA Programmierung.

von Christian R. (supachris)


Lesenswert?

Oh, klingt interessant. Ich kenn zwar außer FPGA und ARM noch andere 
JTAG-ANwendungen, aber ein Schritt in die Richtung ist es schon. Bleibt 
noch die Frage, ob es mit den Platform Flashes überhaupt klappt.

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.