Forum: FPGA, VHDL & Co. Virtex 5 ml507- Board, PPC mit FPGA kommunizieren


von Misha M. (Gast)


Lesenswert?

Hallo, ich bin auf der Suche nach einer Lösung wie man PPC mit FPGA 
kommunizieren lässt.

Habe ganz Internet durchforstet und nicht vernünftiges gefunden. Dies 
finde ich shcon kommisch, da es für mich für ein alltägliches Problem 
scheint, dass wenn man auf dem Board PPC ( PowerPC) hat das man mit der 
FPGA logic komunizieren will, oder andersrum.

Der Ansatz der Lösung scheint wohl MPMC mit NPI zu sein, die zweit 
Begriffe wurden erwähnt als ob es selbstverständliche were, doch ein 
Tutorial o.ä. konnte ich dazu net finden.

in youtube fang ich eine Anleitung für Spartan3 einbindung von MPMC aber 
sehr schlau wurde ich nicht daraus.

hier der Link (vieleicht ist manchen damit geholfen):

http://www.youtube.com/results?search_query=Xilinx+EDK+Tutorial+-+Adding+MPMC+to+an+EDK+Project&search_type=&aq=f

Mich würde freuen wenn sich einer meldet der sich damit erfolgreicht 
auseinander gesetzt hat.

von Christian R. (supachris)


Lesenswert?

Naja, da gibts viele Möglichkeiten. Das NPI über den MPMC ist schon ein 
guter Ansatz, allerdings nicht gerade einfach. Das einfachste ist ein 
FSL-Interface, das ist quasi ein doppelter FIFO. Das kann man an den PLB 
klemmen und schon mal einfach Daten übertragen.
Du kannst natürlich auch direkt einen PLB-Slave bauen, auch dazu gibts 
einige Vorlagen. Im Peripheral-Wizzard kann man sich für FSL und PLB ein 
Grundgerüst erstellen lassen. Der rest ist Fleißarbeit. In den 
Datenblättern zum jeweligen Bus steht ja alles drin.
Wenn du mit der Logik per DMA über den MPMC kommunizieren willst, ist 
NPI (für Adress-basierte Logik) oder LocalLink (für FIFO-basierte Logik) 
der Ansatzpunkt. Die LocalLinc Spec bekommt man bei Xilinx nach 
(kostenloser) Anmeldung zum herunter laden. Der LocalLink ist ziemlich 
universell, weil er Paketbasiert arbeitet und auch Byte oder 
Wort-Transfers kann. Außerdem ist der an vielen Xilinx-Cores dran, zum 
Beispiel am TEMAC, am PCIe Endpoint....

von Misha M. (Gast)


Lesenswert?

Danke erstmal für die schnelle Antwort.

ich versuche grad wahrscheinlich das was du vorgeschlagen habe, habe

xilkernel expample von xilinx runtergeladen und versuche jetzt über PLB 
FPGA anzubinden.

("Chapter 7: Creating Your Own Intellectual Property") in dem Dokument
"EDK Concepts, Tools, and Techniques":

http://www.xilinx.com/support/documentation/sw_manuals/xilinx11/edk_ctt.pdf


hoffe ma ich komme weiter ;-)

von Misha M. (Gast)


Lesenswert?

Hallo,

hat einer schon mal über PLB von PPC auf FPGA zugegrifen??, wollte mit 
was ganz einfachem anfangen und z.b. LEDs an/ausmachen.

nach dem "Create or Import Peripheral..." in XPS, wurde mir stücke c 
code generiert:
1
/***************** Macros (Inline Functions) Definitions *******************/
2
3
/**
4
 *
5
 * Write a value to a IP_TEST register. A 32 bit write is performed.
6
 * If the component is implemented in a smaller width, only the least
7
 * significant data is written.
8
 *
9
 * @param   BaseAddress is the base address of the IP_TEST device.
10
 * @param   RegOffset is the register offset from the base to write to.
11
 * @param   Data is the data written to the register.
12
 *
13
 * @return  None.
14
 *
15
 * @note
16
 * C-style signature:
17
 *   void IP_TEST_mWriteReg(Xuint32 BaseAddress, unsigned RegOffset, Xuint32 Data)
18
 *
19
 */
20
...
21
#define IP_TEST_mWriteReg(BaseAddress, RegOffset, Data) \
22
   XIo_Out32((BaseAddress) + (RegOffset), (Xuint32)(Data))
23
24
/**
25
 *
26
 * Read a value from a IP_TEST register. A 32 bit read is performed.
27
 * If the component is implemented in a smaller width, only the least
28
 * significant data is read from the register. The most significant data
29
 * will be read as 0.
30
 *
31
 * @param   BaseAddress is the base address of the IP_TEST device.
32
 * @param   RegOffset is the register offset from the base to write to.
33
 *
34
 * @return  Data is the data from the register.
35
 *
36
 * @note
37
 * C-style signature:
38
 *   Xuint32 IP_TEST_mReadReg(Xuint32 BaseAddress, unsigned RegOffset)
39
 *
40
 */
41
#define IP_TEST_mReadReg(BaseAddress, RegOffset) \
42
   XIo_In32((BaseAddress) + (RegOffset))
43
...

meine Frage ist jetzt wie finde ich heraus auf welche Adresse ich 
write/read Register funktion ausführen kann (um z.B. auf ml507 Boarg 
LEDs an/aus zu machen) ...

von Christian R. (supachris)


Lesenswert?

Für die LEDs kannst du den xps_gpio Core benutzen. Aber da du ja über 
kurz oder lang deine eigene Hardware anschließen willst, musst du dich 
durch die PLB Spec wühlen und einen Slave implementieren. Die 
Basisadresse wird im Normalfall über ein Generic bereitgstellt und im 
EDK dann eingestellt.

von Misha M. (Gast)


Lesenswert?

hy,

will jetzt nicht undankbar wirken, aber gehts etwas datailierter, bin 
mit der themaik nicht so vertraut und arbeite mich grad darein. Mit ISE 
hate ich schon keinere Erfahrungen aber EDK ist echt mächtig...

von Christian R. (supachris)


Lesenswert?

Naja, schau dir mal die PLB Slaves an, die im EDK mitgeliefert werden. 
Da kannst du welche zum Projekt hinzufügen, dann stehen die in der Liste 
bei "System Assembly View". Da kannst du dann "View MPD" oder View HDL 
Sources mit der rechten Maustaste die Beschreibungen anschauen. Aber 
ohne Erfahrung mit der Materie einen PLB Slave schreiben.....naja. Such 
dir am besten mal ein Tutorial oder benutz erst mal die Beispielprojekte 
von Xilinx.

von Misha M. (Gast)


Lesenswert?

hey,

also bin jetzt soweit, kann von ppc auf FPGA schreiben udn lesen, das 
einzige was ich bis jetzt nicht verstanden wie ich das synchronisieren 
kann, also auf FPGA seite habe ich signale wie.

...
Bus2IP_BE                  : in  std_logic_vector(0 to 
C_SLV_DWIDTH/8-1);
Bus2IP_RdCE                : in  std_logic_vector(0 to C_NUM_REG-1);
Bus2IP_WrCE                : in  std_logic_vector(0 to C_NUM_REG-1);
IP2Bus_Data                : out std_logic_vector(0 to C_SLV_DWIDTH-1);
IP2Bus_RdAck               : out std_logic;
IP2Bus_WrAck               : out std_logic;
IP2Bus_Error               : out std_logic;
...

die woll dafür sorgen, um zu gucken ob daten zum lesen da sind, bzw. 
wenn man auf die daten was gescchrieben hab...

meine frage ist jetzt wie kann ich mit was vergleichbaren auf ppc-seite 
mit C-Code abrufen, dass er wolange wartet bis ich auf der FPGA seine 
ihm signalisiere, jetzt sind neue daten da!?


LG Misha M.

von D. I. (Gast)


Lesenswert?

Vermutlich mithilfe von Interrupts und dann eine interrupt service 
routine im c-code schreiben

von Misha M. (Gast)


Lesenswert?

Weiss einer ob PLB read/write Operationen auf dem PowerPC man mit 
Interrupts realisieren kann, denn momentan blokiert der PowerPC wenn 
z.B. der read-Acknowledge nicht gesetzt ist

von Duke Scarring (Gast)


Lesenswert?

Ich kenne mich mit PLB nicht aus, aber bei Wishbone etc. ist es ähnlich.
Evtl. kannst Du einen WatchDog auf das Acknowledge ansetzen, der dann 
einen Fehler signalisiert.

Duke

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.