Hallo, ich habe folgendes Problem. Ich habe mir in Xilinx EDK Tool ein MicroBlaze erstellt, der über einen MPMC über Port0 auf einen DDR2 Speicher zugreift. Ich würde nun gerne über Port1, von außen über das NPI Interface, ebenfalls auf den DDR2 RAM zugreifen. Wenn ich mir allerdings einen neuen Core erstelle bekomme ich nur die Möglichkeit den MicroBlaze internen PLB Bus auszuwählen. Nun meine frage: Was muss ich machen, um auf den Speicher über NPI zugreifen zu können. Mit zugreifen meine ich, das ich die Pins sozusagen nach außen legen will, um im ISE einen VHDL Block dran hängen zu können. Danke. MfG matzunami
Kann mir da niemand helfen? Der MPMC hat doch ein Native Peripheral Interface... wie kann man da drauf zugreifen?
Wie das NPI angesprochen wird, steht im Datenblatt des MPMC. Ich bezweifle allerdings, dass das so funktionieren wird, wie du vorhast....
Ich glaube ich hab was gefunden... bei Port Filters default anzeigen und dann bei den gewünschten pins extern einstellen. naja mal sehn
Und dann? Dann werden die Pins an die physikalischen Außenpins des FPGA gelegt....mehr nicht. Du musst einen IP-Core schreiben, der das NPI Bus Interface nachbildet, dann die passenden mao und mpd und bbd Dateien erzeugen, damit der Core vom EDK korrekt erkannt wird. Dann einbinden und die NPI Leitungen werden automatisch im System View angezeigt.
hm... ich habe mir jetzt mein MicroBlaze in ISE eingebunden. Da kann ich doch jetzt direkt auf die Pins zugreifen (werden jedenfalls angezeigt). Warum sollte das nicht gehen? Wie/wo schreibe ich einen IP core (nicht über create new peripheral oder?)
Naja. Ich weiß ja nicht, was du direkt vorhast. Im Normalfall erstellt man so ein MicroBlaze Design mit dem EDK, dasd erstellt alle Bus-Verbindungen usw. und dann bindet man eigene Cores über Create/Import Peripheral ein. Das EDK erstellt ja auch das Grundgerüst für die Software, was dann in das SDK exportiert wird. Der MicroBlaze bei dir steuert ja über den PLB den MPMC, welcher sich um den RAM kümmert. Wenn du jetzt von einem anderen wie auch immer gearteten Core auf den gleichen RAM zugreifen willst, wird das zumindest aufwendig. Du musst ja den MPMC dazu bringen, seine Befehle jetzt von deinem Dersign entgegen zu nehmen, statt vom Prozessor. Ob das über das NPI geht, weiß ich nicht.
So hatte ich es auch zuerst vor -> Microplaze erstellen -> über Create/Import Peripheral eine IP core zu entwerfen, der meinen VHDL Code enthält und bestimmte pins nach außen führt. Leide kann ich bei Create/Import Peripheral nur den PLB Bus einstellen? was ich ja nicht möchte. Ich habe einfach nur vor, das nicht der Microblaze allein auf den DDR2 RAM zugreift, sondern das ich den Speicher auch in meinem ISE erzeugten Project als externen Speicher nutzen kann. Darum meine Idee ------------------- | MPMC Port0|<-----PLB----> MicroBlaze | Port1|<-----NPI----> user VHDL Code ------------------- Über meinen VHDL code sollen Vodeosignale in den DDR2 gespeichert werden. Momentan versuche ich es halt so, dass ich mir die NPI Bus Leitungen nach außen gelegt habe... und wenn ich den MicroBlaze in ISE einbinde, auf diese direkt zugreife. Hab damit auch noch keine erfahrungen gemacht, aber wenn ich mir in EDK einen IP Core erstelle, der über NPI auf den MPMC zugreift, würde ich mir doch auch nur die NPI signale nch außen führen, um in ISE drauf zu greifen zu können (oder?). Also hab ich mir gedacht das ich dies ja auch gleich machen kann, ohne IP core (wenns geht und es scheint ja zu gehen). MfG matzunami
Muss es denn NPI sein? Das ist das komplizierteste aller Interfaces des MPMC. Anderer Vorschlag: LocalLink Interface benutzen. Das ist ein bidirektionales FIFO Interface. Dann einen LL-IP-Core erstellen und den mit an den MPMC anbinden. Vom MicroBlaze aus kannst du dann DMA Transfers vom LocalLink zum RAM starten. Wir benutzen das auch hier, um Daten zu einer externen Hardware auszutauschen. Über den Wizzard kannst du nur PLB/FSL Grundgerüste erzeugen, für alles andere ist sowieso Handarbeit angesagt. LLink ist aber wesentlich einfacher als NPI.
Ich dachte das NPI ist für sowas vorgesehen, aber wie gesagt, dass ist alles noch ziehmlich neu für mich. Aber wie genau du das jetzt machen würdest hab ich noch nicht verstanden. > "Vom MicroBlaze aus kannst du dann DMA Transfers vom LocalLink zum RAM > starten" Wie schließe ich den IP core an den MPMC an? Über LocalLink, dass kann ich da doch nicht auswählen, jedenfalls seh ich es nicht. Hast du eventuell eine art Blockschaltbild für mich, dass ich mir das vorstellen kann. Oder so was in der Art?
LocalLink nennt sich dort SDMA (Soft-DMA). Ist sehr schön gemacht, und nicht so aufwendig.
Genau. Der MPMC ist ja prinzipiell ein DMA Controller. Du erstellst dann einen passenden Descriptor für den Scatter-Gather in deinem Programm und startest den Transfer. Um die ganze FIFO-Geschichte kümmert der sich dann selbst.
OK da ist ja auch ein kleines Blockschaltbild.
> Descriptor für den Scatter-Gather
???
SDMA geht an MPMC PLB an den Microblaze und wie bekomm ich meine
externen Daten dazu?
Microblaze | | --- |--------| |-------| |D| | |----Tx-->| usre | |D|<---->| SDMA | | VHDL | |R| | |<---Rx---| | |2| |--------| |-------| --- seh ich das richtig so? Welche Rolle spielt der Microblaze genau. Ich dacht ich kann auf den DDR2 zugreifen, ohne diesen zu benutzen, dies ist dann wohl nicht der fall.
Nee, völlig am MicroBlaze vorbei geht nicht, du musst dem MPMC ja sagen, wieviel Daten er von wo nach wo schaffen soll. Das geht nur über den PLB, der ja am MicroBlaze hängt. Ich nehme mal an, du willst zunächst Daten von deiner externen Hardware in den Speicher bringen und dann irgendwas damit anstellen. Dann wäre das so zu machen. Der MPMC ist ein Scatter-Gather DMA Controller, zumindest kann man ihn dafür konfigurieren. Er will für jeden DMA TRansfer einen Descriptor, der zum Beispiel Quell und Ziel-Adresse, zu übertragende Bytes, Header, Footer usw. angibt. Den muss der MB über den PLB bereit stellen. Den Rest erledigt der MPMC. Ist aber recht aufwenig, den MPMC benutzt man nicht mal eben so. Der riesen Block will schon ordentlich begriffen worden sein. Du kannst daran auch noch andere SDMA Cores anschließen, z.B. den XPS_LL_TEMAC , da kannst du dann per DMA die Daten gleich vom/zum Ethernet übertragen.
Eigenlich war es erst so gedacht, dass ich Bilddaten auf dem DDR2 speicher, und wider lese. Den speicher zugriff wollte ich über MIG realisieren. Nun ist es aber so, das später der DDR2 speicher auch für andere sachen genutzt werden soll (MB). Dazu ist der MIG ja ungünstig und man müste dies dann über den MPMC realisieren. Also soll ich das gleich so machen. Ich hab das halt nur noch nie gemacht.
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.