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?
> 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.
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.