Forum: FPGA, VHDL & Co. Refresh von SDRAMs in Altera Quartus kontrollieren


von SDRAM User (Gast)


Lesenswert?

Hi,

ich habe in Altera QuartusII ein einfaches QSys-System mit
NiosII, SDRAM (DDR2) und einem eigenen VGAController mit
Avalon Master. Mein Problem beim SDRAM ist, dass der
Refreshzyklus leider nicht in der VGA Porch/Sync-Phase
erfolgt. Wie auch, QSys weiss ja nicht, was mein VGA-Master
macht.

Gibt es eine einfache Möglichkeit, dem SDRAM Controller zum
Refreshen zu zwingen?  (Ich verwende die Webpack-Edition und
den freien DDR-Controller)

Gruss

von Marius W. (mw1987)


Lesenswert?

Warum wollst du dem Altera Core dazwischen pfuschen? Der sollte sich 
schön selbst um den Refresh kümmern. Was ist denn das Problem im 
Zusammenspiel mit deinem VGA-Core?

Gruß
Marius

von SDRAM User (Gast)


Lesenswert?

Das Problem ist, dass ich die VGA-Farbinfos zeilenweise
per AV-Master einlese (inkl. FIFO etc.). Kommt mir da in
einer/mehrer Zeilen ein kompletter Refresh dazwischen,
dann bleibt bei zu kleinen FIFOs die Bildschirmzeile dunkel
bzw. das Bild flackert leicht. Deshalb möchte ich den
Refresh auf die Porch/Sync-Phase verlegen.

Alternativ könnte ich auch den FIFO-Buffer vergrössern,
ich möchte aber möglichst wenig BlockRAMs verwenden.
Ausserdem dauert ein kompletter Refresh relativ lange!

von Kest (Gast)


Lesenswert?

Die FIFOs musst Du eben so groß machen, dass im Schnitt sowohl H-Sync 
als auch V-Sync überbrückt werden kann... punkt...
Das mit Refreshes macht man nicht.
Um welche Auflösung geht es? Mit DDR2 dürfte es überhaupt kein Problem 
darstellen. Sogar mit SDRAM ist es locker machbar. Vielleicht hast Du 
den DDR2 Controller falsch konfiguriert, sodaß er zu langsam ist?

Kest

von SDRAM User (Gast)


Lesenswert?

Kest schrieb:
>Die FIFOs musst Du eben so groß machen, dass im Schnitt sowohl H-Sync
>als auch V-Sync überbrückt werden kann... punkt...
IA falsch, FIFO und V/H-Sync müssen nicht unbedingt miteinander
korrelieren, der FIFO überbrückt lediglich die Zeit zwischen
Lesebeginn und Leseende. Man kann dies mit HSync (VSync??) abstimmen,
brauch man aber nicht. Mit SRAMs waren bei mir auch bei hoher
Auflösung (bis 1600) 32*RGB-Wert-FIFO total ausreichend, der FIFO lief
nie auch nur annährend voll.

>Das mit Refreshes macht man nicht.
Hab ich aber bei Xilinx' SDRAM-Controller so gemacht, allerdings
in VHDL und nicht im SDK. Das wird hier aber nicht gehen, in
QSys-Komponenten möchte ich nicht rumfuschen.

>Um welche Auflösung geht es? Mit DDR2 dürfte es überhaupt kein Problem
>darstellen. Sogar mit SDRAM ist es locker machbar. Vielleicht hast Du
>den DDR2 Controller falsch konfiguriert, sodaß er zu langsam ist?
Nein, der Controller arbeitet wesentlich schneller als nötig.
(ich habe zwischen DDR-Controller und QSys-Bus ein Statistik-Modul
gehängt, der Controller arbeitet nur bei 50-60%)
Das Bildschirmflimmern ist bei mir ist eigentlich nur schwarze bzw.
einfarbige kurze Linien (<= FIFO-Überlauf).
Bis jetzt habe ich nur die 512er BlockRAMs verwendet, ich werd's
aber jetzt man mit 3 9K-RAMs versuchen, die sind mehr als gross
genug.

von Marius W. (mw1987)


Lesenswert?

Ich hatte noch nie Probleme damit. Einfach beim Beginn des Bildes (noch 
im Schwarzen Sync-Bereich) das DMA-Auslesen mit dem Avalon Master 
starten und einfach die Anzahl an Pixel aus dem RAM lesen. Wichtig ist, 
dass dein Avalon-Master im Burst-Modus arbeitet. Das bringt dann gute 
Performance.

Gruß
Marius

von Kest (Gast)


Lesenswert?

Die QSys-Komponente kann man mit user-Refreshes ausstatten (gibts ein 
Häckhen dazu). Dann kannst Du dann refreshen, wenn Du gerade lustig 
bist. Ob Du Dir damit andere Probleme einhandelst oder nicht, ist eine 
andere Frage -- ich habe das immer vermieden.

Wenn Dein Speicher schnell genug ist, dann muss das FIFO so groß sein, 
dass da genügend Daten vorhanden sind, wenn Du nach dem V-Sync anfängst 
was auszugeben und Dein Speicher sich gerade im Refresh befindet bzw. 
gerade dabei ist, Daten zu lesen.
Vielleicht habe ich mich unglüglich ausgedrückt, dass das FIFO 
ausreichend für den H und V-Sync dimensioniert sein muss. Aber, ich 
glaube, Du hast mich schon richtig verstanden.

Man kann es drehen wie man will, aber um die optimale Performance zu 
erreichen muss man ausreichend große Fifos haben. Wenn Du nur 512 Bit 
FIFO verwendet hast, dann sind es vielleicht 16 Pixel drin -- das ist 
nichts! Das puffert wahrscheinlich nicht mal Bank-Switching bzw. die 
anfängliche Latenz. Ist klar, dass VGA aussteigt.

Kest

von SDRAM User (Gast)


Lesenswert?

Marius Wensing schreib:
>..Wichtig ist,
>dass dein Avalon-Master im Burst-Modus arbeitet. Das bringt dann gute
>Performance.

Ich habe noch nicht alle BurstMode-Aspekte implementiert, werd's
aber noch vervollständigen. Aber zZ ist der Durchsatz ausreichend
und ROW/COL-Command Latenzen kein Problem. Nur die Refreshes
grätschen mir dazwischen, das folgere ich jedenfalls aus meinen
statistischen Auswertungen.


@Kest schrieb:
>Die QSys-Komponente kann man mit user-Refreshes ausstatten ..

genau so was habe ich gesucht. Hab's gerade mal kurz ausprobiert,
zu den Standard-DDR-Signale werden noch zusätzliche Refresh-Signale
(Init,Request,Ack etc.) generiert. Mal sehen, welchen Einfluss das
auf die Anderen QSys-Komponenten hat.

Auf jeden Fall mal vielen Dank für eure Hilfe.

Gruss

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.