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
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
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!
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
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.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.