FPGA - Selbst-Reset Funktion

Gast #3720996
Lesenswert?

Kann ich mit einem Output-Pin den FPGA dazu bringen, sich selbst neu zu 
laden? Ich möchte eine sichere INIT-Funktion haben, fall es zu einem 
Fehler kommt. Ein Microcontroller soll einen sicheren Code an den FPGA 
senden, den dieser decodiert und sich dann neu lädt.

Einfach einen OUTPUT über 50 Ohm an den PROG_PIN, der im Betrieb dann 
"Z" ist?  Der PROGRAM_B hängt über 4k7 an VCCO.

Muss ich noch was beachten? HSWAP_EN ist auf GND gezogen. Damit müssten 
die Ausgänge im Ladevorgang alle "Z" sind und es dürfte nichts 
püassieren (Resetschleife!).
#3721692
Lesenswert?

Richtig, beim S6 ist das wirklich ein Krampf. Das blöde ICAP Modul ist 
auch so richtig auf maximal komplex ansteuerbar gemacht (bits drehen, 
sehr langsame DRP Frequenz usw.). Ich wollt das mal machen, um den 
Fallback Status herauszubekommen, aber habs dann sein lassen. Beim Artix 
probier ich das demnächts mal wieder. An der PROG_B Leitung zupfen ist 
da viel praktischer ;)
#5232566
Lesenswert?

Weltbester FPGA-Pongo schrieb im Beitrag #5232547:
>> Bei vielen FPGAs geht das auch über interne Config Ports,
>> z.B. die ICAP bei Xilinx.
>
> @chris: Mal ausprobiert?
>
> Wir haben das Thema ja gerade wieder:
> Beitrag "Re: MAX1000 Erfahrungen"

Das Reboot über ICAP nicht, aber ich musste mir dann die Mühe machen, 
eine State Machine zu schreiben, die den Boot Status ausliest um zu 
erkennen, ob das Fallback oder das Update Image geladen wurde. Das geht 
zumindest auf dem Artix zuverlässig.
Für Reboot nehmen wir weiterhin den externen PROG_B Pin, über einen 0 
Ohm an einem I/O (für wenn man was ist).
Gast #5232571
Lesenswert?

Weltbester FPGA-Pongo schrieb im Beitrag #5232547:
>> Bei vielen FPGAs geht das auch über interne Config Ports,
>> z.B. die ICAP bei Xilinx.
>
> @chris: Mal ausprobiert?
Ja geht. Man triggert eine FSM, die die folgenden Kommandos an den ICAP 
schickt:
1
    constant config_data : config_data_t := 
2
    (
3
        x"ffff", -- dummy word
4
        x"ffff", -- dummy word
5
        x"ffff", -- dummy word
6
        x"aa99", -- sync word
7
        x"5566", -- sync word        
8
        x"3261", -- type 1 write 1 word to general1
9
        x"0044", -- multi boot start address [15:0]
10
        x"3281", -- type 1 write 1 word to general2
11
        x"6b00", -- opcode and multi boot start address [23:16]
12
        x"32a1", -- type 1 write 1 word to general3
13
        x"0044", -- fallback start address [15:0]
14
        x"32c1", -- type 1 write 1 word to general4
15
        x"0300", -- opcode and fallback start address [23:16]
16
        x"30a1", -- type 1 write 1 word to cmd
17
        x"000e", -- iprog command
18
        x"2000", -- type 1 noop
19
        x"2000", -- type 1 noop
20
        x"2000"  -- type 1 noop
21
    );
Ein externer Watchdog, wo man mal am Pin ziehen kann, ist einfacher.

Duke
Gast #5232914
Lesenswert?

Christian R. schrieb:
> Bei vielen FPGAs geht das auch über interne Config Ports, z.B. die ICAP
> bei Xilinx.

Ist zwar schon uralt, lösen lässt sich das Problem
schon seit zig Jahre, wie z.B. schon erwähnt bei
Xilinx (seit wann?) oder bei Altera (ab Stratix-1,
Arria-1 und Cyclone-III per RemoteConfig). Bei
Lattice gibt's glaube ich auch eine Möglichkeit.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren