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.
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
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.
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
> 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.
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!
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?
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.
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
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.
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.