www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Teilweise rekonfigurierbare FPGAs


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo liebe Freunde,

gibt es FPGAs (oder CPLDs), die sich zur Laufzeit teilweise 
rekonfigurieren lassen, bzw. sich selbst rekonfigurieren können?

Gruß,
Thomas

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja gibt es. Die Xilinx Virtex 4, 5 und 6 können partielle 
Rekonfiguration. Wird auch immer besser von ISE unterstützt. Aber 
trotzdem ein sehr akademisches Thema seit Jahren. Da muss man schon jede 
Menge beachten...
Selbst komplett rekonfugieren geht mit allen FPGAs, die einen durch das 
eigentliche Design beschreibbaren Konfig-Speicher haben. Das kann auch 
ein Spartan 3 mit SPI-Flash sein. Dazu musst du ein neues Prom-File in 
den Flash packen und ein Config auslösen. Bei einigen geht das über ein 
internes, spezielles Modul, beim Spartan 3e aber beispielsweise nur über 
einen speziellen Pin am FPGA. Wir haben den PROG_B daher an einen I/O 
angeschlossen und können so per Kommando ein Rekonfigurieren auslösen.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wow, danke für die prompte Antwort!
Virtex währe absolut überdimensioniert.

Aber wenn ich das richtig verstanden habe könnte ich sowas machen:
- An einen LVDS Bus sind etliche FPGAs angeschlossen.
- Jedes der FPGAs bekommt einen SPI-Flash.
- PROG_B kommt an einen FPGA I/O
- Ein Minimalprogramm kann:
-- Daten über LVDS empfangen
-- In den Flash speichern
-- Eine Rekonfiguration auslösen.
- Dieses Programm kommt initial in alle Flashs.
- Jetzt kann ich alle FPGAs gleichzeitig über LVDS rekonfigurieren.
- Das neue Programm hat die oben beschriebene Funktion als Teilmenge.
- Diesen Vorgang kann ich jetzt beliebig oft wiederholen.

Problem:
Wenn bei der Übertragung etwas schief geht, dann müssen alle Flashs 
wieder einzeln neu geflasht werden.
Dieses Problem umgehe ich im Moment mit einem kleinen CPLD zwischen FPGA 
und LVDS. Dadurch spare ich auch den Flash.
Aber es gibt ja auch FPGAs mit internem Flash, daher der Gedanke.
Über den LVDS sollen übrigens auch andere Daten ausgetauscht werden.

Ist im Moment sowieso alles nur Konzeptphase...

P.S.
Was sagt man eigentlich bei FPGAs anstatt Programm bei uCs?

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, naja, wäre es dann nicht einfacher, irgendwo hin einen µC zu setzen, 
der die FPGAs über Slave Serial konfiguriert? Oder gibts außer dem 
LVDS-Bus keine extra Leitungen? Schief gehen darf natürlich nix, aber 
auch da gibts Möglichkeiten. Extendes Spartan 3A und Spartan 6 können 
verschiedene Files aus einem Flash laden, sogar mit Watchdog und 
Fallback, falls was nicht klappt. Somit könnte der "Bootloader" immer 
drin bleiben.

Wie man das nennt? Hmm....eigentlich den BitStream, aber auch gerne mal 
Design, Firmware, Configfile....

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es handelt sich hier um bis zu 50 FPGAs, die alle auf einem eigenen 
Board sitzen und alle dem selben Code ausführen sollen.
Dieser Code soll jederzeit beliebig austauschbar sein.
Mehrere Konfigurationen auf dem Flash würden das Problem also nicht 
lösen.
Ich denke die Lösung mit dem CPLD zwischen LVDS und FPGA ist schon nicht 
schlecht.
Dann habe ich wenigstens eine Firmware, wo keiner dran rumfummelt, also 
kann auch keiner was kaputt machen...

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was genau macht das CPLD jetzt? Irgendwie ist mir das nicht klar. 
Konfiguriert das den FPGA? Oder wie? Und wo genau ist jetzt das Problem?

Autor: Harald Flügel (hfl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im übrigen: So etwas geht nicht nur mit FPGAs von Xilinx. Andere 
Anbieter stehen dem nicht nach. Das ist Stand der Technik seit gut 3 
Jahren.

Der Sinn mehrer Konfigurationen im FLASH liegt in der Betriebsicherheit. 
Die Frage ist nämlich, wo das FPGA die neuen Konfigurationsdaten 
zwischespeichern soll. Wenn genügent RAM im FPGA oder außerhalb 
vorhanden ist, dann kann man die kompletten Konfigurationsdaten 
empfangen, prüfen, und erst dann ins FLASH programmieren. Wenn eine 
Zwischenspeicherung aber nicht möglich ist, dann muss man das FLASH 
sofort programmieren, und wenn jetzt einer über das Netzkabel stolpert 
ist eine ungültige Konfiguration im FLASH. Also schreibt man zwei 
Konfigurationen ins FLASH, lädt nach Power-up das "factory image", 
dieses prüft die zweite Konfiguration im FLASH und veranlasst das die 
Rekonfiguration.

Autor: Matthias G. (mgottke)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wie man das nennt?

"Multi Boot" heißt das Zauberwort bei Xilinx. Dafür wird kein zweiter 
Flash benötigt. Ich hatte mal einen ganz ähnlichen Fall, da wurden 
beliebig viele Module mit einem FPGA hintereinander gesteckt und seriell 
in einer Kette mit einem LVDS-Signal Verbunden (Ring-Struktur). Zum 
Einsatz kamen dabei FPGAs der Serie Spartan 3A.

Beim Power-Up wird automatisch immer das 1. Image (feststehendes 
Bootimage) vom Config-Flash geladen. Per Kommando über den Seriellen Bus 
wurden die FPGAs aufgefordert ihr 2. Image (anderer Speicherberich im 
Flash) zu laden. Sollte das Schief gehen oder nicht vorhanden sein, dann 
wird automatisch wieder das 1. geladen. Über den Ring wurde dann geprüft 
welches Image (Versionsnummer) aktiv ist. Gegebenenfalls kann, falls ein 
Update des 2. Image nicht geklappt hat, dieses wiederholt werden. Oder 
aber falls es nicht aktuell ist, ein neues eingespielt werden.

PS: Harald war schneller!!!

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Normalfall leitet das CPLD den Datenstrom vom LVDS einfach an den 
FPGA weiter.
Senden tut auf dem LVDS nur der Master (ein Echtzeitrechner).
Dieser kann auch die FPGAs konfigurieren.
Dazu sendet er einen bestimmten Befehl über LVDS.
Dieser wird von den CPLDs registriert, woraufhin sie vom State 
"Weiterleiten" in den State "Konfigurieren" wechseln.
Nun werden die FPGAs von den CPLDs mit den Daten vom LVDS neu 
konfigurieren.
Dieser Vorgang kann beliebig oft wiederholt werden.
Da die CPLDs eine fest einprogrammierte Firmware haben kann der Benutzer 
auch nichts kaputt machen.

Ein Problem gibt es nicht, meine Frage hast du ja bereits beantwortet.
Deine Meinung interessiert mich natürlich trotzdem, ist ja bisher auch 
nur ein Konzept.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn man nicht gerade eine unidirektionale Kommunikation hat, kann man 
auch erst mal alles ins Flash schreiben und dann ein Verify machen. 
Klappt zuverlässig. Multiboot ist natürlich etwas feiner, kann unser 3e 
leider nicht.

"Wie man das nennt?" War übrigens auf seine Frage nach der Bezeichnung 
des FPGA- "Programms" bezogen.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Harald & Matthias, sehr interessant.
Das Problem dabei ist, dass der Benutzer vollen Zugang zum FPGA hat.
Er müsste das also ständig in seine Designs mit einbauen.
Wenn er da mal Murks baut, dann muss man das Board ausbauen und neu 
flashen.
Ich denke, da ist die Lösung mit CPLD sicherer, oder wie seht ihr das?

Das ganze muss komfortabel und idiotensicher sein ;)

Autor: Matthias G. (mgottke)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wenn man nicht gerade eine unidirektionale Kommunikation hat, kann man
> auch erst mal alles ins Flash schreiben und dann ein Verify machen.

Wenn im FPGA kein µC implementiert ist, dann ist ein Verify schon etwas 
aufwendiger. Normalerweise geht beim Update auch nichts schief, so dass 
die indirekte Prüfung über eine Versionsnummer in meinem Fall völlig 
ausreichend war.

Was ich allerdings an dem Multiboot schätze ist, dass wenn es doch mal 
schief geht, kann man es wiederholen. In meinem Fall werden die Module 
beim Kunden über Fernwartung upgedatet und sind zudem noch so verbaut, 
dass man ohne größere Maßnahmen nicht dran kommt (IP-Wasserdicht mit 
vielen Schrauben und Dichtungen) um per JTAG-Adapter ein neues Image 
einspielen zu können.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso, na wenn das mit dem CPLD zuverlässig klappt ist doch eine gute 
Idee. Vor allem, wenn das FPGA eh nur flüchtig seine Config bekommt.

Klar, Multiboot hat unbetreitbare Vorteile. Aber wir sind zunächst 
gezwungen, den S3E zu benutzen. Image in SPI Flash schieben und komplett 
auslesen für ein Verify klappt allerdings auch problemlos. Reboot wird 
erst ausgelöst, wenn das Image korrekt drin ist. Natürlich fehlt dann 
der Watchdog, falls das Image an sich schon defekt ist oder Designfehler 
aufweist, aber in der nächsten Versions werden das wohl dann Spartan 6 
(falls es die dann endlich mal gibt), dann ist das vom Tisch. Zum Glück 
sind die Geräte halbwegs zugänglich.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.