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
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.