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:> 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.