www.mikrocontroller.net

Forum: FPGA, VHDL & Co. zugriff auf NPI Interface


Autor: matzunami (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: matzunami (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann mir da niemand helfen? Der MPMC hat doch ein Native Peripheral 
Interface... wie kann man da drauf zugreifen?

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie das NPI angesprochen wird, steht im Datenblatt des MPMC. Ich 
bezweifle allerdings, dass das so funktionieren wird, wie du vorhast....

Autor: matzunami (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaube ich hab was gefunden... bei Port Filters default anzeigen und 
dann bei den gewünschten pins extern einstellen. naja mal sehn

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: matzunami (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?)

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: matzunami (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: matzunami (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
LocalLink nennt sich dort SDMA (Soft-DMA). Ist sehr schön gemacht, und 
nicht so aufwendig.

Autor: matzunami (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich seh grad LocalLink -> SDMA richtig?

Autor: matzunami (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das ging schnell :)

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: matzunami (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: matzunami (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... muss mir wohl erstmal alles zu SDMA durchlesen.

Autor: matzunami (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: matzunami (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.