Forum: FPGA, VHDL & Co. Spartan6, SPI-Flash indirect programming, Multiboot: Ein paar Fragen.


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von berndl (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hi allerseits,

ich arbeite gerade an der Definition einer neuen HW fuer einen 
Pruefstand, die soll prinzipiell so aussehen:

* Eine Karte mit uC (Atmel Cortex M3), Spartan6, NAND-Flash mit 2 FPGA 
Images. Der Spartan6 wird vom uC nach dem PON geladen. Das ist sehr 
aehnlich einer existierenden HW, nur auf ein neues Board verfrachtet.
* Mehrere 'Slave'-Karten mit Spartan6 und SPI-Flash zur Konfiguration. 
Diese Karten sollen 'ab Werk' mit Multiboot-Image programmiert werden, 
vermutlich via JTAG (indirect programming). Spaetere Feld-Updates sollen 
dann mit der uC-Karte/dortigem Spartan6 erfolgen (ueber eine schnelle 
Multiport LVDS-SPI).
* Die uC-Karte hat Netzwerk, darueber sollen auch die Updates 
eingespielt werden.

Die Slave-Karten sollen sich also immer aus dem SPI-Flash 'aus dem Sumpf 
ziehen'. Aber sie sollen halt ueber die Verbindung zum Master (der Karte 
mit dem uC) spaeter flashbar sein.

Was brauche ich dazu:

* S6 unterstuetzt Multiboot, also Header, golden Image (Fallback) sowie 
die eigentliche Anwendung im SPI-Flash.
* Das kann ich 'ab Werk' via JTAG mit Impact reinflashen
** Kann ich uebrigens dafuer auch sowas wie 'xc3sprog' verwenden? Ich 
verstehe bisher noch nicht, wie ich damit das SPI-Flash programmieren 
kann. JTAG-Adapter waere entweder Xilinx oder Digilent

* Was muss ich tun, damit spaeter, im laufenden Betrieb, ein neues 
'User-Image' in ein SPI-Flash geschrieben werden kann? Da laeuft dann ja 
mein 'User-Image' oder das 'golden Image'. Das muss die MP-LVDS zur 
uC-Karte sowie einen Teil zur Ansteuerung des SPI-Flash unterstuetzen, 
soweit klar.


Bevor ich hier jetzt noch mehr (langweilige) Details schreibe und keiner 
mehr mitliest, hat jemand zu dem o.g. eine Idee oder das schonmal 
gemacht oder ein paar gute Links? Die UGs von Xilinx habe ich denke ich 
alle schon durch und bin der Meinung, dass das machbar ist. Aber da ich 
demnaechst den Schaltplan 'absegnen muss' hier mal die Nachfrage nach 
Erfahrung damit.

Bin um jeden Tipp dankbar!

PS: Kann man 'indirect programming' mit xc3sprog ueberhaupt machen? Und 
geht das evtl. auch auf einem RaspberryPi? (waere fuers Hobby auch noch 
interessant)

von berndl (Gast)


Bewertung
0 lesenswert
nicht lesenswert
PS: Da solche Pruefstaende bei und >>10 Jahre in Benutzung sind, muss 
das ganze eben auch mit Nachfolgern des S6 funktionieren. Wenn ich das 
beim stoebern bei Xilinx richtig interpretiere, ist die 
Multiboot-Funktionalitaet bei Spartan7 (oder anderen 7-ern) gleich.
Damit koennte ich die gleiche EE-Architektur in ein paar Jahren auch mit 
z.B. S7 beibehalten. Das wuerde ansonsten ja wieder einen Rattenschwanz 
an Software-Aenderungen nach sich ziehen...

von berndl (Gast)


Bewertung
0 lesenswert
nicht lesenswert
berndl schrieb:
> bei und >>10 Jahre in Benutzung

argh, soll natuerlich
"bei uns >>10 Jahre"
heissen. Komisch, man sieht Schreibfehler niemals nienicht in der 
Vorschau. Nach dem absenden aber komischerweise sofort...

von Christian R. (supachris)


Bewertung
0 lesenswert
nicht lesenswert
Ja, xc3sprog kann meines Wissens angeschlossen SPI Flash programmieren. 
Was dann da drin ist, (SingleBoot, MultiBoot, Userdaten) ist dem doch 
egal.
Neuprogrammierung kann dann direkt über das laufende Design erfolgen, 
also über das Protokoll was die eh zum Unterhalten nehmen. So machen wir 
das. Klappt bei S6 und A7 nahezu gleich.

von berndl (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hi Chris,

super, danke fuer die Info! Gibt's bzgl. xc3sprog da irgendwo ein 
'how-to'?

von berndl (Gast)


Bewertung
0 lesenswert
nicht lesenswert
So, jetzt habe ich nicht nur am WE in meiner Freizeit, sondern heute 
auch auf Arbeit mal rumgehirnt...

Also, sowohl xc3sprog als auch z.B. Digilent Adept koennen SPI indirect 
programming. Gut! Aber das ist nur ein Teil meines Problems...


Ich brauche auf den Slave-FPGAs eine Applikation, die eigentlich genau 
das macht, was auch die Xilinx Cores fuer indirect programming machen. 
Aber halt nicht die JTAG Pins als Eingang, sondern meine 'golden Image' 
und auch 'User Image'.
Damit waere es ja einfach, vom entfernten Master-FPGA ueber SPI mit 
meinem Slave zu schwaetzen (halt JTAG Kommandos zu empfangen), die er 
dann 1:1 (Xilinx-IP) an das SPI-Flash zum programmieren weiter schickt.

Frage: Gibt es so eine IP? Also das was Xilinx mit der Uebersetzung von 
JTAG nach SPI macht, ich aber anstatt der JTAG Pins 'meine User-SPI' 
verwende?

Ich hab' da jetzt rumgesucht wie ein Depp, aber leider nicht wirklich 
was gefunden. Auch die App-Notes von Xilinx beziehen sich immer auf 
Impact und JTAG...

Ideen?

von Christian R. (supachris)


Bewertung
0 lesenswert
nicht lesenswert
Warum der Umweg über JTAG, wenn du eh schon per SPI mit dem Slave 
redest? Dann leite doch das SPI mit einem extra PIn geschaltet diekt auf 
den Boot Flash um. Dann kann dein Master den Flash direkt programmieren. 
Beim 7er brauchst du für die Ansteuerung des CCLK dann noch die STARTUP 
Primitive.

von berndl (Gast)


Bewertung
0 lesenswert
nicht lesenswert
hmm, ja, warum JTAG?
Letztendlich spiele ich doch dem Slave-FPGA Kommandos vor (via SPI), 
habe also auch darauf zu achten, dass diverse Timings zum Flash (via 
SPI, auf dem Slave) eingehalten werden. Wartezyklen z.B.. Und die 
stecken doch nicht im 'bitfile' des Slaves drin, das macht doch 
normalerweise Impact via JTAG. Also (denke ich) brauche ich da ein 
Interface zwischen 'bitstream in' und 'spi-out'.
Oder liege ich da jetzt komplett neben der Spur?

Die .mcs/.bit File wird ja vom uC der Masterkarte 'abgespielt'. Und 
irgendwo muss da ja ein Handshake stattfinden. Klar, wenn ich das auf 
dem uC der Masterkarte abhandeln koennte, waere natuerlich viel schoener 
als das auf dem Slave-FPGA zu tun.

Also kurzum: Ich verstehe noch nicht richtig, wie das funktionieren 
soll...


PS: Handelt sich im Moment um Spartan6. Spaeter mal, wenn HW-Updates 
notwendig werden, dann werden wir wohl PCB-Redesigns machen und auf S7 
umsteigen (und auch auf einen neueren Cortex-Mx). Muss ja "nur" 
SW-Kompatibel zum Host-Rechner sein...

von berndl (Gast)


Bewertung
0 lesenswert
nicht lesenswert
PS zum PS von obigem Post: Das ist auch so ein Grund, irgendwelche 
Vendor-IP zu vermeiden, wann immer es geht. Das ist zwar kurzfristig 
Klasse, aber langfristig holt es dich ein. Das fuehrt dann halt dazu, 
dass manche Sachen immer und immer wieder 'lokal' entwickelt werden...

von Christian R. (supachris)


Bewertung
0 lesenswert
nicht lesenswert
Naja das Bit File kommt 1:1 in den Flash. Aber du musst natürlich die 
Flash Kommandos alle abarbeiten, also z.B. immer das Status Register 
pollen nach dem Schreiben ob jetzt fertig ist. Bei Impact oder xc3sprog 
macht das dann ein kleiner Core der zuerst runter geladen wird. 
Kannst/musst du dann selber schreiben, wird halt eine große State 
Machine. Aber die ist auf dem uC DEUTLICH einfacher zu programmieren, 
daher mein Vorschlag. Macht übrigens der Rest der Welt auch so.

von Christian R. (supachris)


Bewertung
0 lesenswert
nicht lesenswert
BTW, auch Impact und xc3sprog haben den Algorithmus zur SPI Flash 
Programmierung in der Software, der core der vorher runter geladen wird, 
macht nur eine stupide Umsetzung von JTAG auf SPI. Deswegen dauert das 
auch so lange...

von Rudolph (Gast)


Bewertung
0 lesenswert
nicht lesenswert
xc3sprog liefert den Quellcode für das JTAG-to-SPI Image als 
Verilog-Datei mit. Das ist nicht kompliziert. Könnte man als Startpunkt 
für eine eigene Implementierung nehmen. Den JTAG-Teil tauscht Du halt 
gegen die verfügbare Schnittstelle aus.

Du solltest Dir aber besser die XAPP1081 ansehen. Die ist ziemlich 
generisch, für die Implementierung des "Remote Update Channels" musst 
also selber sorgen. Ab da läuft alles über Register und FIFOs, ist recht 
einfach zu benutzen.

von berndl (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Danke euch beiden, genau so werde ich es auch machen (die xapp1081 
kannte ich noch nicht)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.