Forum: FPGA, VHDL & Co. Treiberfunktion gesucht


von Tim S. (169)


Lesenswert?

Hallo Leute,
ich habe ein custom ip an den plb bus des microblaze angehängt.
Mit welcher Treiberfunktion kann ich diesem Peripheral eine Addresse 
übermitteln.

Vielen Dank.

von Klaus F. (kfalser)


Lesenswert?

Tim S. schrieb:
> Hallo Leute,
> ich habe ein custom ip an den plb bus des microblaze angehängt.
> Mit welcher Treiberfunktion kann ich diesem Peripheral eine Addresse
> übermitteln.
>
> Vielen Dank.

Falls Du die Adresse des IPs meinst, unter der das IP angesprochen wird:
dieses wird bei Kompilieren fix vergeben, Du must dies entweder manuell 
im MHS File oder, wenn du mit XPS arbeitest, im Address Mapping für dein 
IP angeben.
Normalerweise läßt sich das Design gar nicht kompilieren, wenn man das 
nicht gemacht hat.

Oder was meinst Du mit Adresse übermitteln?

: Bearbeitet durch User
von Tim S. (169)


Lesenswert?

Ich meine eigentlich einem Slave Adressen zusenden.
Wenn ich beispielsweise ein Memory-Baustein als PLB-Slave einbaue.
So muss es doch möglich sein, diesem sowohl Daten als auch Adressen(für 
Memory-Bereich)zusenden.

von Marius W. (mw1987)


Lesenswert?

Die PLB-Slaves sind automatisch memory-mapped. Den Adressbereich des 
Slaves kannst du aber zur Laufzeit nicht ändern. Das legst du im 
Platform-Studio fest.

Gruß
Marius

von Tim S. (169)


Lesenswert?

> Ich meine eigentlich einem Slave Adressen zusenden.
> Wenn ich beispielsweise ein Memory-Baustein als PLB-Slave einbaue.
> So muss es doch möglich sein, diesem sowohl Daten als auch Adressen(für
> Memory-Bereich)zusenden.

von Klaus F. (kfalser)


Lesenswert?

Tim S. schrieb:
> Ich meine eigentlich einem Slave Adressen zusenden.
> Wenn ich beispielsweise ein Memory-Baustein als PLB-Slave einbaue.
> So muss es doch möglich sein, diesem sowohl Daten als auch Adressen(für
> Memory-Bereich)zusenden.

Ein parallel ansprechbar Speicher wird in den Adressbereich des 
Microblaze eingeblende und zwar ab der Basis-Adresse, die Du im EDK 
abgegeben hast.

Wenn Dein Speicher z.B. an 0x81000000 liegt und 64 KB lang ist, dann 
liegt er zwischen 0x81000000 und 0x8100FFFF.

Wenn's richtig gemacht ist, dann kannst Du den Speicher (oder das IP) 
einfach mit

*((volatile uint32_t *) (BASE_ADDR + bbb) = 0x12345678;

schreiben und mit

uint32_t var = *((volatile uint32_t *) (BASE_ADDR + bbb);

lesen.

Achtung, die Adresszählung geht in Byte, für die 32 Bit Zugriffe muss 
bbb ein vielfaches von 4 sein.

Für einen seriellen Memory Baustein schaut die Geschichte anders aus!

von Tim S. (169)


Lesenswert?

Eigentlich habe ich eine Bridge und auf der anderen Seite sind es 
mehrere Slaves die angesprochen werden wollen.
Geh ich nun ebenfalls so wie oben beschrieben vor?

von Klaus F. (kfalser)


Lesenswert?

Tim S. schrieb:
> Eigentlich habe ich eine Bridge und auf der anderen Seite sind es
> mehrere Slaves die angesprochen werden wollen.
> Geh ich nun ebenfalls so wie oben beschrieben vor?

Im Prinzip ja, aber das hängt davon ab, wie Deine Bridge die IPs in den 
Adressraum einblendet.
Dazu müsstest Du ein paar Details zu Deiner Bridge und den IPs verraten.

von Tim S. (169)


Lesenswert?

Es handelt sich um eine PLB-zu-Wishbone Bridge.
Auf der Wishbone-Seite gibt es z.B. ein Spi-Slave, 
Frequenzgenerator,Logic Analyzer ... die als Wishbone-Slaves 
implementiert sind.
Nun möchte ich vom Microblaze diese Komponenten ansprechen die intern 
auch Register haben können. Dementsprechend soll den Komponenten auch 
eine Adresse mitgegben werden(vom Microblaze versteht sich).

Microblaze
   |
  PLB
   |
PLB_WB_Bridge
   |
 Wishbone
   |
   |__________________________
   |            |             |
 SPI          Generator    Analyzer

von Klaus F. (kfalser)


Lesenswert?

Wishbone kenne ich jetzt zu wenig, aber die Komponenten hinter dem 
Wishbone benötigen alle einen bestimmten Adressbereich, der sich 
nichtüberlappen darf und es empfiehlt sich, diesen Bereich so klein wie 
möglich zu halten.

Warscheinlich geht es so:

Da ich die Wishbone Bridge nicht kenne, ist das nur eine Vermutung, aber 
ich nehme an, dass die Adressen am Wishbonebus nicht mit den PLB 
Adressen übereinstimmen müssen, sondern dass die Bridge eine 
Adressverschiebung oder Umsetzung macht.

Wishbone Bus :

SPI           0x0000 bis 0x1000
Generator     0x1000 bis 0x2000
Analyzer      0x2000 bis 0x3000
usw.

Das sind die Wishbone Adressen und es wird ein Gesamtbereich von 64KB 
benötigt.

Die Wishbone Bridge blendet den Wishbone Adressbereich 0x0000 bis 0xFFFF
in den PLB Adressbereich ein, und zwar von z.B. 0x81000000 bis 
0x8100FFFF (64KB aus dem PLB Bereich).

Du greifst also auf den Generator über die Adressen 0x81001000 bis 
0x81001FFF zu.

Natürlich sind all diese Zahlen nur Beispiele, die das Prinzip 
verdeutlichen sollen.

von Tim S. (169)


Lesenswert?

Vielen Dank! Sehr aufschlussreich.

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.