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