Forum: FPGA, VHDL & Co. Microblaze Exceptions


von Tomi T. (Firma: xxx) (kaptainchaos)


Lesenswert?

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 :-)

von Harry (Gast)


Lesenswert?

Error Code Nr.77

von Duke Scarring (Gast)


Lesenswert?

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

von Tomi T. (Firma: xxx) (kaptainchaos)


Lesenswert?

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

von Tomi T. (Firma: xxx) (kaptainchaos)


Lesenswert?

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

von Georg A. (Gast)


Lesenswert?

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.

von Tomi T. (Firma: xxx) (kaptainchaos)


Lesenswert?

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.

von Georg A. (Gast)


Lesenswert?

Ä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...).

von Tomi T. (Firma: xxx) (kaptainchaos)


Lesenswert?

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

von Georg A. (Gast)


Lesenswert?

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