Forum: FPGA, VHDL & Co. Central DMA zeigt seltsames Verhalten


von Der Fragende (Gast)


Lesenswert?

Moin :-)

Beim Betrieb des Xilinx Central DMA-Controllers ist mir ein seltsames 
Verhalten aufgefallen:

Ich kopiere Bilder mit Hilfe des DMA-Controllers von einem 
Speicherbereich in einen anderen Speicherbereich. Diese Speicherbereiche 
liegen beide in demselben DDR-Speicher, welchen ich mit Hilfe des MPMC 
anspreche. Die Bilder werden dabei zeilenweise kopiert, ist dieser 
Vorgang beendet löst der DMA-Controller einen Interrupt aus. Durch 
diesen Interrupt wird ein Flag gesetzt, woraufhin die Software eine 
weitere Bildzeile kopieren soll. Da ich einige Fehler hatte, frage ich 
zu Debug- Zwecken das Statusregister des DMA-Controllers ab.

Dabei tritt folgendes Phänomen:
Obwohl der DMA-Controller mir ein Interrupt erzeugt, sagt das 
Statusregister der DMA wäre beschäftigt!

Daraufhin habe ich natürlich das Datenblatt noch einmal gelesen. Dieses 
sagt, dass der Interrupt auslöst wenn ein Vorgang abgeschlossen ist, 
womit der DMA mit der Arbeit fertig wäre. Das Busy-Bit ist gesetzt, wenn 
der Vorgang noch nicht abgeschlossen ist. Einen Fehler gibt der DMA 
nicht aus.

Den Interrupt-Handler, sowie die Initialisierung habe ich geprüft. Die 
Register des DMA-Controllers habe ich per XMD geprüft, auch keine Fehler 
zu erkennen.

Die Hardware-Einstellungen beim DMA-Controller lauten folgend:

- Slave und Master an unterschiedlichen PLB’s.
- Das Busfrequenzverhältnis von Slave zu Master beträgt 1:2.
- Der Master ist am MPMC angeschlossen und keine weiteren Slaves auf 
diesem PLB.
- DMA-Einstellung: FIFO:8 ; Read & Write Burst: 1 (ja das kostet 
Performance, bei anderen Einstellungen bekomme ich Bildfehler, da er zu 
viel kopiert)

Vielleicht hat ja jemand von Euch eine Idee, ich danke schon einmal im 
Vorraus.

von Duke Scarring (Gast)


Lesenswert?

Der Fragende schrieb:
> Beim Betrieb des Xilinx Central DMA-Controllers ist mir ein seltsames
> Verhalten aufgefallen:
Wie oft tritt den Dein Fehlverhalten auf? Ständig? Gelegentlich? Einmal 
alle x Zeilen?

Duke

von Der Fragende (Gast)


Lesenswert?

Moin,

mir ist aufgefallen wenn ich nur sehr kleine Bilder kopiere, von ca. 
20x20 Pixel ist alles OK. Wenn aber größere Bilder dabei sind mit 80x80 
Pixel wird das Busy-Bit gesetzt.

Ich prüfe vor dem Kopiervorgang das Busy-Flag vom DMA-Controller und 
gebe dann per xil_printf "busy" aus. Es ist mir aufgefallen das nur, so 
scheint es, während des Kopierens der letzten Bilder das Busy-Flag 
gestzt wird.

Desweiteren schaut es so aus, als ob der DMA-Controller nicht immer 
einen Interrupt erzeugt, dies kann ich aber leider nicht beweisen.

Während des Betriebs werden noch weitere Interrupts erzeugt, den 
Interrupt Controller habe ich angewiesen alle gesetzen Interrupts 
abzuarbeiten.

Auf den DDR-Speicher greift noch der MicroBlaze und ein VGA-Controller 
zu. Dem MPMC habe ich eine eigene Arbitration zugewisen:

Number of Time Slots: 2
Time Slot 0: 210
Time Slot 1: 120

0=>MicroBlaue
1=>VGA-Controller
2=> ´DMA-Controller

Die Einstellung ist so gewählt damit der Bildaufbau und die Ausgabe 
möglichst zügig abgearbeitet werden.

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.