Forum: FPGA, VHDL & Co. Ungereimtheiten beim Xilinx xps_mch_emc_v2_00_a


von 1660ES (Gast)


Lesenswert?

Hallo vielleicht kann mir jemand bei einem Problem beim Xilinx 
xps_mch_emc_v2_00_a IP Core.

Hintergrund:
Ich setze EDK 10.1 für ein Virtex 5 ein. Ich benutze den PPC (32 bit 
interner Bus) Der oben genannte Core soll das Interface für einen 
FXC128XFTG64C sein (Flash Baustein für den Virtex 5 Bitstream, 16bit 
Datenbus).

Es sollen nicht benutzte Teile in dem Flash Baustein verwendet werden um 
andere Daten abzulegen. Da ja der interne Datenbus 32 bit breit ist, der 
Datenbus des Flashspeichers aber nur 16bit habe ich im IP Core das 
"Execute Multiple Memory Accesses to match Bank x Data Bus width to PLB 
Data Bus Width" auf True gesetzt.

Wenn ich jetzt im C Code des PPC versuche über das gemappte Memory auf 
den Flash zu schreiben bekomme ich auf dem Logic Analyzer eine 
verschiedene Anzahl von Schreibzugriffen (die Write Leitung wird auf GND 
gezogen) angezeigt.

Problem:
Die Anzahl der Schreibzugriffe hängt kurioser weise von der zu 
beschreibenden Adresse ab:

Beschreiben von Adresse 0x0H:
*u16 = u16 (Beschreiben eines 16bit Pointers mit 16bit Daten) 1 
Schreibzugriff

*u16 = u32 (Beschreiben eines 16bit Pointers mit 32bit Daten) 1 
Schreibzugriff

*u32 = u32 (Beschreiben eines 32bit Pointers mit 32bit Daten) 2 
Schreibzugriffe

*u32 = u16 (Beschreiben eines 32bit Pointers mit 16bit Daten) 2 
Schreibzugriffe



Soweit ist noch alles ok (zumindest halbwegs nachvollziehbar) Schreibe 
ich jedoch jetzt auf die Adresse 0xBDDF - (Ich muss dort hinschreiben um 
den Flash in den Async Lesemodus zu versetzen) bekomme ich die folgende 
Anzahl von Schreibzugriffen:

*u16 = u16 (Beschreiben eines 16bit Pointers mit 16bit Daten) 2 
Schreibzugriffe

*u16 = u32 (Beschreiben eines 16bit Pointers mit 32bit Daten) 2 
Schreibzugriffe

*u32 = u32 (Beschreiben eines 32bit Pointers mit 32bit Daten) 3 
Schreibzugriffe

*u32 = u16 (Beschreiben eines 32bit Pointers mit 16bit Daten) 3 
Schreibzugriffe



Speziell im 2. Fall kann ich ebenfalls die Adresse, die an den Adressbus 
anliegt (müsste ja 0xBDDF sein) nicht nachvollziehen. Das der PPC Big 
Endian und der Flash Little Endian ist habe ich beachtet.

Hat jemand noch eine Idee?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Schreibe ich jedoch jetzt auf die Adresse 0xBDDF
Ein unaligned Zugriff...

Fall 1 und Fall 2 wird wohl einfach das selbe sein. Auch im zweiten Fall 
werden wohl nur 16 Bit geschrieben. Oder wie willst du auf eine 16 Bit 
Variable 32 Bit unterbringen?

> Adresse, die an den Adressbus anliegt (müsste ja 0xBDDF sein)
Nein, ich würde 0xBDDE und 0xBDE0 erwarten.

> Das der PPC Big Endian und der Flash Little Endian ist...
hat damit nichts zu tun.

von 1660ES (Gast)


Lesenswert?

> Schreibe ich jedoch jetzt auf die Adresse 0xBDDF
>Ein unaligned Zugriff...

ok - das Fachwort kannte ich jetzt nicht - aber wie kann ich einen 
solchen machen? Ich muß ihn machen, da beim FXC128XFTG64C der zu 
schreibende Inhalt des Configuration Registers (so wie ich es verstanden 
habe) auf den Addressbus gelegt werden muss. (siehe 
http://www.xilinx.com/support/documentation/data_sheets/ds617.pdf Seite 
20)

>Oder wie willst du auf eine 16 Bit
>Variable 32 Bit unterbringen?

nein - ist mir schon klar dass das Quatsch ist - nur der vollständigkeit 
halber alle Kombinationen ;-)


>Nein, ich würde 0xBDDE und 0xBDE0 erwarten.

klingt logisch - hilf aber nichts - siehe 2. Absatz....

Noch jemand eine Idee? (& Dank uns Lothar!)

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.