Forum: FPGA, VHDL & Co. Xilinx FPGA / PowerPC - Bootloader


von andrgrau (Gast)


Lesenswert?

Hallo,

ich bin gerade dabei mich in Xilinx FPGA und v.a. in den PowerPC 
einzuarbeiten. Es geht darum, dass ich Software für den PowerPC 
schreiben soll/darf ;) Die Hardware selber, also die Konfiguration des 
Boards bzw. des FPGAs ist nicht meine Aufgabe, bei mir geht es nur darum 
C Code für den PowerPC zu schreiben.
Die Xilinx Website habe ich schon gut durchforstet, auch sonst alles 
mögliche, was Google mir liefert, jedoch bin ich noch nicht sooo weit 
gekommen.

Bei mir geht es wahrscheinlich in die Richtung, dass ich eine Art 
Bootloader für den PowerPC schreiben soll, d.h. den PowerPC 
initialisieren. Jedoch weiß ich noch nicht ganz genau, inwieweit es da 
viel/etwas zu initialisieren gibt ^^
Hat auch jemand Erfahrungen mit dem Xilkernel von Xilinx? Da bin ich 
auch noch nicht ganz dahinter gestiegen.

Zum Einarbeiten werde ich wohl nur ein paar simple Programme schreiben, 
die über die serielle Schnittstelle Daten ausgeben bzw. einlesen; die 
LEDs auf dem Board blinken lassen; Schalter einlesen ... also recht 
triviale Dinge :)

Vielleicht hat jemand von euch ein bisschen Beispielcode für leichte 
Sachen oder grundlegende Sachen, die einem helfen, sich mehr 
einzuarbeiten ... zwar bietet Xilinx auch ein bisschen was an, das läuft 
aber doch meistens nicht wirklich auf C Code hinaus.

Vielen Dank schon einmal! :)

von Thorsten (Gast)


Lesenswert?

Auf welche Softwaretools von Xilinx hast du denn Zugriff / mit welchen 
arbeitest du?

Habe schonmal ein Virtex4 incl. Powerpc von einem Flash booten lassen. 
Xilinx liefert da schon recht viel fertiges mit.

Hast du ein Flashprom von dem der Code booten soll, oder wie ist deine 
Hardware geplant?

Thorsten

von Thomas Ulrich (Gast)


Lesenswert?

Daran hätte ich auch Interesse.

von andrgrau (Gast)


Lesenswert?

Hallo,

vielen Dank fü deine Antwort.

Prinzipiell habe ich Zugriff auf alle Softwaretools von Xilinx, d.h. vor 
allem ISE/EDK/SKD, bald auch ModelSim zur Simulation.

Wie der genaue Aufbau des Boards sein wird, kann ich im Moment noch 
sagen, es wird auch kein Standard-Board (Evaluation Board) sein. Aber 
ein non-volatile memory wird auf jeden Fall zur Verfügung stehen, in 
welcher Form weiß ich jedoch momentan noch nicht.

Mir geht es vor allem darum, zu wissen, was genau "gemacht" werden muss, 
um den PowerPC zu "booten", welche Möglichkeiten mir da zu Verfügung 
stehen

Achja, es handelt sich um ein Virtex-4 FX100 FPGA, also mit PowerPC 405.

Vielen Dank & Gruß!

von sepp (Gast)


Lesenswert?

Es gibt von Xilinx ein Board Support Package für den PPC. Und Beispiele 
gibt es auch einige. Die meisten sind für das ML405 bzw. ML403. An 
deiner Stelle würde ich mir ein ML405/403 zulegen.
Eine Bootloader gibt es meines wissens auch schon. Das sollte alles beim 
EDK dabei sein.

PLC2 bietet auch Schulungen in dem Bereich an.

von sepp (Gast)


Lesenswert?

Praktikum / Diplomarbeit?

von andrgrau (Gast)


Lesenswert?

^^ Du hast es erfasst, ich mache eine Art Praktikum :)
Ich bin auch der erste, der sich damit beschäftigt, daher gibt es auch 
noch keine ersten Erfahrungen oder Informationen.

Wie meinst du, dass ein Bootloader schon beim EDK dabei ist?

Das folgende habe ich angefangen zu schreiben und habe dann selber 
einiges an "Doku" gefunden, dir mir schon weiterhelfen.

Ein Beispiel von Xilinx:
1
#include "xgpio.h"
2
#include "xparameters.h"
3
#include "xuartlite.h"
4
#include "xtime_1.h"
5
6
main() {
7
    XGpio gp_out;
8
    XGpio gp_in;
9
    XUartLite uart;
10
    int i, k, j=0;
11
12
    // Initialize UART-Lite
13
    XUartLite_Initialize(&uart, XPAR_MYUART_DEVICE_ID);
14
15
    // Initialize GPIO used as an output for the LED
16
    XGpio_Initialize(&gp_out, XPAR_MYGPOUT_DEVICE_ID);
17
    XGpio_SetDataDirection(&gp_out, 0x00000000);
18
19
    .....

Sehe ich das richtig, dass meine einzige Referenz auf die verwendeten 
Funktionen in den Source/Header Files sind, und wie ich eben rausfand, 
die automatisch generierten html-docs aus den Source/Header Files!? Den 
Rest muss ich mir dann irgendwie aus den Datenblätter zusammensuchen, 
z.B. wie in dem Beispiel die "DataDirection"?

In dem obigen Beispiel bedeutet das also, dass z.B. 
XPAR_MYUART_DEVICE_ID durch den vergebenen Namen festgelegt wurde?
Ich steig da momentan noch nicht so ganz hinter alles bzw. mir fehlt 
gerade eine klare Referenz/Doku auf die Programmierung ^^ Ich seh schon, 
dass das eine langes Suchen wird.

Vielen Dank & Gruß!

von Thorsten (Gast)


Lesenswert?

Der Virtex4 kann von selber nicht direkt von externem Flash (z.b.) 
booten. Macht aber nicht viel, wenn du erstmal den PPC grundlegend zum 
laufen kriegen willst.

Du musst dir im EDK dein Hardwaresystem zusammenklöppeln. Das geht recht 
einfach mit dem Base System Builder für fertige Xilinx Evalboard bzw. 
noch einigermaßen komfortabel für eigene Hardware (hab das ganze 
Prozedere mit einem VFX20 auf eigener Platine durch).
Hierbei musst du allerdings alle Pins im ucf File selber definieren für 
deine Hardware.

Für den Anfang reicht es erstmal einen recht großzügigen (~32kb und 
mehr) Blockram als Daten und Instruktionsspeicher zu nehmen. Der Vorteil 
ist, dass dein Programm gleich mit ins Xilinx Prom mit reinkann (PPC 
startet dann wirklich direkt nach dem Einschalten mit dem Programm).

Wenn du mit dem EDK ein neues xmp Projekt erstellst bekommst du 
eigentlich 2 Softwareprojekte als Beispiel miterstellt. Meistens 
"TestApp_Memory" und "TestApp_Peripheral" evtl. noch "ppc405_bootloop". 
Da kannst du eigentlich schon drin losprogrammieren.

Zum externen Flashprom für Xilinx-Kernel (spätestens mit Xilkernel 
reicht der interne Blockram nicht mehr aus, da brauchst du was externes 
wie DDR-1 oder 2 RAM für den Arbeitsspeicher) könntest du im EDK mal das 
Datenblatt für den "XPS Multi-Channel External Memory Controller / 
xps_mch_emc" anschauen. Da läuft mein 4MB Flashprom dran.

Zur Xilinx Dokumentation sag ich jetzt mal nichts....
Die Sourcefiles hast du ja schon gefunden :) viel mehr gibts oft nicht

Thorsten

von andrgrau (Gast)


Lesenswert?

Thorsten, danke für deine Antwort!

Das Hardwaresystem wird ein anderer zusammenklöppeln, ich krieg das dann 
hingestellt :) Werd da selber nichts machen, auch nicht in der udf o.ä. 
:)
Momentan arbeite versuche ich mich halt an einem ML403 zumindest in 
hinsicht Simulation ... die auch noch nicht wirklich funkioniert ^^

[quote]
1
Für den Anfang reicht es erstmal einen recht großzügigen (~32kb und
2
mehr) Blockram als Daten und Instruktionsspeicher zu nehmen. Der Vorteil
3
ist, dass dein Programm gleich mit ins Xilinx Prom mit reinkann (PPC
4
startet dann wirklich direkt nach dem Einschalten mit dem Programm).
[/quote]
Das frage ich mich eh, wie das dann ist, wenn ich mehrere "Applicaion 
Projects" habe, wie z.B. die von dir erwähnten TestApp_Peripheral und 
_Memory und dann vll noch ein eigenes ... er führt ja dann nicht alle 
aus. Da sag ich ihm ja dann mit dem Haken "Mark to initialize BRAM", 
welches er dann gleich laden soll. Richtig? :)

Ich weiß nun sicher, dass auf dem Board definitiv ein DDR-Ram sein wird 
und ein Flash-Speicher, außerdem ein USB-Interface. Aber das dauert noch 
ein bisschen, muss ja erstmal die grundlegenden Sachen verstehen und 
dann irgendwann hinkriegen :)

Vielen Dank & Gruß!

von Thorsten (Gast)


Lesenswert?

>>
Das frage ich mich eh, wie das dann ist, wenn ich mehrere "Applicaion
Projects" habe, wie z.B. die von dir erwähnten TestApp_Peripheral und
_Memory und dann vll noch ein eigenes ... er führt ja dann nicht alle
aus. Da sag ich ihm ja dann mit dem Haken "Mark to initialize BRAM",
welches er dann gleich laden soll. Richtig? :)
<<

Genau richtig.
Der Teil der als BRAM Init markiert ist, wird dann später in ISE unter 
dem Build-Punkt "Update Bitstream with Processor Data" in das Bitfile 
integriert und wandert somit mit ins Xilinx Bootprom.
Später wird dann wahrscheinlich an der Stelle der Bootloader stehen (Den 
Xilinx für übliche parallele Flashprom mitliefert), der dann das 
Programm aus dem Flash ins DDRRam lädt und dorthin springt.

Was ich noch nicht ganz mitbekommen habe ist, ob du wirklich ein ml403 
bei dir auf dem Tisch hast? Wenn ja, kann man damit mit dem EDK ein 
System zusammenbauen lassen um sich dort einige Sachen abzugucken. So 
bin ich das ganze angegangen.

Gruß

von andrgrau (Gast)


Lesenswert?

[quote]
1
Genau richtig.
2
Der Teil der als BRAM Init markiert ist, wird dann später in ISE unter
3
dem Build-Punkt "Update Bitstream with Processor Data" in das Bitfile
4
integriert und wandert somit mit ins Xilinx Bootprom.
5
Später wird dann wahrscheinlich an der Stelle der Bootloader stehen (Den
6
Xilinx für übliche parallele Flashprom mitliefert), der dann das
7
Programm aus dem Flash ins DDRRam lädt und dorthin springt.
[/quote]

Gut, dann habe ich das richtig verstanden :)
Aber ich stell mir jetzt einfach folgendes vor. Ich hab jetzt 3 
"Application Projects" und eines davon ist als Init BRAM markiert, d.h. 
das wird dann automatisch geladen ... kann jetzt mein Bootloader sein 
oder sonst was. Wie krieg ich es dann hin, dass es die anderen 2 
"Programme" auch lädt, also wie greif ich auf die zu? Muss ich die 
seperat (z.B. auf den Flash) übertragen und dann an die Adresse 
springen?
Das ist mir noch nicht ganz klar.

Nein, ich habe leider kein ML403 vor mir stehen, auch wenn ich es gerne 
hätte ^^ Ich habe mir mit dem BSB ein ML403 erstellt, auf dem ich 
momentan teste und dann ein bisschen simulier bzw. das Simulieren 
funktioniert noch nicht wirklich ^^ Das richtige Board, das irgendwann 
mal vor mir stehen wird, dauert noch ein bisschen.

Vielen Dank & Gruß!

von Thorsten (Gast)


Lesenswert?

>>
Wie krieg ich es dann hin, dass es die anderen 2
"Programme" auch lädt, also wie greif ich auf die zu? Muss ich die
seperat (z.B. auf den Flash) übertragen und dann an die Adresse
springen?
<<

Dafür hat Xilinx die XMD Debug Konsole dabei. Dafür brauchst du im PPC 
Design ein Debug Module. Das sollte eigentlich standartmäßig vom System 
Builder dabei sein.

Mit dem XMD kannst du den PPC kontrollieren, stoppen, ein neues *.elf 
File hochladen und dass dann starten.

Wenn du XMD übers EDK aufrufst, verbindet er sich afaik automatisch mit 
deinem Board übers Xilinx JTAG Kabel. Wenn du XMD aus dem SDK startest 
muss man noch in der console mit "connect ppc hw" oder "connect mb mdm" 
(ppc <-> microblaze) auf den Prozessor zugreifen.

paar nützliche Befehle:

stop - stoppt prozessor
dow <filename.elf> - lädt neue software hoch
run - startet den prozessor wieder an startaddresse

Wie man mehrere Programme z.b ins Flash oder Xilinxprom bekommt weiß ich 
nicht. Habe es wie oben beschrieben immer nur zum debuggen benutzt.

Gruß

von andrgrau (Gast)


Lesenswert?

Danke für die Hilfe, Thorsten. Du hast mir schon sehr viel geholfen.

Wenn ich Glück habe, kann ich diese Woche schon anfangen auf dem Board 
ein bisschen zu arbeiten, oder erst nächste Woche. Dann bin ich mal 
gespannt, ob das mit dem Debuggen/JTAG auf Anhieb funktioniert ... ich 
glaubs ja noch nicht wirklich ;)
Das Simulieren habe ich jetzt auch hinbekommen, so dass ich jetzt 
wenigstens ein bisschen damit rumspielen kann :)

Hast du mit dem Xilkernel auch schon was gemacht? Die Frage, ob es 
sinnvoll ist, den zu benutzen, kann ich mir eigentlich sparen, das kommt 
ja drauf an, was ich damit machen will und das weiß ich selber noch 
nicht genau :)
Aber gut, was steht mir mit dem Xilkernel alles für Möglichkeiten offen, 
das würde mich mehr interessieren.

Vielen Dank & Gruß!

von Thorsten (Gast)


Lesenswert?

Hi,

ja ich habe Xilkernel schon benutzt im zusammenhang mit Ethernet über 
die XPS_ll_temac und lwip.

Auf der einen Seite ist es sehr angenehm mit Threads zu arbeiten um so 
eigenständige sachen in eigene Funktionen auszulagern, die dann so vor 
sich hin laufen.
Auf der anderen Seite kann man sich damit geschwindigkeitsmäßig auch 
ganz gut ins eigene Bein schiessen, je nach dem welchen Schedulermodus 
man verwendet (Priorisert / Round-Robin).
Da muss man die Vor und Nachteile für seine Anwendung abwägen.
Xilkernel selber ist auch ein ziemliches Durcheinander was Dokumentation 
von Xilinx angeht, aber das ist ja nichts neues.

Viel Glück

Thorsten

von Christoph (Gast)


Lesenswert?

Hi,

ich schreibe grad Diplomarbeit und habe mich zu Beginn auch kurz mit der 
EDK beschäftigt (microblaze implementiert und reference designs laufen 
lassen). Für mich war damals diese Seite ganz hilfreich, so als 
Einstiegshilfe:

http://www.fpgamac.com/html/edk.html

Da gibts ein paar Tutorials zu EDK, Modelsim, und auch zum XMD mit den 
ganzen Befehlen und so. Vielleicht bringt es dir ja was.

Gruß,
Christoph

von andrgrau (Gast)


Lesenswert?

Hi!

Ok, ich denke, der Xilkernel wird dann wahrscheinlich nichts für mich 
sein, so weit soll es doch nicht gehen  :)

fpgamay.com kenne ich schon, aber dennoch vielen Dank, Christoph. Sie 
Seite hat mir schon weitergeholfe.

Ich habe momentan nur noch ein paar Probleme mit ModelSim bei der 
Simulation, aber dafür mache ich lieber einen neuen Thread auf.

Dank euch für alle Antworten, ihr habt mir schon sehr geholfe. Gruß.

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.