www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Register / Linux - Xilinx FGPA


Autor: Christoph H. (berton)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich lese mich gerade erst in ganz vieles ein und verstehe leider noch 
nicht alles.
Per EDK habe ich eine IP Komponente entworfen, die per PLB Kommuniziert 
und ein Register besitzt. Auf dem FPGA läuft Linux.
Ich verstehe noch nicht ganz, wie ich dann von Linux aus auf das 
Register zugreife.
Woher weiß ich überhaupt an welcher Adresse die Komponente zu finden ist 
und woher weiß ich, wo das Register zu finden ist?


Autor: hae (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf dem FPGA läuft Linux ? Oder meinst du, du entwickelst unter Linux ? 
Der Titel deines Posts "...FGPA..." ist ebenso sorgfältig formuliert wie 
deine Frage, welche in die Rubrik "Programmierbare Logik" gehört. Wenn 
du genauso präzise entwickelst wie du fragst, wirst du wohl viel Spass 
haben...

Autor: Christoph H. (berton)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja,ja Sorry. Habe ich wohl versehentlich nicht aufgepasst. Eigentlich 
sollte der Beitrag auch in der Rubrik "Programmierbare Logik" landen.

Okey, dann jetzt nochmal etwas ausführlicher:
Es handelt sich um einen Virtex FPGA mit PPC. Es sind soweit alle 
Komponenten vorhanden, dass Linux auf dem FPGA/PPC läuft.
Entwickelt wird unter Windows.

Autor: Gargamel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Normalerweise kannst du im EDK bei deiner Komponenten angeben, welchen 
Adressbereich sie belegt. Wenn du rausgefunden wo sie ist, kannst du das 
einfach hardcoden ála

#define MYADRESS 0x12345678

int* ptr = (int*) MYADRESS;

und mit *ptr = 5; dann drauf zugreifen.

Mfg
Gargamel

Autor: Christoph H. (berton)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey, danke Gargamel.
Die Adresse der Komponente habe ich. Ich verstehe nur noch nicht wie ich 
auf die Register zugreifen kann.
Angenommen ich habe 2 Register und einen Adressbereich von 0x80410000 
bis 0x804101ff.
Wie kann ich dann auf Reg1 und Reg2 zugreifen?

Autor: Alban (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
C meets hardware:

"Zeiger enthalten die Adresse eines Objektes eines bestimmten 
Datentyps."
  -- Aus "Programmieren mit C" von Clauß Fischer. --

Also im banalsten Fall kannst du einen Pointer deklarieren und ihm die 
Adresse deines Registers zuordnen. Dann kannst du über den Pointer auf 
das Register zugreifen.

Aber normal hat das EDK für seine Peripherie doch Treiber. Dann liefert 
der Treiber eine Funktion um darauf zu zugreifen.

Autor: Christoph H. (berton)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey, danke Alban!
Das hat mir wirklich weitergeholfen. Ich wußte bisher garnicht, dass das 
EDK auch direkt rudimentäre Treiber zur Verfügung stellt. (Wie gesagt, 
ich arbeite mich gerade ein).
Ich habe mir die Treiber jetzt mal angesehen, aber immernoch eine Frage.
#define PLB_MEINE_KOMPONENTE_USER_SLAVE_SPACE_OFFSET (0x00000000)
#define PLB_MEINE_KOMPONENTE_SLAVE_REG0_OFFSET (PLB_COMMUNICATION_USER_SLAVE_SPACE_OFFSET + 0x00000000)

XIo_Out32(baseaddr+PLB_MEINE_KOMPONENTE_SLAVE_REG0_OFFSET, data->Upper);
XIo_Out32(baseaddr+PLB_MEINE_KOMPONENTE_SLAVE_REG0_OFFSET+0x4, data->Lower);

Wieso kommt das mit den Adressen so zustande?
Weshalb ist das Register 0x4 breit?

Autor: Thomas Pototschnig (pototschnig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
baseaddr wird eine "Basisadresse" eines bestimmten Adressbereichs sein. 
PLB_BLABLA_OFFSET ist eine relative Adresse bezogen zur Basisadresse.

0x4 kommt daher, weil die Adressen in Bytes gezählt werden, ein 32Bit 
Register aber dann 4 Byte hat. Das nächste Register fängt dann 0x4-Bytes 
weiter hinten an.

Mfg
Thomas Pototschnig

Autor: Misha M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
eine Frage die du mir wahrscheinlich Beantworten könntest:

ich versuche grad auch Linux für denn ppc hinzukriegen (Virtex 5 ml507 
Board), leider ohne Erfolg, vielleicht kannst du mir ja sagen auf welche 
Seiten du dich Informiert hast, welchesn Linux du benutzt und was deine 
Entwicklungsschritte waren?

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.