Forum: FPGA, VHDL & Co. PLB Peripheral ansprechen


von Tim S. (169)


Lesenswert?

Hallo Leute,
nachdem ich mein ip an den plb-bus angebunden habe, möchte ich diesen 
mit microblaze ansprechen.
Ich bin noch ein Anfänger und weiß nicht, welche Funktion ich zum 
schreiben/lesen benötige.
Sind neben den oben genannten Funktionen noch weitere zu implementieren?

Vielen Dank.

von pks (Gast)


Lesenswert?

Hi,
normalerweise wird der Speicher das PLB-Slaves in den Adressraum des MB 
gemappt. Du kannst also direkt über einen Pointer darauf zugreifen. In 
Deinen Sourcen müsste irgendwo ein vom SDK automatisch generiertes File 
liegen, in dem ein #define für die Basisadresse steht.

von Tim S. (169)


Lesenswert?

Vielen Dank pks :)
Ich habe vergessen zu erwähnen, dass ich keine software register 
eingebaut habe. Inwiefern hat dies Einfluss auf das lesen/schreiben.
...
Welche weiteren Funktionen sind noch erforderlich?

von pks (Gast)


Lesenswert?

Tim S. schrieb:
> Ich habe vergessen zu erwähnen, dass ich keine software register
> eingebaut habe.
Was meinst Du damit?

von Tim S. (169)


Lesenswert?

Es gibt unter "Import Peripheral" die Option Register mit einzubauen.
In dem Fall habe ich diese nicht eingebaut.

von pks (Gast)


Lesenswert?

Sorry, das sagt mir nichts...habe auch auf diesem Weg noch kein 
Peripheral eingebunden.
Ich habe in einem Project z.B. eine PLB/Wishbone bridge von Open Cores 
verwendet. Diese liegt dann im pcores Verzeichnis und hat den Namen 
"plbv46_2_wb".
Wenn ich das Design ins SDK exportiere und ein BSP generiere, entsteht 
da unter anderem eine Datei "xparameters.h".
Hier steht die Adresse, unter der ich das Modul ansprechen kann:
1
/* Definitions for peripheral PLBV46_2_WB_0 */
2
#define XPAR_PLBV46_2_WB_0_MEM0_BASEADDR 0xA0A00000
3
#define XPAR_PLBV46_2_WB_0_MEM0_HIGHADDR 0xA0AFFFFF

von Tim S. (169)


Lesenswert?

Das ist ja witzig :)
Bei meinem eingebundenen Core handelt es sich um den "plbv46_2_wb".
Wie sieht bei dir die main()-Funktion aus.
Vielleicht so:

int main(){

  Xil_Out32((BaseAddress_vonBridge), (Xuint32)(0x00000001));

 ...


}

von pks (Gast)


Lesenswert?

So klein ist die Welt...:-)
Nein, so sieht meine main() nicht aus ;-)

Die Zugriffe solltest Du, wie gesagt, einfach so machen können:
1
#include <xparameters.h>
2
3
...
4
5
uint32_t pWB = (uint32*) XPAR_PLBV46_2_WB_0_MEM0_BASEADDR;
6
7
*pWB = 0x1;

Das sollte den gleichen Effekt haben wie Dein Zugriff oben.

von pks (Gast)


Lesenswert?

muss natürlich uint32_t *pWB heißen...

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.