Forum: FPGA, VHDL & Co. Daten nichtflüchtig speichern


von M. D. (wpmd)


Lesenswert?

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

von Christian R. (supachris)


Lesenswert?

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.

von M. D. (wpmd)


Lesenswert?

Christian R. schrieb:
> Welcher externe Flash ist das denn?

Wie oben schon geschrieben handelt es sich um den SST25VF016B Flash.

von usuru (Gast)


Lesenswert?

> SST25VF016B

Datenblatt: 100.000 Schreibzyklen (typisch). Wenn Dir das reicht, ok.

von M. D. (wpmd)


Lesenswert?

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.

von Christian R. (supachris)


Lesenswert?

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.

von M. D. (wpmd)


Lesenswert?

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.

von Lattice User (Gast)


Lesenswert?

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.

von Uwe (Gast)


Lesenswert?

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)

von oszi40 (Gast)


Lesenswert?

Uwe schrieb:
> ein kleinen seriellen extra speicher vorsehen.

...und vor Ausführung auf Plausibilität prüfen.

von Lattice User (Gast)


Lesenswert?

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)

von Christian R. (supachris)


Lesenswert?

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....

von Lattice User (Gast)


Lesenswert?

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)

von M. D. (wpmd)


Lesenswert?

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
Noch kein Account? Hier anmelden.