Moin Wissende :-) Ich habe ein System mit einem Microblaze, dem MPMC, einem VGA-Controller, drei SPI-IP-Cores, dem DMA Central von Xilinx und weiteren Cores aufgebaut. Schon seit Tagen ärger mich bei der Programmierung ein Fehler, daraufhin habe ich die Exceptions des Microblaze eingeschaltet und mir einen Exception-Handler geschrieben. Meine Erkenntnis ist nun, das ich ab und zu einen sogenannten „Data Bus Error Exception“ erhalte. Meine Frage ist nun, woran dies liegt und wie man dies verhindert kann. Danke schon mal für die Antworten :-)
Gibt es mehrere Bus-Master? Wird auf nicht-existierenden Speicher zugegriffen? Du kannst Du Dir Adressen ja mal im Chipscope angucken und auf die Exception triggern. Duke
Nein, sorry das hatte ich vergessen mit anzugeben: Das Exception Status Register steht auf 0x884. Nach dem MicroBlaze Guide deutet dies auf einen EC: "Data bus error exception hin". Das ECC ist somit '1'. Des weiteren habe ich mal den Bus_Error_Det vom PLB Bus an den Interrupt-Controller angehängt und eine ISR dazu geschrieben. In dies wird beim Programmablauf auch aufgerufen. Darauf schließe ich das ein Fehler auf dem PLB Bus auftritt, beim Datentransfer. In den Unterlagen zum PLB Bus sind Informationen zu PLB Register zu finden, indem Informationen zu Fehler zu finden sind. Ich bin gerade dabei diese zu implementieren, indem ich das C_DCR_INTFCE setze. So wie es ausschaut muss ich dazu aber noch einen sogenannten DCR implementieren, wozu das nun ist, ist mir noch nicht ganz klar. Vielleicht kann mir ja jemand sagen ob ich damit auf dem richtigen Weg bin, aber auch weitere Infos wären nicht Schlecht. Leider habe ich von diesem Thema mit der Implementierung von einen System auf einem FPGA nicht viel Ahnung, kämpfe noch damit. MfG und danke für die Hilfe
Hi Duke. Also an dem Bus hängt nur ein Bus-Master und das ist der Microblaze. Mh... also das mit dem nicht-existierenden Speicher zugegriffen werde ich noch mal überprüfen, danke für den Tip:-) Also ich bin Anfänger was das ganze mit dem EDK und SDK betrifft. Vom Chipscope habe ich keien Ahnung. MfG
Einfach in der MB-Spec nach "Data Bus Exception" suchen: "The data Processor Local Bus exception is caused by an active error signal from the slave (DPLB_MRdErr or DPLB_MWrErr) or timeout signal from the arbiter (DPLB_MTimeout). The data On-chip Peripheral Bus exception is caused by an active error signal from the slave (DOPB_errAck) or timeout signal from the arbiter (DOPB_timeout). The data side local memory (DLMB) and CacheLink (DXCL) interfaces can not cause data bus exceptions." Dein Problem ist ziemlich sicher der DPLB_MTimeout, also Zugriff auf Adressen, hinter denen keine HW/Speicher definiert ist.
Nabend @Duke & Georg Ihr hattet wohl recht mit dem Zugriff auf nicht vorhandenen Speicher. Ich habe im EDK noch einmal alle Adressen der Cores sortiert und unnötige IP-Core, welche ich zur Zeit nicht benötige entfernt. Nach dem Place and Route lief die Software bis jetzt ohne eine Exception. Ich versteh aber immer noch nicht wie dies passieren konnte, da ich auf die Werte aus xparameter.h zugreife und diese verwende. Dies wird ja vom EDK erstellt, na ja es funktioniert und nächstes mal bin ich schlauer:-) Dann noch einmal einen schönen Dank.
Ähh, du hast jetzt evtl. den Fehler nur cachiert. Typischerweise ist das ursächlich ein SW-Problem, weil irgendwelche Pointer daneben sind. Das Umsortieren der HW-Cores ändert am "daneben" nichts. Wenn du schon eine Exception bekommst, hast du ja auch den PC dazu. Schau mal, in welcher Routine der ist (mb-objdump -d xxxx.elf hilft beim Suchen...).
Moin Danke für den Tip Georg. Der Fehler tritt zur Zeit nicht mehr auf, aber ich behalte das im Hinterkopf. Viellicht hatte ich ja nur vergessen einen Pointer zur Initialisierung der jeweiligen Cores zu initialisieren oder dies auskommentiert beim Testen. Das mb-objdump kenn ich noch nicht, werde mir das gleich mal genauer anschauen. MfG
> Das mb-objdump kenn ich noch nicht,
Gehört zu den normalen binutils der gcc-Umgebung (wie ld, nm, strip,
objcopy ...). Damit es die Host-Tools nicht stört, gibts für den
Microblaze das Präfix mb...
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.