Forum: FPGA, VHDL & Co. Spartan-3E: FPGA-Konfiguration intern starten?


von Max S. (x-quadraht)


Lesenswert?

Hallo,

ich habe hier ein Projekt mit einem Xilinx Spartan-3E-FPGA (XC3S500E).
Ich programmiere den FPGA nur indirekt, beschreibe also einen externen 
SPI-Flash mit den Daten.
Gibt es die Möglichkeit, eine Neukonfiguration intern auszulösen, also 
quasi den PROG_B-Pin intern zu setzen?
Hört sich, meiner Meinung nach, nach einer einfachen und sinnvollen 
Sache an, ich habe aber bisher in den User Guides von xilinx nichts 
dergleichen gefunden.

Ich habe kurz mit dem MultiBoot-Feauture experimentiert, das lässt sich 
aber gar nicht erst auslösen wenn der configuration mode nicht BPI ist.

Hat jemand eine Lösung oder muss ich einen I/O verschwenden?

Viele Grüße,
  Max

von Christian R. (supachris)


Lesenswert?

Das hab ich auch schon erfolglos versucht. Leider scheint das nur beim 
BPI Multiboot vorgesehen zu sein. Ich weiß auch nicht, ob das mit dem IO 
am Prog_B klappt, schließlich gehen die IOs ja sofort dann in Tristate, 
wenn die Konfig startet. Aber eventuell reicht die "Hold" Zeit aus...

von Max S. (x-quadraht)


Lesenswert?

Doofe Sache. Kann ja nicht so schwer sein, wenn schon ein Pin mit der 
Funktion vorliegt...
Naja, hat wahrscheinlich einfach keiner dran gedacht.

von Uwe Bonnes (Gast)


Lesenswert?

JPROGRAM() in das IR Register schreiben...

von Christian R. (supachris)


Lesenswert?

Kommt man über das BSCAN_SPARTAN3 Ding an das Instruction Register? Ich 
meine, damit hat man nur Zugriff auf die User Register....

von Uwe Bonnes (Gast)


Lesenswert?

Falls die Rekonfiguration aus der Applikation erfolgen soll, UG332 
Kapitel 14 lesen. S3E kann mit SPI nur Rekonfiguration, kein Multiboot. 
Tabelle 14.1 spricht von "MBT input n STARTUP primitive"

Falls die Rekonfiguartion nach dem von aussen erfolgenden 
Reprogrammieren des SPI erfolgen soll, schau Dir mal den SVN Zweig von 
xc3sprog auf Sourceforge an. Dort kannst Du ueber einige unterstuetzte 
JTAG Adapter ein BSCAN_SPI Bitfile in den XC3SE laden, und dann den SPI 
Flash auslesen, mit vorgegebenen Muster (.bit oder .mcs) vergleichen 
oder mit .bit oder .mcs neuprogrammieren. Nach dem Neuprogrammieren wird 
ein Reconf ausgeloest und dann das neue Muster geladen. Ggf. musst Du 
das BSCAN_SPI Bitfile neu erzeugen, ein passendes .v File gibt es schon, 
nur das UCF File fuer die SPI pins fehlt noch.

von Max S. (x-quadraht)


Lesenswert?

Zunächst einmal vielen Dank für die Antworten, so viel hatte ich nicht 
erwartet :-)

@Uwe: Ich will ja kein MultiBoot, sondern einfach eine Rekonfiguration 
(von FPGA-Logik ausgelöst). Ich habe Kapitel 14 gelesen, und keine 
Referenz auf irgendeine Möglichkeit dazu gefunden.
[EDIT]Wenn ich den MBT-Pin am STARTUP-Primitive negativ pulse, passiert 
einfach gar nichts, was ich mir so erkläre, dass da eine Abfrage Mode == 
BPI drin ist. [/EDIT]

Mit dem BSCAN_SPARTAN3 kommt wohl wie Christian bemerkt hat nicht an das 
Instruction Register dran.

Das ganze hat den Hintergrund, dass der FPGA per Memory-Bus an eine CPU 
angebunden ist. Ich kann mit meiner Software bereits von der CPU aus 
neue Konfigurationen über den FPGA in den SPI-Flash schreiben. Jetzt 
fehlt halt nur noch der Selbst-Reset des FPGAs nach abgeschlossenem 
Schreibvorgang...

Viele Grüße,
  Max

von Christian R. (supachris)


Lesenswert?

...genau so eine Geschichte machen wir auch. SPI Flash über das Design 
neu bespielen (neue Firmware über USB flashen am Ende), aber ich hab 
außer Strom aus - Strom an bisher nix gefunden.

Mit dem IR beim BSCAN bin ich mir nicht ganz sicher, meine es mal in der 
Doku irgendwo gelesen zu haben, als ich mal verschiedene Sachen mit dem 
BSCAN Makro probieren wollte.

von Max S. (x-quadraht)


Lesenswert?

Christian R. schrieb:
> Mit dem IR beim BSCAN bin ich mir nicht ganz sicher, meine es mal in der
> Doku irgendwo gelesen zu haben, als ich mal verschiedene Sachen mit dem
> BSCAN Makro probieren wollte.

Das stimmt schon, hab gerade nochmal nachgeguckt. Damit das ganze 
BSCAN-Primitive überhaupt aktiv wird, muss von außen ein USER1/2 - 
Kommando geschickt werden, und dann kann mit TDO1/2 eigene Daten raus 
schicken -.-

Irgendwie ist einen I/O dafür zu nehmen echt unbefriedigend :-)

von Max S. (x-quadraht)


Lesenswert?

Update: Mit dem ICAP-Primitive geht das (unter anderem), aber das ist 
nur auf Spartan-3A verfügbar. Diese komplexe Operation bleibt dann wohl 
den teureren FPGAs vorbehalten :-(

von Uwe Bonnes (Gast)


Lesenswert?

@Max: Du verwendest nicht noch ISE8.1 und schematic entry?
AR #21680 - Spartan-3E - Multi-boot configuration does not work when the 
STARTUP_SPARTAN3E schematic symbol is used

von Max S. (x-quadraht)


Lesenswert?

Nein, "leider" nicht.
Ich benutze Verilog und ISE 10.1.

von Uwe Bonnes (Gast)


Lesenswert?

AR #22595 - Spartan-3E - Can the MBT pin be used in SPI mode or in any 
mode but BPI?
...
The Multi-Boot Trigger (MBT) on the STARTUP_SPARTAN3E component is only 
monitored when the mode pins are set to BPI. In all other configuration 
modes the MBT is ignored. To initiate a configuration in another 
configuration mode other then BPI, the PROG-B pin must be asserted.
...

Da hat wohl jemand beim Chipdesign geschlafen...

von Christian R. (supachris)


Lesenswert?

Max S. schrieb:
> Update: Mit dem ICAP-Primitive geht das (unter anderem), aber das ist
> nur auf Spartan-3A verfügbar. Diese komplexe Operation bleibt dann wohl
> den teureren FPGAs vorbehalten :-(

Sowas blödes. Besonders bekloppt finde ich, dass der recht teure Virtex 
4 überhaupt nicht von SPI Flash booten kann. Firmware Update im Felde 
fällt damit aus. Naja, hoffentlich kommt bald der Spartan 6, dann 
ersetzen wir den V4 durch den S6, dann geht das (und noch mehr).

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.