Hi, ich mache derzeit ein Projekt für ein Evalboard und mich interessiert spaßeshalber mal wie man verschiedene Auflösungen anbieten könnte. Aktuell habe ich 1280x1024 implementiert, was mit 108 MHz läuft und ohnehin Asynchron zum Framebuffer im SDRam arbeitet, d.h. den Takt ändern wäre möglich. Allerdings scheint mir das mit den PLLs im FPGA nicht zu klappen, d.h. die Taktmult/div Einstellungen zur Laufzeit ändern. Was gibt es sonst für Alternativen? Ein höherer Takt mit Enable scheint mir nicht möglich, weil ich damit die Teiler nicht treffe. Die erlaubte 0.5% Toleranz hilft da auch nicht gerade weiter. Oder muss ich doch immer die gleiche Auflösung ausliefern und im FPGA skalieren? Habt ihr noch Ideen oder vielleicht schon mal sowas gemacht?
FPGA zum Spass schrieb im Beitrag #5799868: > Allerdings scheint mir das mit den PLLs im FPGA nicht zu klappen, d.h. > die Taktmult/div Einstellungen zur Laufzeit ändern. Pauschal ist diese Frage nicht beantwortbar, da je nach FPGA-Hersteller und Typ unterschiedliche Taktgeneratoren verbaut sind. Also welches Evalboard setzt du ein? Statt PLL etc. während der Laufzeit umzustellen wäre es auch möglich, mehrere Taktgeneratoren für die unterschiedlichen Pixeltakte zu nutzen und mit einem clockmultiplexor zwischen denen umzuschalten. Und es gibt externe Taktgeneratoren, die man gut per SPI o.ä. umstellen kann. Skalierung also ein kleinaudgelöstes Pixel bei einer höheren Auflösung als 2x2 Pixelquadrat auszugeben ist auch möglich. Ferner teilen sich gern verschiedenen Auflösungen den selben Pixelclock: http://tinyvga.com/vga-timing für 108MHz wäre es bspw 1152x864 oder 1280x960 oder 1280x1024
Eine einfache Lösung ist die, sich nicht 1:1 an die Angaben der Standardauflösungen zu halten. Wichtig bei der Auflösung ist ja nur der Anzeigebereich. Die Schultern- und Syncbereiche können variert werden. Auch kann man je nach Monitor die Bildfrequenz leicht ändern. Der Nachteil dieser Methode ist der, dass sich je nach Monitor der Anzeigebereich um mehrere Pixel in jeder Richtung verschieben kann, hier ist monitorabhängig eine kleine Änderung der Schulter- und Syncwerte erforderlich.
Danke schonmal für die Tipps. Nutze aktuell ein Terasic DE1 mit Cyclone 2, der kann leider den Takt nicht zur Laufzeit umkonfigurieren soweit ich das überblicke, maximal ein paar verschiedene Multiplexen. Solange ich mich auf einen Monitor festlege sehe ich da weniger ein Problem. Hier kann man notfalls jede benötigte, niedrige Auflösung selbst interpolieren. Der Monitor hat doch eh nur ein Panel mit fixer Auflösung und solange ich die ausgebe wäre es egal wer nun interpoliert. Eine Skalierung 2x2(540x512), 3x3(426x341) und 4x4(320x256) biete ich schon an, wollte ich einfach testweise mal implementieren. Ungerade, echte Interpolation zieht freilich viel mehr Aufwand nach sich. Sich nicht an die Vorgaben zu halten kann man sicher mal probieren, ist dann leider Glücksspiel mit dem Monitor. Wenn ich mal vergleiche: meine Logik würde aktuell rund 150 Mhz für den VGA Teil schaffen. Das hilft mir aber nicht weiter, weil die für mich wichtige 1280*1024 bei 60 Hz damit nicht zu betreiben ist. Also doch 108Mhz Basis, weil ich 216Mhz sicher nicht schaffe. Wenn dann auch 640x480@60Hz laufan soll wäre das ein Pixeltakt von 25.175Mhz, meine Näherung aber 27Mhz. Das klingt noch garnicht so viel, aber bei 0,5% erlaubter Abweichung ist man da mit 7,2% schon um das Zehnfache entfernt...
FPGA zum Spass schrieb im Beitrag #5800669: > Der Monitor hat doch eh nur ein Panel mit fixer Auflösung und solange > ich die ausgebe wäre es egal wer nun interpoliert. Wenn dein System immer ein 1280x1024-Timing unabhängig von der Bildauflösung ausgibt, dann funktioniert es an einem 1024x768-Panel nie. Sollte man berücksichtigen. :-) FPGA zum Spass schrieb im Beitrag #5800669: > Wenn dann auch 640x480@60Hz laufan soll wäre das ein Pixeltakt von > 25.175Mhz, meine Näherung aber 27Mhz. Damit kommst du auf etwa 65 Hz, das sollte ein normaler Bildschirm eigentlich können. Ansonsten kannst du auch 26 MHz (640x480@62) und 104 MHz (1280x1024@58) als Kompromiss benutzen. Die Altera-Teile kenne ich nicht, daher kann ich dir nicht sagen, ob die PLL zur Laufzeit konfigurierbar ist oder ob es vielleicht eine andere Taktquelle gibt.
S. R. schrieb: > Die Altera-Teile kenne ich nicht, daher kann ich dir nicht sagen, ob die > PLL zur Laufzeit konfigurierbar ist oder ob es vielleicht eine andere > Taktquelle gibt. Datenblatt PLL im CycloneII ist dort: https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/hb/cyc2/cyc2_cii51007.pdf Blockbild auf Seite 5. Jede PLL hatt mehrere konfigurierbare Ausgänge. Damit sollte es möglich sein, verschiedene Pixelclocks zu erzeugen. Alternativ kann man den Eingangstakt der PLL (der mglw. von einer weiteren PLL im FPGA kommt, ohne Konfiguration umschalten ("manual switch over") S.20. DER2C20 (auf em DE1?) sollte 4 PLL's haben, das komplette CycII Datenblatt dort: https://courses.cs.washington.edu/courses/cse467/08au/labs/Resources/cyc2_cii5v1.pdf
Laut der hiesigen Tabelle in Projekt VGA Core in VHDL müssten auch 135 MHz zu machen sein - aus derselben PLL.
S. R. schrieb: > 104 > MHz (1280x1024@58) als Kompromiss benutzen. Moment, man kann einfach mit der Pixelrate runtergehen und halt nur 58 Hz anzeigen? Wäre mir neu, würde ich aber definitiv probieren! C. A. Rotwang schrieb: > Jede PLL hatt mehrere konfigurierbare Ausgänge. > Damit sollte es möglich sein, verschiedene Pixelclocks zu erzeugen. Stimmt! Damit sind zumindest ein paar verschiedene Takte möglich. Wenn man tatsächlich Ausgänge von PLLs auf Eingänge anderer Schalten kann ergeben sich durchaus einige Optionen, das probiere ich auch aus, klingt vielversprechend!
FPGA zum Spass schrieb im Beitrag #5801779: > S. R. schrieb: >> 104 >> MHz (1280x1024@58) als Kompromiss benutzen. > > Moment, man kann einfach mit der Pixelrate runtergehen und halt nur 58 > Hz anzeigen? Wäre mir neu, würde ich aber definitiv probieren! Würde mich auch mal interessieren wie moderen Flachdisplays mit niedrigeren timings umgehen können und wie das ausschaut. Die ursprünglichen VGA-timings stammen ja noch aus Zeiten der Bildröhre,wo man eigentlich 72 Hz Bildwiederholfrequenz brauchte damit der Elektroden-Strahl kein flimmerndes Bild zeichnete. Später wurden dann die TFT's pauschal auf 60 Hz spezifiziert, warum auch immer > C. A. Rotwang schrieb: >> Jede PLL hatt mehrere konfigurierbare Ausgänge. >> Damit sollte es möglich sein, verschiedene Pixelclocks zu erzeugen. > Wenn man tatsächlich Ausgänge von PLLs auf Eingänge anderer Schalten > kann ergeben sich durchaus einige Optionen, das probiere ich auch aus, > klingt vielversprechend! Schau mal im Userguide ( https://courses.cs.washington.edu/courses/cse467/08au/labs/Resources/cyc2_cii5v1.pdf) S. 48/49 Bild 2-13 ; dort sin dieinternen Clock multiplexer gezeigt. Der clockmultiplexor wird wohl mit der IP Library erzeugt Casic functions -> Clocks; PLL ... und heisst wohl ALTCLKCTRL. Da ich kein CycII installiert habe, nur Cyc10. sind diese Angaben etwas unsicher.
FPGA zum Spass schrieb im Beitrag #5800669: > Wenn ich mal vergleiche: meine Logik würde aktuell rund 150 Mhz für den > VGA Teil schaffen. Das hilft mir aber nicht weiter, weil die für mich > wichtige 1280*1024 bei 60 Hz damit nicht zu betreiben ist. > Also doch 108Mhz Basis, weil ich 216Mhz sicher nicht schaffe. Hat dein Cyclone 2 FPGA DDR fähige Ausgänge? Damit wäre es ev. möglich, die 216 MHz an den Ausgängen zu erreichen, während du intern bei 108 MHz und doppelter Datenpfad breite bist.
FPGA zum Spass schrieb im Beitrag #5801779: > Moment, man kann einfach mit der Pixelrate runtergehen und > halt nur 58 Hz anzeigen? Wäre mir neu, würde ich aber > definitiv probieren! Warum soll das nicht gehen? Eventuell musst du ein bisschen mit den Konstanten spielen, damit die Zeilen trotzdem gleich lange (in µs) dauern. Die Frage ist, ob der Bildschirm darauf noch synchronisiert. Meistens tut er das, denn ein bisschen Toleranz ist immer: Die Oszillatoren in Signalquelle und -senke laufen nie exakt synchron zueinander. Einen echten CRT kann man mit im Prinzip beliebigen Timings ansteuern (sofern er Multisync-fähig ist und man innerhalb der Grenzen bleibt, sonst geht er kaputt). Das wurde z.B. in einigen Arcade-Systemen ausgenutzt. Ich habe eine Zeit lang einen monochromen VGA-Servermonitor mit 1056x480@60 betrieben (VGA-Timing, aber mit höherem Pixeltakt). C. A. Rotwang schrieb: > Würde mich auch mal interessieren wie moderen Flachdisplays mit > niedrigeren timings umgehen können und wie das ausschaut. Das hängt vermutlich stark vom spezifischen Bildschirm ab, mit welchen Abweichungen vom nominalen Timing er noch klarkommt. Moderne Bildschirme haben meist eine Elektronik, die einen bekannten Modus erkennen und außerhalb dessen dann "ungültiges Signal" o.ä. anzeigen. C. A. Rotwang schrieb: > Die ursprünglichen VGA-timings stammen ja noch aus Zeiten der > Bildröhre, wo man eigentlich 72 Hz Bildwiederholfrequenz brauchte > damit der Elektroden-Strahl kein flimmerndes Bild zeichnete. Bei alten Bildschirmen mit lange nachleuchtendem Phosphor reichen auch 50 Hz für ein stabiles Bild aus... erst wenn man Bewegungen schlieren- und flimmerfrei anzeigen möchte, braucht man höhere Frequenzen. > Später wurden dann die TFT's pauschal auf 60 Hz spezifiziert, > warum auch immer Ursprünglich hat VGA einen Pixeltakt von 25.175 MHz, mit dem man auf 640x480@60 oder 640x400@70 kommt. Ersteres ist die bekannte Standardauflösung. Sämtliche anderen VESA-Auflösungen kommen ebenfalls in 60 Hz-Varianten daher. Die 60 Hz kommen vermutlich aus der Netzfrequenz in den USA, denn daraus lassen sie sich recht einfach erzeugen (vgl. auch die Fernsehstandards mit NTSC-30 und PAL-25).
S. R. schrieb: > Die 60 Hz kommen vermutlich aus der Netzfrequenz in den USA, denn daraus > lassen sie sich recht einfach erzeugen (vgl. auch die Fernsehstandards > mit NTSC-30 und PAL-25). Das sind aber 59,94!
S. R. schrieb: > C. A. Rotwang schrieb: >> Die ursprünglichen VGA-timings stammen ja noch aus Zeiten der >> Bildröhre, wo man eigentlich 72 Hz Bildwiederholfrequenz brauchte >> damit der Elektroden-Strahl kein flimmerndes Bild zeichnete. > > Bei alten Bildschirmen mit lange nachleuchtendem Phosphor reichen auch > 50 Hz für ein stabiles Bild aus... erst wenn man Bewegungen schlieren- > und flimmerfrei anzeigen möchte, braucht man höhere Frequenzen. Das habe ich anders in Erinnerung, gerade bei bewegten Bilder war/ist 50 Hz ausreichend (beispielsweise analoges Fernsehen PAL 25 Halbbilder pro sec) bei stehenden Images wie Textverarbeitung, Datenbank etc. wird für Ermüdungs- und kopfschmerzfreies Arbeiten eine hohe Wiederholfrequenz bei hoher Auflösung entscheidend. Deshalb entschieden sich "Vielschreiber" eher für einen ATARI ST mit Monochrom-monitor (640 × 400 @ 71.25 Hz) und Amiga-nutzer für einer Flickerfixer der die Wiederholfrequenz nachträglich von 50 auf 100 Hz vergrösserte. IM PC-bereich war vor VESA die "Schwedennorm" TCO (Tjänstemännens Centralorganisation) gefragt, https://www.ingenieur.de/karriere/arbeitsleben/arbeitssicherheit/schweden-pruefsiegel-fuer-monitore/ . https://de.wikipedia.org/wiki/TCO_(Standard) die hab ich mit "mindestens 72 Hz" Erinnerung, jetzt steht da im Text sogar 85 Hz als Limit.
Wie gesagt, die notwendige Frequenz für ein flimmerfreies Bild auf einem CRT hängt von der Nachleuchtdauer des Phosphors ab. Du kannst ja einen antiken CRT (oder meinetwegen ein passives STN-LCD, das hat den gleichen Effekt) mal mit einem Video beaufschlagen. Das zieht deutlich sichtbare Schlieren, weil die Bilder ineinanderlaufen. Um das zu verhindern, wurden die Bildschirme mit anderen Leuchtschichten ausgestattet, die weniger nachleuchten - und als Folge dessen bei geringeren Frequenzen flimmern. Also musste man die Bildwiederholrate (deutlich) erhöhen, um ein flimmerfreies Bild zu erhalten. Der Flickerfixer beim Amiga erhöht die hochauflösenden Modi von 25 Hz auf 50 Hz, weil dort sämtliche höher auflösenden Modi des eingebauten Chipsatzes interlaced arbeiten. Also keine 100 Hz. Beim Atari ST hatte der monochrome Bildschirm eine höhere Auflösung als der Farbbildschirm und dadurch ist Text schärfer. Die Bildwiederholrate ist dafür nebensächlich. Videomann schrieb: > Das sind aber 59,94! Das kam später.
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.