Forum: FPGA, VHDL & Co. Cyclone V flashen


von Christian F. (feuerwerk)


Lesenswert?

Hi zusammen

Ich hab ein Cyclone V GX Starter Board (Terasic). Um FPGAs/VHDL kennen 
zu lernen versuche ich gerade einen Atmega168 nachzubauen. Nun möchte 
ich den Opcode SPM (StoreProgramMemory) nachbauen um nicht jedesmal das 
FPGA-Projekt neu bauen zu müssen wenn ich was an der µC-Sofware ändere.

Meine Frage:
Was für Möglichkeiten habe ich die Memory-Initialisation nach einem 
Reset des FPGAs durch Mittel des FPGAs selbst umzuschreiben? Ich nehme 
mal an der Cyclone V hat ein eingebautes Stück Flash was sich auf 
anderem Wege als über die Quartus-Software beschreiben lassen müsste. 
Ich hab mal im IP-Katalog geschaut, da gibt es auch einen Altera 
Parallel Flash Loader, aber der scheint, soweit ich das verstanden habe 
nur für externes Flash gedacht zu sein. Gibt es eventuell einen anderen 
IP sich der Cyclone in Teilen neu flashen lässt?

Grüße
Christian

von Dennis R. (dennis_r93)


Lesenswert?

Der Cyclone V hat keinen internen Flash-Speicher.
Die Externen Flashs sind dafür da die Konfiguration zu laden.
Beim Start liest der FPGA automatisch seine Konfiguration daraus.
Das Enthält auch den Speicherinhalt von Speicherblöcken.
Ich würde dir empfehlen den Flash mit Ramblöcken zu Simulieren und 
Schreibbefehle auf den Flash auf den RAM umzuleiten.

Der Nachteil ist aber, dass im Gegensatz zum Original, der simulierte 
Flash Inhalt bei einem FPGA-Neustart zurückgesetzt wird.

Wenn du möchtest, dass das auch einen FPGA-Neustart übersteht musst du 
einen externen Speicher (SPI-Flash, SRAM mit Batterie, o.ä.) ansteuern 
und die Werte dort speichern. Bei einem Start musst du den Inhalt wieder 
in das simulierte Flash laden.

von Christian F. (feuerwerk)


Lesenswert?

Danke für die hilfreiche Erklärung.

Ich nutze derzeit als Ersatz für den ProgMem-Flash normale RAM-Blöcke. 
Und meine Opcode-Implementierung von SPM arbeitet schon gegen das RAM.
Das für mich interessante ist, wie du bereits angedeutet hast, das 
Überstehen eines Neustarts.

Ich muss gestehen, ein SPI-Flash hört sich einfach an, das sollte ich am 
GPIO-Header anbringen können. Ich vermute mal sowas hier währe geeignet:
https://www.reichelt.de/EEPROM-seriell-SPI-Microchip/25LC640A-I-P/3/index.html?&ACTION=3&LA=2&ARTICLE=96662&GROUPID=4512&artnr=25LC640A-I%2FP

Grüße
Christian

von eingast (Gast)


Lesenswert?

Dann kannst du in deinem Design den Speicherinhalt mit einem "memory 
initialization file" (.mif) vorgeben.

Danach musst du dann quartus_cdb --update_mif und quartus_asm aufrufen, 
um das .mif in dein vorhandenes .sof einzubauen.

Ist auch ein bisschen Aufwand, aber du musst nicht das komplette Design 
neu übersetzen. Dein Board hat mit Sicherheit einen 
Konfigurations-Flash, auf dem ist normalerweise noch Platz.

von Christian F. (feuerwerk)


Lesenswert?

> Dann kannst du in deinem Design den Speicherinhalt mit einem "memory
> initialization file" (.mif) vorgeben.

Ich verwende derzeit ein .hex, aber der Unterschied ist ja marginal, 
soweit ich das gesehen habe.

> Danach musst du dann quartus_cdb --update_mif und quartus_asm aufrufen,
> um das .mif in dein vorhandenes .sof einzubauen.

Die Variante kannte ich noch nicht, das wird mir die Arbeit erheblich 
erleichtern, Danke :-)

> Dein Board hat mit Sicherheit einen Konfigurations-Flash, auf dem ist
> normalerweise noch Platz.

Tomaten & Augen. Hab gerade in den Datenblättern entdeckt, dass auf dem 
Board ein EPCQ256 mit 256 Mb verbaut ist. Mein .sof hat derzeit 4 MB und 
für das dauerhafte Speichern des ProgMems brauch ich nur 8 kB. Wie kann 
ich denn bestimmen welcher Speicherbereich des Flashs immer frei bleiben 
wird und somit den FPGA beim Starten nicht tangiert, sodass ich dort die 
8 kB ablegen kann?

Grüße
Christian

: Bearbeitet durch User
von eingast (Gast)


Lesenswert?

Meine Lösung würde das in dein .sof einbauen, das du dann neu schreiben 
musst.
Du kannst aber auch im Configflash ausrechnen wo das .sof endet und dein 
File da reinschreiben. Ich meine das .sof landet standardmässig bei 
Offset 0, d.h. rechne 0 + 4MB + Angstpuffer und schreib es rein.

Wenn dann doch dein .sof überschrieben wird kriegt der FPGA einen 
CRC-Fehler beim konfigurieren und die DONE-LED leuchtet nicht.

> ein EPCQ256 mit 256 MB verbaut ist.
256MBit!

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.