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! :)
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
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ß!
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.
^^ 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:
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ß!
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
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ß!
>>
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ß
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ß!
>>
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ß
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ß!
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
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
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ß.