Forum: Mikrocontroller und Digitale Elektronik DDR2 lesen/schreiben - Schätzung


von Andreas B. (loopy83)


Lesenswert?

Hallo zusammen,

ich tue mich gerade etwas schwer, mein Problem und dessen Lösung richtig 
einzuschätzen.

Ich nutze einen PowerPC und hab dort einen FPGA mit 32bit und zwei DDR2 
Bausteine mit zusammen 32bit angebunden. Nun kommen vom FPGA 32bit Daten 
und die sollen sortiert in den RAM gelegt werden.
Die Daten vom FPGA kommen kontinuierlich und nicht auf Abruf. Das kann 
ich auch nicht ändern. Ich muss nun dafür sorgen, dass die Daten 
schneller abgeholt und umsortiert werden, als sie im FPGA auflaufen.

Dabei geht es um 2048 8bit Werte, die ich in 4er-Blöcken auf den 32bit 
Bus lege. Ein DMA Controller holt die Daten vom FPGA ab und schreibt sie 
in den RAM. Von dort muss ich die Daten lesen, umsortieren und wieder 
schreiben.

Um genau diese Lese- und Schreibzugriffe geht es mir. bei 2048 Werten zu 
je 8 bit in 32bit verarbeitung, habe ich ja 512 Lese- und 512 
Schreibzugriffe auf den RAM. Ich muss auch nur ein komplettes 32bit Wort 
umspeichern, also nicht noch die 8bit Werte innerhalb des 32bit Wortes.

Die 2048 Bytes kommen in ca. 32us zum FPGA.
Auslesen kann ich diese 2048 Byte in ca. 19,2us.
Mir bleiben also 12,8us zum sortieren bzw. umspeichern.

Nun geht es darum, ob ich in diesen 12,8us die 512 Lese- und 512 
Schreiboperationen überhaupt durchführen kann.

Das DDR2 Interface hat 133MHz.
Verbaut sind zwei Micron MT47H16M16 im 3er Speedstep.
http://www.google.de/url?sa=t&source=web&cd=1&ved=0CBkQFjAA&url=http%3A%2F%2Fdownload.micron.com%2Fpdf%2Fdatasheets%2Fdram%2Fddr2%2F256MbDDR2.pdf&ei=iAVITJe7N4LHsgbqh83SDw&usg=AFQjCNEQwrSIa5w1U1T2BeTXTN942NWmww&sig2=mXVr9zXq1xsaR-F4HtpN8w

Ist das realistisch, oder kann ich das von vorn herein vergessen?

Vielen Dank!
Andi

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wie stellst Du Dir das Sortieren mit nur einem Lesezugriff pro Wert 
vor?

Welchen Algorithmus möchtest Du da anwenden?

von Andreas B. (loopy83)


Lesenswert?

Hallo,

Ich sortiere ja nicht wirklich...
Ich lese einen 32bit Wert und schreibe ihn an anderer Stelle wieder in 
den RAM. Durch das Umspeichern sortiere ich die Daten dann gleich.

Deswegen habe ich die beschriebenen 512 Lese- und 512 schreibzugriffe.

Vielen Dank!
Andi

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Andreas B. schrieb:
> Ich lese einen 32bit Wert und schreibe ihn an anderer Stelle wieder in
> den RAM. Durch das Umspeichern sortiere ich die Daten dann gleich.

Wie sieht der Algorithmus aus? Woher weißt Du, an welcher Stelle ein 
Wert zu speichern ist? Ist das nur von der Quelladresse abhängig, oder 
ist es vom Wert selbst abhängig? Wenn es vom Wert abhängig ist, wer 
garantiert, daß in einem Datenblock Werte nicht doppelt vorkommen?

von Andreas B. (loopy83)


Lesenswert?

Die DMA füllt den Speicher und damit weiß ich ja, wo die Daten zu finden 
sind. Die Lese- und Schreibadresse lege ich selber fest und die sind 
unanhängig vom Wert selber.

Es geht um Bilddaten, die kontinuierlich geschrieben und gelesen werden 
können.

Hat nicht die CAS und die ganzen Latenzen etwas damit zu tun?
Geben die nicht an, wieviele Takte für einen Schreibzyklus o.ä. benötigt 
werden?

Danke!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Andreas B. schrieb:
> Die Lese- und Schreibadresse lege ich selber fest und die sind
> unanhängig vom Wert selber.

Gut, dann hat es also gar nichts mit sortieren im eigentlichen Sinne 
zu tun.

Andreas B. schrieb:
> Hat nicht die CAS und die ganzen Latenzen etwas damit zu tun?
> Geben die nicht an, wieviele Takte für einen Schreibzyklus o.ä. benötigt
> werden?

Gewiss, das tun sie. Wobei das DDR2-Timing nichttrivial ist.

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.