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.
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.
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...
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
Ach genau ... mein Cycle-Shared-RAM-Interface hatte 2 Busse mit je 15MHz@16Bit auf ein 15ns SRAM.
@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
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.