Forum: FPGA, VHDL & Co. LCD Controller, externe Speicher


von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe eine kleine Aufgabe gestellt bekommen und bin mir nicht sicher, 
wie sie am geschicktesten zu lösen ist.

Eine kleine Skizze der Anordnung habe ich angehängt.

Bedingungen:
1) Der UC schreibt UND liest Daten vom Speicher. Er legt dort Teile des 
Bildes ab und liest sie wieder aus. Teilweise ist es notwendig das 
gesamte Bild auszulesen, manchmal nur Teile... Das Auslesen und Einlesen 
läuft mit einer Geschwindigkeit von 25 MHz ab (16 Bit breit).

2) Der FPGA liest das Bild aus, sendet es an das Display und erzeugt die 
entsprechenden Sync-Signale für das TFT. Das Display hat einen Pixeltakt 
von 40 MHz


Mein Problem ist jetzt, dass ich drei Zugriffe auf den externen Speicher 
mit einer hohen Geschwindigkeit habe.

Fragen:
Welcher Speicher ist für diese Aufgabe geeignet (SSRAM,QDRII-SRAM, 
SD-RAM, DDR-RAM) ? Komm ich um einen Speicher mit Dual-Port nicht herum?

Wie würdet ihr die Zugriffe synchronisieren? Ich habe bisher für jede 
Datenrichtung relativ große FIFO Speicher vorsehen um in Zeiten, wo 
keine Daten geschrieben oder gelesen werden, die Daten vorzubereiten 
(Z.B. während der vertikalen und horizontalen Synchronisation).

Mein Hauptproblem ist, dass ich möglichst frühzeitig eine Hardware 
erstellen muss und ich nicht ausreichend Zeit zum Simulieren im Vorfeld 
habe.

Vielen Dank für eure Hilfe.

von Benedikt K. (benedikt)


Lesenswert?

Thomas schrieb:

> Welcher Speicher ist für diese Aufgabe geeignet (SSRAM,QDRII-SRAM,
> SD-RAM, DDR-RAM) ?

Alle kommen in Frage, bei der Geschwindigkeit und Bildgröße würde ich 
SDRAM oder DDR SDRAM verwenden.

> Komm ich um einen Speicher mit Dual-Port nicht herum?

Kommt drauf an wie schnell das Lesen der Daten zum µC sein soll.

> Wie würdet ihr die Zugriffe synchronisieren? Ich habe bisher für jede
> Datenrichtung relativ große FIFO Speicher vorsehen um in Zeiten, wo
> keine Daten geschrieben oder gelesen werden, die Daten vorzubereiten
> (Z.B. während der vertikalen und horizontalen Synchronisation).

In Richtung TFT ist das die Standardlösung, da hier die Daten die in 
Zukunft benötigt werden schon lange im Vorraus bekannt sind.

Beim Schreiben vom µC ins SDRAM kann man es ähnlich machen: Man weiß 
welche Daten wo hinsollen, die kann man in ein FIFO zwischenpuffern.
Nur das Lesen der Daten aus dem Speicher macht Probleme.
Außer man baut eine 2 teilige Lesefunktion: Der µC setzt die Adresse die 
er lesen möchte und wartet auf eine Ready vom Speichercontroller. Dann 
kann er das angeforderten Daten lesen. Sequentiell kann er auch mehrere 
Daten nach dem Setzen der Adresse lesen, denn der Speichercontroller 
liest immer gleich mehr mehrere Werte ein.

von Thomas (Gast)


Lesenswert?

Vielen Dank für deine erste Antwort. Also das Auslesen läuft auch mit 25 
MHz ab. Aber hier ist das Problem, es ist keine Reihenfolge der Bytes 
vorgeschrieben. Das heißt, über ein großes FIFO geht das hier 
schlecht...

von Gast (Gast)


Lesenswert?

Ich hatte so ein ähnliches Problem mal, bei dem ich per wahlfreien 
Zugriff auf ein 15ns SRAM zugreifen wollte, um Bilddaten rauszuholen.

Es ist normalerweise ein cycle-shared-Verfahren möglich, bei dem das RAM 
mit der doppelten Bandbreite angesteuert wird und jeweils die Hälfte von 
µC und FPGA verwendet wird.

Hatte versucht herauszufinden, ob man das einfach auf SDRAM skalieren 
könnte, aber da wär ein Haufen zusätzlicher Aufwand notwendig gewesen, 
weil das mit den Bankumschaltungen ein ziemliches Problem war. Zum 
Schluss war ich soweit, dass ich mir sicher war, dass ein wahlfreier 
Zugriff vom µC ein echtes Problem darstellt.

Vlt hab ich mich auch irgendwo vertan ...

Grüße
Gast

von Gast (Gast)


Lesenswert?

Ach genau ... mein Cycle-Shared-RAM-Interface hatte 2 Busse mit je 
15MHz@16Bit auf ein 15ns SRAM.

von Falk B. (falk)


Lesenswert?

@Gast (Gast)

>Schluss war ich soweit, dass ich mir sicher war, dass ein wahlfreier
>Zugriff vom µC ein echtes Problem darstellt.

Ist es auch.

>Vlt hab ich mich auch irgendwo vertan ...

Nöö, SD-RAM und alles was danach kommt ist nicht für beliebige 
EInztelzugriffe entwickelt, sondern Burst-Zugruffe. Erst dann bekommt 
man nämlich annähernd volle Bandbreite. Viele Einzelzugriffe müssen über 
ein Cache abgefangen werden.

@  Thomas (Gast)

>Mein Problem ist jetzt, dass ich drei Zugriffe auf den externen Speicher
>mit einer hohen Geschwindigkeit habe.

Naja, eigentlih nur zwei, der uC wird kaum lesen UND schreiben zugleich 
machen wollen ;-)

>Welcher Speicher ist für diese Aufgabe geeignet (SSRAM,QDRII-SRAM,
>SD-RAM, DDR-RAM) ?

Im Prinzip jeder. Wenn du es dir für den Anfang aber einfach machen 
willst, nimm 15ns SRAM. Dann kannst du wie bereits angedeutet jeweils 
einen Takt für den Zugriff des uC reservieren und jeden zweiten für den 
Zugriff des TFT. Der macht 50MHz++ mit, sollte reichen.

> Komm ich um einen Speicher mit Dual-Port nicht herum?

Nein, Dual Port RAM brauchst du nicht, wenn gleich er das Problem 
vereinfachen würde. Wobei man als normaler Mensch die Frage anders 
stellen würde ;-)

>Wie würdet ihr die Zugriffe synchronisieren? Ich habe bisher für jede
>Datenrichtung relativ große FIFO Speicher vorsehen

Wie gross? Für den TFT brauchst du max. 1 Zeile, eher weniger.

MFG
Falk

von Thomas (Gast)


Lesenswert?

Hi vielen Dank für die Hinweise.

Hmm, das mit dem SDRAM und dem DDR-SDRAM hab ich mir schon so gedacht. 
Und nen Cache zu implementieren macht absolut keinen Sinn bei der 
gestellten Aufgabe...

Ich werd mal schauen, dass ich es mit einem SRAM hinbekomme. Werde ein 8 
oder 10 ns verwenden, um noch ein bißchen Reserve zu haben.

Das Dual-Port-RAM wollt ich möglichst vermeiden, sind ja 
schweineteuer...
Normaler Mensch? Da hast recht, das bin ich net =)

Das FIFO für den TFT hab ich für 1,5 Zeilen ausgelegt. Ich mach es 
lieber ein bißchen größer. BLOCK-RAM ist im FPGA noch genügend 
vorhanden.

Danke euch...

von noeppkes (Gast)


Lesenswert?

Hallo,

ich weiss dass der Beitrag hier schon etwas älter ist, aber vielleicht 
erreicht er dich ja noch.
Bist du hier in der Zwischenzeit weiter gekommen?
Ich bin genau an dem selben Projekt im Moment beschäftigt.
UC schribt und liest aus / ins SRAM, FPGA stellt das Bild dar über das 
SRAM. (320*240*16Bit), so ca. 40-50 Hz, habs gerade nicht genau im Kopf.
Das geht einigermaßen.

Will das ganze aber umschreiben auf SDRAM.

Können wir den Quellcode tauschen um uns gegenseitig zu unterstützen ?

noeppkes ...

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.