Forum: FPGA, VHDL & Co. Cyclone: config flash ISP im Betrieb möglich?


von Andreas R. (df8oe)


Lesenswert?

Hallo an alle,

ist es möglich den Config-Flash an einem Cyclone mittels einer MCU neu 
zu programmieren, während der FPGA seine für ihn vorgesehene Aufgabe 
erledigt?

Hintergrund:
Wenn ich das richtig verstanden habe lädt der FPGA beim Start "seine" 
Konfiguration aus dem externen SPI-Flash in seine Register (wenn er so 
konfiguriert ist).

Wenn die Konfiguration geladen ist wird nicht mehr auf den Flash 
zugegriffen - richtig?

Wie verhalten sich in diesem Zustand (FPGA hat seine Konfiguration 
geladen und erledigt seine Aufgabe) die Leitungen des FPGA zum Flash? 
Sind die Tristate? Kann man mit einem Mikrocontroller den Flash neu 
programmieren während der FPGA "seine" Aufgabe erledigt? Muss man dazu 
eventuell mit einem Pegel an einem FPGA-Pin den Flash abkoppeln (== 
tristaten) ?? Falls ja: beendet dieses "abkoppeln" auch die aktuelle 
Arbeit des FPGA (das wäre nicht so schick...)?

Ich habe schon sehr viele Intel / Altera Datenblätter gewälzt aber auf 
exakt diese Fragen keine Antwort gefunden...

von User (Gast)


Lesenswert?

Nach der Konfiguration des FPGA kannst du über cyclone_asmiblock auf den 
Flash zugreifen. Siehe auch 
Beitrag "Re: Cyclone 1 : Config Flash als Datenspeicher?"
Wenn du von extern zugreifen willst, kannst du das auf Tri-State 
schalten:
set_global_assignment -name USE_CONFIGURATION_DEVICE ON
set_global_assignment -name CYCLONE_CONFIGURATION_DEVICE EPCS4
set_global_assignment -name RESERVE_ASDO_AFTER_CONFIGURATION "AS INPUT 
TRI-STATED"

von Paul M. (paul_ma)


Lesenswert?

Hallo,

https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/ug/ug_altasmi_parallel.pdf

Damit kann man relativ einfach den Konfig-Flash (z.B. EPCS) vom FPGA 
ansprechen (lesen/schreiben/löschen). Man kann sich dann noch im FPGA 
eine Schnittstelle zum Mikrocontroller bauen und dann kann der 
Mikrocontroller auf den Flash zugreifen.

Viele Grüße,
Paul

von Andreas R. (df8oe)


Lesenswert?

Danke für eure Antworten! Ich habe zunächst diese Lösung probiert:

########################################################################
Wenn du von extern zugreifen willst, kannst du das auf Tri-State
schalten:
set_global_assignment -name USE_CONFIGURATION_DEVICE ON
set_global_assignment -name CYCLONE_CONFIGURATION_DEVICE EPCS4
set_global_assignment -name RESERVE_ASDO_AFTER_CONFIGURATION "AS INPUT
TRI-STATED"
########################################################################

Ich habe es sowohl im .qsf und als das nichts änderte wahlweise im .sdc 
eingefügt - aber das resultierende Bitfile ändert sich auch dadurch 
nicht. Dementsprechend ist auch das Verhalten der Leitungen vom Flash 
zum FPGA unverändert: alle Leitungen bis auf CLK (Pin 6) sind tristated 
- aber der CLK liegt auf L. Ich bin noch ziemlich am Anfang was den 
Umgang mit FPGAs angeht - mache ich was falsch? Diese Zeilen KÖNNEN in 
dem .qsf eingetragen werden. Aber besser sind sie im .sdc aufgehoben - 
oder ist das völlig falsch?

von Paul M. (paul_ma)


Angehängte Dateien:

Lesenswert?

Andreas R. schrieb:
> Danke für eure Antworten! Ich habe zunächst diese Lösung probiert:
>
> ########################################################################
> Wenn du von extern zugreifen willst, kannst du das auf Tri-State
> schalten:
> set_global_assignment -name USE_CONFIGURATION_DEVICE ON
> set_global_assignment -name CYCLONE_CONFIGURATION_DEVICE EPCS4
> set_global_assignment -name RESERVE_ASDO_AFTER_CONFIGURATION "AS INPUT
> TRI-STATED"
> ########################################################################

Was mir noch einfällt: ASDO ist nur einer der Pins des AS-Interfaces.
Im Quartus GUI gibt es unter "Assignments" -> "Device" -> "Device and 
Pin Options" -> "Dual-Purpose Pins" ein Fester (siehe Anhang), wo man 
für alle Pins des AS-Interfaces die Funktion einstellen kann.

von Andreas R. (df8oe)


Lesenswert?

Ja. Wenn ich in Quartus dieses Fenster öffne und den Pin DCLK anschaue 
dann kann man ihn aber nicht tristaten - nur als Ausgang setzen. Das ist 
unglücklich. Das einzige was mir dann noch einfallen würde wäre eine 
Hardwarelösung: der Clock am Flash wird via Pulldown an GND gezogen und 
der DCLK wird via Schottkydiode (Anode an DCLK Kathode an den Flash) 
beschaltet... Da der DCLK nach der Konfiguration dauerhaft auf L liegt 
müsste es so auch gehen (wenn der Spannungsabfall an der Diode nicht 
schon alles kaputtmacht).

von Paul M. (paul_ma)


Lesenswert?

Andreas R. schrieb:
> Ja. Wenn ich in Quartus dieses Fenster öffne und den Pin DCLK anschaue
> dann kann man ihn aber nicht tristaten - nur als Ausgang setzen. Das ist
> unglücklich. Das einzige was mir dann noch einfallen würde wäre eine
> Hardwarelösung: der Clock am Flash wird via Pulldown an GND gezogen und
> der DCLK wird via Schottkydiode (Anode an DCLK Kathode an den Flash)
> beschaltet... Da der DCLK nach der Konfiguration dauerhaft auf L liegt
> müsste es so auch gehen (wenn der Spannungsabfall an der Diode nicht
> schon alles kaputtmacht).

Oder Du nimmst das ASMI-Parallel Interface IP und baust Dir einen 
weiteren Zugang (z.B. SPI, UART) für den Mikrocontroller und lässt den 
FPGA die Kommunikation mit dem Konfig-Flash machen.

von Andreas R. (df8oe)


Lesenswert?

...oder ich lasse den Mikrocontroller als "Flash" ansprechen. Ich lasse 
den Flash also komplett weg und verbinde einen SPI-Bus meines 
Mikrocontrollers mit dem FPGA. Den SPI-Bus des Mikrocontrollers muss ich 
so mit Software hinterfüttern dass er sich wie ein Flash Baustein 
verhält.

Wirft denn Quartus auch irgendein Binärfile raus das ich auf diese Weise 
offerieren kann?

von Paul Ma. (Gast)


Lesenswert?

Andreas R. schrieb:
> Wirft denn Quartus auch irgendein Binärfile raus das ich auf diese Weise
> offerieren kann?

Seite 37
https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/ug/ug_altremote.pdf

von Andreas R. (df8oe)


Lesenswert?

Danke! Ich verwende noch die falschen Suchmuster - hatte ich nicht 
gefunden...

von Paul M. (paul_ma)


Lesenswert?

Es gibt auch hier ein Projekt, dass den Cyclone direkt vom Raspberry 
konfiguriert: https://github.com/pa3gsb/Radioberry-2.x
Da kannst Du abschauen, wie sie den Flash nachbilden.

von Andreas R. (df8oe)


Lesenswert?

Na das nenne ich ja mal eine Steilvorlage :) Danke für den Link - damit 
werde ich definitiv anfangen.

von Paul M. (paul_ma)


Lesenswert?

Andreas R. schrieb:
> Na das nenne ich ja mal eine Steilvorlage :) Danke für den Link - damit
> werde ich definitiv anfangen.

Cool, lass dann gerne wissen, wie es so klappt, denn in einem nächsten 
Projekt könnte ich das auch auch brauchen ;-)

von Paul M. (paul_ma)


Lesenswert?

Hier: 
https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/ug/ug_altasmi_parallel.pdf 
gibt es auf Seite 26 noch einen wichtigen Hinweis:

"When writing .rpd file for FPGA configuration purposes such as the 
application imagefor remote system upgrade, you need to swap the bit 
order for every byte from themost significant bit (MSB) to the least 
significant bit (LSB). This step is requiredbecause the FPGA 
configuration reads data from the EPCS/EPCQ/EPCQ-L/EPCQ-Adevices from 
LSB to MSB."

von Andreas R. (df8oe)


Lesenswert?

Ich werde mir einfach mal den Code vom Radioberry anschauen. Ist ja 
überschaubar...

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.