Forum: FPGA, VHDL & Co. problem beim erstellen eines multicpu system mit microblaze


von Christian A. (belial)


Lesenswert?

Hallo,

ich arbeite an einem kleinen Projekt (uni bedingt) was sich mit der
erstellung eines multi cpu systems auf einem fpga board (xilinx virtex
2 und edk 7.1) befasst. Ich stehe aber mittlerweile vor einem Problem
wo ich nicht weiter komme, und dachte mir ich frage mal hier nach:

Ich habe zum testen 2 Microblazes instantiiert. Beide haben ihren
eigenen BRAM in denen zu testzwecken ein hello world prgramm läuft.
Beide microblazes hängen als master am OPB und geben das hello world
über die serielle schnittstelle aus. Das Programm was auf microblaze_2
läuft scheint jedoch abzustürzen, während es den text "hello world 2"
ausgibt ( es kommt unr ein "hello" an, dannach scheint es
abzustürzen).  Falls sich hier jemand etwas besser auskennt, würde ich
gerne einmal die MHS und MSS Dateien verlinken, ob ich vielleicht
irgendeinen groben "schnitzer" in meinem Design habe.

http://www.informatik.uni-oldenburg.de/~belial/multicpu/

Mit freundlichen Grüßen,

Christian

von yalu (Gast)


Lesenswert?

Ohne jegliche Ahnung vom Microblaze (oder vom EDK) zu
haben:

Du sprichst von der seriellen Schnittstelle. Teilen
sich beide Prozessoren eine Schnittstelle, so dass ein
Ressourcenproblem auftreten kann? Dann solltest Du den
Fehler eher in der Software suchen.

Hast Du auch mal probiert, auf dem ersten Prozessor kein
Programm laufen zu lassen (geht vielleicht gar nicht),
oder wenigstens eins, was möglichst wenig Interaktion
nach außen hat, z. B. eine Leerschleife? Verhält sich
dann der zweite Prozessor so, wie er soll?

Vielleicht kannst Du damit erkennen, ob der Fehler eher
in der Instanziierung und Verknüpfung der Prozessoren,
RAM-Blöcke usw. oder in der Software liegt.

yalu

von Christian A. (belial)


Lesenswert?

Ja beide Prozessoren teilen sich die serielle Schnittstelle. Der
Controler für diese Schnittstelle hängt an einem BUS, dem OPB. Auch die
beiden Microblazes hängen an diesem OPB. Laut Doku des OPB sollte es
aber ohne Probleme möglich sein mehrere Microblazes als Master an
diesen BUS zu hängen.
Ich habe auch schon daran gedacht, dass trotzdem irgendetwas mit der
gleichzeitigen Nutzung des OPB nicht hinhaut. Deshalb habe ich einmal
nur CPU1 Ausgabe über die serielle Schnittstelle machen lassen, während
der andere CPU sie nicht nutzte. Das klappte ohne Probleme. Daraufhin
habe ich CPU2 die serielle Schnittstelle überlassen, während CPU1 sie
nicht nutzte. Das kuriose: CPU2 gab gar nichts aus, nichteinmal mehr
den halben String wie bei gleichzeitiger Nutzung.
Vermutung: Es muss also irgendetwas mit CPU2 nicht stimmen, was nicht
mit dem OPB zusammenhängt. Andrerseits sind die beiden wirklich
identisch. Das Design wird in den von mir verlinkten MSS und MHS
Dateien spezifiert, und beide sind genau gleich verdrahtet. Kein
Unterschied. Wie bereits erwähnt, beide haben ihren eigenen RAM, in dem
das jeweilige Programm läuft. Es kann also auch da nicht zu Problemen
kommen, weil es für CPU1 unmöglich ist etwas im Code von CPU2 zu ändern
und umgekehrt.

Christian

von Breti (Gast)


Lesenswert?

Hi,

wo weit ich mich da auskenne, holt sich jeder OPB Master zuerst das
Bustoken vom Arbiter und kann dann erst auf den Bus zugreifen. Wollen
zwei Master gleichzeitig darauf zugreifen, so muss einer auf das Token
warten, bis der andere Master es zurück gibt. Somit sollte das
eigentlich gehen. Praktisch gemacht habe ich es allerding noch nicht.
Es gibt von IBM eine Dokumentation des OPB Busses (suche mal bei google
nach Core Connect und IBM). Vielleicht hilft dir diese weiter. Sie ist
sehr umfangreich.

Ich hoffe, dass ich helfen konnte.

Gruß,
Thomas

von Christian A. (belial)


Lesenswert?

So ich habe nochmal ein wenig mit meinem Projekt rumgespielt. Eigentlich
funktioniert alles. Mein FPGA Board bietet mir zum Beispiel die
Möglichkeit einen extra RAM Riegen einzusetzen. Dies habe ich getan und
einen entsprechenden Controler an den OPB angeschlossen. Beide CPUs
schreiben und lesen munter auf dem extra RAM, und um zu testen ob sie
dies erfolgreich getan haben, gibt CPU1 über die serielle Schnittstelle
Teile des Inhalt des extra RAMs aus. Funktioniert wunderbar. Der Fehler
scheint also nur in der Tatsache zu liegen, dass der UART Controler
nicht darauf ausgelegt ist, von mehreren CPUs geteilt zu werden.
Solange wie ihn nur CPU1 verwendet und nicht noch parallel CPU2 klappt
alles fehlerlos.

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.