Forum: FPGA, VHDL & Co. PCI JTAG -> FPGA chain


von sw1ft (Gast)


Lesenswert?

Hallo Gemeinde,

folgende Frage: Ich möchte mir eine PCI Karte bauen. Darauf soll der 
XC3S500E + XCF04S im Master Serial Mode verbaut sein. Der FPGA kümmert 
sich um das PCI Protokoll und I/O Geschichten die später dazu kommen 
(vorerst LED auf Platine schalten etc.). Nun mach ich mir Gedanken ob es 
möglich ist mit dem PCI JTAG dem XCF04S einen neuen Bitstream 
mitzuteilen. PC Neustart und der FPGA wird mit dem neuen Bitstream 
konfiguriert und kann nun andere Funktionen ausführen. Ist das 
grundsätzlich möglich?

von fpga (Gast)


Lesenswert?

Hi, ja das ist ohne Probleme möglich.

Es ist auch möglich eine PCI Karte ohne Neustart eines PCs upzudaten 
sofern sich die Größe des Adressraums nicht ändert. Man muss davor nur 
die Adresseinstellungen (base address etc.) von der Karte 
zwischenspeichern - updaten - und die Einstellungen wieder 
zurückschreiben.

Du musst natürlich gewährleisten, dass der FPGA schnell genug geladen 
wird, so dass er im System erkannt wird. Die Zeit liegt so bei 1 sec, 
bei einem 33MHz Busclock, und 0,5sec bei einem 66 MHz Busclock

von Christian R. (supachris)


Lesenswert?

Der Spartan 3e hat ja den großen Vorteil, dass man SPI Flash dran 
schließen kann. Den kannst du quasi über den normales FPGA Design 
updaten. Erstmalig über JTAG (indirekte Programmierung über impact) und 
dann musst du lediglich in deinem FPGA Design einen simplen SPI Master 
bauen. Somit kannst du den immer wieder aktualisieren. Booten geht auch 
fix, wenn man die CCLK Geschwindigkeit hoch setzt. Den Platform Flash 
könntest du ausschließlich über JTAG programmieren, dazu musst entweder 
im FPGA einen JTAG Master bauen (ähnlich wie die SPI Lösung, zum 
Beispiel der embedded JTAG ACE Player von Xilinx) oder irgendwie extern 
von PCI auf JTAG kommen. Ich würde auf jeden Fall den SPI Flash nehmen, 
wenn das Design nicht so ultrageheim ist, dass man Auslesen unterbinden 
müsste.

von sw1ft (Gast)


Lesenswert?

Also kann ich mir praktisch über nen Linux Device PCI driver das neue 
*.bit file auf meinen FPGA schieben, auf dem FPGA implementiere ich 
einen SPI Master mit dem ich das file in den SPI Flash an die Stelle 
schreibe, aus der der FPAG bootet. Danach PROG_B ziehen und neue 
konfiguration starten. Das Problem könnte dabei nun sein wenn ich 
versehentlich Daten schreibe, und ich keine weitere JTAG Schnittstelle 
auf der Platine vorsehe habe ich mich ausm FPGA ausgesperrt, richtig?

von Christian R. (supachris)


Lesenswert?

So in etwa. Die JTAG Schnittstelle ist obligatorisch, denn das 
allererste Mal muss das Bitfile ja auch in den SPI Flash. Ansonsten 
klappt das so. Achja, das Bit-File muss entweder in ein bin oder mcs 
File (intel hex) umgewandelt werden, im Flash landet etwas weniger als 
im BitFile steht. Macht aber die Xilinx Software für dich.

von sw1ft (Gast)


Lesenswert?

Ok, danke soweit. Dabei ist jetzt also noch das Problem des aussperrens. 
Ich hätte noch einen Ansatz bei dem ich den BPI MultiBoot Modus 
verwende. Mir ist aber dabei noch unklar wie ich den BPI Speicher mit 
dem Bitstream fülle?

Im "Spartan-3 Generation Configuration User Guide" 
http://www.xilinx.com/support/documentation/user_guides/ug332.pdf ist 
auf Seite 144 eine Beispielschaltung die ich so gerne verwenden würde?

von Christian R. (supachris)


Lesenswert?

Multiboot kann der S3E meines Wissens nicht, jedenfalls nicht mit 
Fallback bei ungültiger Konfig im Flash. Das kann nur der extended S3A 
(und dann nur bei Parallel-Flash, frisst massog I/Os). SPI Multiboot mit 
Fallback kann der S6 dann. Wieso nimmst du eigentlich nicht gleich den 
Spartan 6, der ist doch aktueller und man bekommt meist mehr fürs Geld.

von sw1ft (Gast)


Lesenswert?

Nein Fallback hat er wirklich nicht aber er kann laut der UG332 S.146 
den BPI Up und den BPI Down Mode. Sprich ich könnte mir einen Bitstream 
der die PCI Verbindung abhandelt in den unteren Speicherbereich packen, 
sodass ich auf jeden Fall mit dem FPGA über PCI kommunizieren kann. 
Sollten nun Bitstream updates oder Änderungen nötig sein kann ich per 
PCI den oberen Bereich des Speichers beschreiben und dementsprechend 
diesen Bereich booten. Somit könnte ich manuell fallbacken und dadurch 
mal zumindest die PCI Verbindung garantieren (im unteren 
Speicherbereich).

Soweit der Plan. Es bleibt die Frage wie ich den BPI Speicher fülle? Da 
fehlt mir noch der aha Effekt.

Zusammengefasst sagt die Zeichnung auf S.144:

JTAG ---> FPGA ---> NOR Flash

von Christian R. (supachris)


Lesenswert?

Hm, na wenn du es irgendwie bewerkstelligt bekommst, während des Reboot 
von BPI Up auf BPI Down an den Mode Pins umzustellen, geht das auch. 
Aber das muss dann extern gesteuert werden, von einem FPGA IO aus klappt 
das natürlich nicht. Aber ich denke, das Fallback wird überbewertet, vor 
allem in solchen "Spielerei" Systemen, wo man an di Hardware rankommt. 
Außerdem gibts ja sowas wie ein Verify, du kannst doch den Flash nach 
dem Beschreiben überprüfen. Wenn die Hardware völlig unzugänglich wäre, 
OK, aber per JTAG kommst du doch bei einer PCI Karte immer ran. Oder 
planst du den Rechner irgendwo zu vergraben?
Den BPI Speicher füllen? Mit Promgen das mcs File erstellen und 
reinschreiben, wo ist denn das Problem? Promgen hat eine Option, ob up 
oder down.

von Chris (Gast)


Lesenswert?

Ich habe im Prinzip die gleiche Frage wie die ursprüngliche:
Kann ich ein FPGA über die JTAG Pins vom PCIe updaten?

Die Antworten sind zwar viel versprechend, gehen aber in eine andere 
Richtung als die Probleme die ich noch sehe:

- Werden die JTAG Signale von typischen Motherboards unterstützt (soweit 
ich weiß ist die Impelementierung von JTAG Support auf den Motherboards 
optional)?

- Wie kann ich die JTAG Signale von der SW aus steuern? Bieten mir Linux 
und Windows dafür Schnittstellen an? Gibt es bereits fertige 
Bibliotheken?

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


Lesenswert?

Chris schrieb:
> - Werden die JTAG Signale von typischen Motherboards unterstützt (soweit
> ich weiß ist die Impelementierung von JTAG Support auf den Motherboards
> optional)?
Nicht so, dass du einen JTAG Controller auf dem MB hättest, sondern nur 
so, dass du mit externem Testequipment die Komponenten in der Chain 
ansprechen könntest...

> - Wie kann ich die JTAG Signale von der SW aus steuern?
Aus der ersten Antwort folgert: gar nicht.

von Chris (Gast)


Lesenswert?

Danke für die rasche Antwort, Lothar!

Das heißt die JTAG-Signale am PCI Stecker Enden im Motherboard an einem 
JTAG-Stecker?

Das ist enttäuschend. Ausserdem verstehe ich den Sinn dahinter dann 
nicht wirklich. Dann kann ich den JTAG-Programmer ja gleich direkt auf 
der Karte anstecken?!?

von Christian R. (supachris)


Lesenswert?

Nicht mal das. Im Normalfall sind die überhaupt nicht am Slot auf dem 
Mainboard angeschlossen. Die sind am PCIe Finger dran, damit du in der 
Firma deine eigene Karte einfacher Testen kannst, denn um die zu 
betreiben musst du ja sowieso den PCIe Finger irgendwo reinstecken. Wozu 
dann also noch ein JTAG Stecker extra?

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


Lesenswert?

Chris schrieb:
> Das heißt die JTAG-Signale am PCI Stecker Enden im Motherboard an einem
> JTAG-Stecker?
Die werden bei einem "normalen" Mainboard gar nicht angeschlossen sein. 
Bestenfalls in speziellen kundenspezifischen Aufbauten wird der 
verdrahtet, und so kann z.B. ein Rack gleich "am Stück" getestet werden.

> Ausserdem verstehe ich den Sinn dahinter dann nicht wirklich. Dann
> kann ich den JTAG-Programmer ja gleich direkt auf der Karte anstecken?!?
Es geht beim JTAG auch weniger ums Programmieren von Komponenten als 
vorrangig ums Testen des Boards. Kein Mensch programmiert seine 
PC-Steckkarte über JTAG um. Und wenn das keiner tut, dann verbaut man 
als Mainboardentwickler auch keine Ressourcen dafür (Interfacechip, 
Leiterplattenfläche oder sonstwas)...

von Chris (Gast)


Lesenswert?

Lothar Miller schrieb:
> Kein Mensch programmiert seine
> PC-Steckkarte über JTAG um.

Genau DAS wollte ich tun, da der FPGA selbst die PCI-Schnittstelle am 
Board bedienen wird und man deshalb beim Umkonfigurieren über PCI 
höllisch aufpassen muss um sich nicht selbst vom PCI auszusperren.

Aber danke jedenfalls für eure Infos - jetzt kenne ich mich aus! ;-)

Chris

von Christian R. (supachris)


Lesenswert?

Chris schrieb:
> Genau DAS wollte ich tun, da der FPGA selbst die PCI-Schnittstelle am
> Board bedienen wird und man deshalb beim Umkonfigurieren über PCI
> höllisch aufpassen muss um sich nicht selbst vom PCI auszusperren.

Dafür gibts Multiboot mit Fallback, zumindest bei aktuellen FPGAs. Da 
hast du immer noch ein lauffähiges 2. Image im Flash.

von J. Tagger (Gast)


Lesenswert?

Ich habe einen ähnlichen Bedarf. Allerdings ist es laut obiger Aussage 
wohl so, dass der S3E nicht multibootfähig ist. Wäre eine Strategie 
denkbar, dass der FPGA einen flash loader integriert hat, sich 
irgendwoher ein mcs zieht und es ins flash schiebt um dann selbständig 
zu starten?

Wie wäre das möglich?

von Christian R. (supachris)


Lesenswert?

Naja, so ein FPGA muss immer komplett geladen sein, Partial 
Reconfiguration der großen Chips mal ausgenommen. Irgendwie muss also 
das Design was den Flash beschreiben soll ja auch in den Chip kommen. 
Beim S3e hat man wenig Chancen ein sicheres Update zu machen. Da geht 
eigentlich nur erstmalig per JTAG flashen und dann beim Update beten 
dass kein Stromausfall ist. Oder einen externen kleinen Controller 
einbauen, der den FPGA per Slave Serial lädt, der kann ja leicht mehrere 
Images verwalten.

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.