Hallo! Ich benutze ein Lattice ECP2M FPGA mit externem Flash (SST25VF016B). Beim starten des FPGAs holt sich dieser das Programm aus dem Flash. Soweit so gut. Jetzt hat sich jedoch die Situation ergeben, dass bestimmte Daten des Programms im Betrieb geändert werden müssen. Diese Änderungen an sich sind nicht das Problem. Ich suche aber nach einer Möglichkeit diese neuen Daten nichtflüchtig zu speichern. Mir kommen da spontan zwei Ideen: - Daten im Flash verändern, bzw. die entsprechenden Daten überschreiben. Ist das überhaupt möglich, oder können die Daten nur mit dem Programmer in das Flash gespeichert werden? - Externer, nichtflüchtigen Speicher. Die entsprechenden Daten liegen auf einem externen Speicher. Im "Hauptprogramm" welches im Flash liegt werden nach dem Start des FPGAs die entsprechenden Daten aus dem externen Speicher geholt. Diese Daten könnten dann im laufenden Betrieb überschrieben werden, so dass bei einem Neustart des FPGAs diese aktualisierten Daten geladen werden würden. Was haltet Ihr von diesen Ideen? Gibt es noch weitere Möglichkeiten dieses Problem zu lösen? Ich bin für jeden Tip dankbar. Matthias
Welcher externe Flash ist das denn? Bei Xilinx kann man SPI Flash (M25P usw.) zum Booten verwenden. Nach dem Booten sind die Pins normale IOs, und man kann den Flash neu programmieren. Ist ein normaler Vorgang zum Firmware Update. Ich vermute mal ganz stark, das wird bei dir auch klappen.
Christian R. schrieb: > Welcher externe Flash ist das denn? Wie oben schon geschrieben handelt es sich um den SST25VF016B Flash.
> SST25VF016B
Datenblatt: 100.000 Schreibzyklen (typisch). Wenn Dir das reicht, ok.
usuru schrieb: > Datenblatt: 100.000 Schreibzyklen (typisch). Wenn Dir das reicht, ok. Ja, das reicht mir. Die Daten werden nur relativ selten aktualisiert. Dann sollen aber auch diese aktualisierten Daten beim nächsten Start des FPGAs geladen werden. Mir stellt sich da nur folgende Frage: Ich flashe das vom Synthesetool erstelle bit- file in das Flash. Jetzt möchte ich entsprechende Daten überschreiben. Woher weiß ich denn wo im Flash diese Daten gespeichert sind damit ich sie überschreiben kann? Achso, die Geschwindigkeit spielt dabei eigentlich auch keine Rolle. Es handelt sich um max 4kByte die geändert werden sollen.
Sorry, hab ich überlesen. Flasht der direkt das Bit-File in den Flash? Oder gibts da ein Hex-File als Zwischenstufe? Im Hex-File stehen ja die Adressen drin. Was genau willst du denn ändern? Das Bit-File, also die Konfiguration des FPGA an sich, oder willst du in dem Flash zusätzlich zu deinem Bit-File noch andere Daten ablegen? Das Bit-File kannst du sicherlich nur als ganzes neu schreiben, denke nicht, dass man da einfach einen 4k-Bereich updaten kann.
Christian R. schrieb: > Was genau > willst du denn ändern? Das Bit-File, also die Konfiguration des FPGA an > sich, oder willst du in dem Flash zusätzlich zu deinem Bit-File noch > andere Daten ablegen? Also, in dem Bitfile wird unter anderem ein Speicher im FPGA konfiguriert in dem bestimmte Werten stehen. Diese Werte werden für eine Berechnung benötigt. Jetzt kann ich den Speicherinhalt, also die Werte über eine Schnittstelle vom PC aus verändern. Ich möchte aber, dass diese veränderten Werte bei einem Neustart des FPGA noch in diesem Speicher stehen. Also möchte ich gewissermaßen schon die Konfiguration ändern. Hab mir aber schon gedacht dass ich da nicht einfach die Konfiguration im Flash verändern kann. Es müsste aber doch möglich sein, zusätzlich zu dem Bitfile, die aktuellen Daten abzulegen (also im Speicherbereich hinter dem Bitfile). Nach einem Neustart und der konfiguration des FPGA müsste ich nur einmal auf den entsprechenden Speicherbreich im Flash zugreifen und die Daten herausholen.
Beim ECP2M geht das nur wenn man den Flash parallel an normale IO's anschliesst. Man muss dann natürlich aufpassen dass beim Startup bzw Reconfiguration hochohmig sind. Der MCLK Pin steht nicht als normaler IO zur Verfügung, die anderen müsste man nachschauen.
Was passiert falls es ein Fehler beim Beschreiben des Flashs gibt. Wird dann die FPGA Konfiguration eventuel zerstört ? Also ich würde im FPGA Design ein kleinen seriellen extra speicher vorsehen. Dieser würde die Fehleranfälligkeit des Systems verbessern. Es gab aber z.B. bei Xilinx die Möglichkeit den Bitstream selbst zu erzeugen. Dies ist aber einzigartig bei FPGAs und nur für Virtex und zu Forschungszwecken. Hiermit kann man sich seine eigenene Synthesetools bauen. http://www.xilinx.com/support/documentation/application_notes/xapp151.pdf Wenn man sich mit FPGAs beschäftigt ist das wohl die Ausführlichste Literatur. Dieses Appnote wird auch nicht unbeding an die Große Glocke gehängt. Ich habe schon öfters überlegt ob ich mir ein paar alte Virtex besorge und damit herumspiele. Bei dir könnte noch partielle reconfiguration helfen (ob das bei deinem FPGA geht ist eine andere Frage)
Uwe schrieb: > ein kleinen seriellen extra speicher vorsehen. ...und vor Ausführung auf Plausibilität prüfen.
Uwe schrieb: > Was passiert falls es ein Fehler beim Beschreiben des Flashs gibt. Wird > dann die FPGA Konfiguration eventuel zerstört ? Der ECP2M kann auch dual Boot. Fallback wäre also möglich. Trotzdem ist es keine gute Idee die Konfiguration selbst zu manipulieren, da man neben dem Inhalt des EBR (= BlockRam) auch einige CRC berechnen muss, einschliesslich einer globalen für den gesamten Bitstream. Im Flash ist allerdings genug Platz frei um neben dem Bitsream auch andere Dinge zu speichern. Man muss dazu nur das Zugriffsproblem auf den Flash lösen. (Parallel an IOs beim ECP2M oder auf ECP3 umsteigen)
Fraglich ist auch, ob die EBR Daten linear im BitStream abgelegt sind. Das wage ich zu bezweifeln. Erst recht, wenn man größere RAM-Bereiche zusammenbaut aus den einzelnen Primitiven....
Christian R. schrieb: > Fraglich ist auch, ob die EBR Daten linear im BitStream abgelegt sind. Ganz sicher nicht der Fall. Aus der Sicht des Bitsreams hat ein EBR einfach nur 18432 Bits. Wie diese verteilt sind hängt von der Konfiguration ab. Bei einer typischen 2k * 8 Konfuguration dürfte jedes 9. Bit unbenutzt sein. Beim ECP2M kann der Bitsream obendrein aich noch komprimiert sein. Das alles ist aber nicht dokumentiert, auch das Bitstreamformat ist nur ganz grob in angerissen. (Siehe Lattice TN1108 + TN1109 für den ECP2M)
Ok, vielen Dank für die vielen Infos. Wenn ich das so lese, denke ich, dass es am einfachsten ist einen zusätzlichen externen Speicher (SPI) vorzusehen. Aus diesem kann ich mir dann die entsprechenden Daten holen und in den dafür vorgesehen EBR laden.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.