Forum: FPGA, VHDL & Co. FPGA und CPU, Update


von Bernd (Gast)


Lesenswert?

Hallo,

Ich möchte fragen welche Systeme es gibt um einen FPGA im Bedarfsfall in 
der Schaltung upzudaten.

Da wir vorhaben eine CPU mit genügend Speicher zu integrieren währe es 
super wenn das FPGA die Daten von der Cpu erhält. Damit währe auch ein 
Update kein Problem da es mit CPU ja eben problemlos ist.

Geht das, also kann der FPGA damit leben aus der CPU seine Daten zu 
bekommen. Es könnte ja zu leichten Verzögerungen kommen durch Interrups 
u.s.w. im Gegensatz zum Quad Flash.

Oder kann man das Quad Flash beschreiben und in der Zeit das FPGA 
Tristate Schalten?

Es geht um einen Spartan 6, Cpu wahrscheinlich ein ARM Derivat mit 
Linux.

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


Lesenswert?

Es geht, wenn dein System es verkraftet, dass erst die CPU und das 
Betriebsystem läuft, danach erst das FPGA. Es ginge z.B. nicht so 
einfach, wenn das FPGA ein PCI Device wäre. Denn das muss gleich ganz zu 
Beginn schon aktiv sein. Wenn dein FPGA aber unkritisch jederzeit 
initialisiert und angesprochen werden kann, dann suchst du dir den 
passenden Config-Modus heraus und Initialisierung das FPGA mit dem uC.

von Bernd (Gast)


Lesenswert?

Der FPGA kann nach der CPU starten, das ist machbar. Finde mich im 
Moment noch nicht ganz zu recht bei der vielen Doku.

Die Frage war natürlich auch wie das geht und obs ein Beispiel gibt.

Kann man die Xilinx IP Cores eigendlich auch in der Hardware testen wie 
bei Al tera?

von Strubi (Gast)


Lesenswert?

Moin,

auf diverser Hardware lade ich das FPGA jeweils per Slave-Serial von der 
Host-CPU aus per SPI. Muss man sich nur einen (einfachen) Kerneltreiber 
für basteln. Aber man muss sich sein System wirklich GENAU durchdenken, 
dass man sich nicht selbst (oder den Kunden) mit einem fehlerhaften 
Firmware-Update aussperrt.
Lieber im Zweifelsfall noch ein CPLD spendieren, welches das "harte" 
Routing erledigt.
Was seit Spartan6 gehen soll, aber mir noch ein Rätsel ist, ist die 
partielle Rekonfiguration. Da soll man wohl über die 
ICAP_SPARTAN6-primitive die SelectSlave-Logik gezielt ansteuern können.
Wie das mit dem Multiplexing im Detail geht, ist mir noch nicht klar. 
Theoretisch aber eine schöne Lösung, weil man immer einen Bootloader im 
Flash als Fallback-Szenario hat und die restliche Funktion nachladen 
kann.

Was man aber immer auch "von Hand" geht:
- FPGA lädt Default-Konfig aus einem SPI-Flash (Master Serial)
- kleiner Multiplexer, dass Host-CPU über einen Select-Pin auf das 
SPI-Flash zugreifen kann
- ein paar I/O pins um das FPGA zu resetten (damit es nicht während dem 
CPU-Zugriff versucht zu booten)

Allerdings muss man damit ziemlich aufpassen, da gibt's einige kleine 
dreckige Treiberdetails unter Linux. Und man kann sich damit auch 
aussperren, wenn das System ohne nichtinitialisiertes FPGA nicht booten 
kann.

Andere Variante, bei der man sich aber den eigenen Ast absägen kann:
Einen kleinen Softcore ins FPGA mit reinbacken, der sein eigenes SPI 
programmiert. Geht da aber was schief, kann man die Geschichte nur per 
JTAG wiederbeleben.

Grüsse,

- Strubi

von Bernd (Gast)


Lesenswert?

Ich habe mitlerweile Erfahrung mit Bootloadern, hat lange gedauert bis 
es auch unter wiedrigen Umständen lief (stecker ziehen und so), 
allerdings nur mit CPU Systemen.
Hab jetzt gelesen das der Spartan 6 das auch kann.
Erst die Booltloaderkonfig laden mit der dann im >Flash an zweiter 
Adresse das eigendliche Image geflasht wird, dann gibt es da wohl eine 
Reset der dann die zeite Startadresse nimmt. Soweit die Theorie.
Wenn man dierekt aus der CPU laden kann hat sich das ja im Prinzip 
erledigt. So der Plan (?!)

von Frankenfurter (Gast)


Lesenswert?

Bernd schrieb:
> Soweit die Theorie.

Geht auch in der Praxis. Das zweite image, dass der S6 im multi boot 
Modue verarbeiten kann, erleichtert die Sache insofern, als dass man das 
nicht per Hand triggern muss, wie zuvor mit PLDs oder MCUs.

von Thomas T. (knibbel)


Lesenswert?

Hallo!

Schau dir mal das "Spartan 6 Config User Guide" (ug380) von Xilinx an.

Dort ist auf Seite 28 der Schaltplan für den "Slave Serial Mode" 
abgebildet.

Vielleicht wäre das ja was für dich...

Gruß,
Thomas

von Der (Gast)


Lesenswert?

Hi!

Ich habe ein Verständnisproblem:

Strubi schrieb:
> auf diverser Hardware lade ich das FPGA jeweils per Slave-Serial von der
> Host-CPU aus per SPI.
Das verstehe ich so: "Normalerweise" lädt sich der FPGA seine 
Konfiguration aus einem EEPROM / Flash. Die CPU simuliert nun dieses 
EEPROM / Flash in dem es die Daten per SPI ausgibt.

Strubi schrieb:
> Muss man sich nur einen (einfachen) Kerneltreiber für basteln.
Wozu braucht man hier einen Kerneltreiber? Meiner Meinung nach reicht 
es, wenn in einem Teil im Flash der CPU die FPGA Konfiguration abgelegt 
ist. Die CPU gibt beim Booten einfach diesen Teil des Flashs aus.

Gruß

von Thomas T. (knibbel)


Lesenswert?

Der schrieb:
> Das verstehe ich so: "Normalerweise" lädt sich der FPGA seine
> Konfiguration aus einem EEPROM / Flash. Die CPU simuliert nun dieses
> EEPROM / Flash in dem es die Daten per SPI ausgibt.

Nicht ganz.

Der/das FPGA wird in einen Mode gesetzt, wo es auf Daten und Taktimpulse 
von einem externen Master (eben die CPU) wartet, verhält sich also 
passiv.

Da wird kein EEPROM / Flash simuliert, wo das FPGA aktiv taktet und der 
Speicher mit Daten antwortet.

Gruß,
Thomas

von Strubi (Gast)


Lesenswert?

Salute,

> Strubi schrieb:
>> auf diverser Hardware lade ich das FPGA jeweils per Slave-Serial von der
>> Host-CPU aus per SPI.
> Das verstehe ich so: "Normalerweise" lädt sich der FPGA seine
> Konfiguration aus einem EEPROM / Flash. Die CPU simuliert nun dieses
> EEPROM / Flash in dem es die Daten per SPI ausgibt.
>

Antwort gabs schon :-) s.o.

> Strubi schrieb:
>> Muss man sich nur einen (einfachen) Kerneltreiber für basteln.
> Wozu braucht man hier einen Kerneltreiber? Meiner Meinung nach reicht
> es, wenn in einem Teil im Flash der CPU die FPGA Konfiguration abgelegt
> ist. Die CPU gibt beim Booten einfach diesen Teil des Flashs aus.
>

Das "einfach" ist bei Linux eben nicht der Fall, normalerweise darf der 
User nicht einfach Pins toggeln. Deswegen ein Treiber, der das FPGA 
unter /dev/fpga0 oder ähnlich zugänglich macht, d.h. z.B. ein "cat 
firmware.bin >/dev/fpga0" programmiert dann die Kiste.

Alles klar?

von Strubi (Gast)


Lesenswert?

Frankenfurter schrieb:
> Geht auch in der Praxis. Das zweite image, dass der S6 im multi boot
> Modue verarbeiten kann, erleichtert die Sache insofern, als dass man das
> nicht per Hand triggern muss, wie zuvor mit PLDs oder MCUs.

Machst Du das über die ICAP_SPARTAN6?
Bisher haben mir viele erzählt, dass das so geht, aber halt immer mit 
dem "in der Theorie"-Disclaimer. Damals hatten nicht mal die 
Xilinx-Leute was am Laufen..(ist aber schon ne Weile her). Mir schien 
auch alles big X-typisch gezielt schlecht dokumentiert zu sein. Würde 
mich gerne eines besseren belehren lassen.

Ganz konkret würde ich gerne in Zukunft von SPI nur noch ein bootstrap 
laden, welches über einen Mini-Softcore das zweite "grosse" 
Firmwareimage nachlädt, und zwar während das System bootet. Dabei dürfen 
manche Pins nicht tristaten.
Falls dabei ein Glitch in der Versorgung auftritt, darf das System nicht 
fehlerhaft konfiguriert bleiben, sondern muss sich per Watchdog wieder 
komplett neuinitialisieren können.

Hat das schon jemand hinbekommen? (Und zwar wirklich praktisch!)

Grüsse,
- Strubi

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.