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!).
Bei vielen FPGAs geht das auch über interne Config Ports, z.B. die ICAP
bei Xilinx. Aber wir machen das genau so mit der Brücke zwischen IO und
PROG_B. Mit dem Hswap Pin kannst du ja eh nur zwischen Floating und
Pullup wählen, also keine Gefahr dass da jemand Low treibt.
Christian R. schrieb:> über interne Config Ports, z.B. die ICAP bei Xilinx.
Hab ich beim Spartan 6 probiert und es war ein Krampf. Mal ging es und
bei der nächsten Synthese wieder nicht. Ich habe dann auch die Variante
mit dem Pin gewählt.
Duke
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 ;)
Klakx schrieb:> Was spricht dagegen, dass der Microcontroller den Reset am FPGA> schickt/an der Leitung zieht?
Weil der einen halben Meter weit weg ist und seriall angeschlossen ist.
> 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"
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).
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
constantconfig_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
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.
Sigi schrieb:> Bei> Lattice gibt's glaube ich auch eine Möglichkeit.
Bisher habe ich die beim ECP3 wie auch ECP5 nicht gefunden, zumindest
nicht, wie sich die JUMP/REFRESH-Befehle aus der programmierten Logik
analog ICAP in den 'Bootloader' schicken lassen, ohne wüste
Hardware-Hacks. Wenn da wer den Trick kennt: ich wäre alle Ohren.