Forum: FPGA, VHDL & Co. VGA verschiedene Auflösungen


von FPGA zum Spass (Gast)


Lesenswert?

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?

von C. A. Rotwang (Gast)


Lesenswert?

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

von Sigi (Gast)


Lesenswert?

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.

von FPGA zum Spass (Gast)


Lesenswert?

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

von S. R. (svenska)


Lesenswert?

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.

von C. A. Rotwang (Gast)


Lesenswert?

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

von Videomann (Gast)


Lesenswert?

Laut der hiesigen Tabelle in Projekt VGA Core in VHDL müssten auch 
135 MHz zu machen sein - aus derselben PLL.

von FPGA zum Spass (Gast)


Lesenswert?

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!

von C. A. Rotwang (Gast)


Lesenswert?

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.

von Christophz (Gast)


Lesenswert?

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.

von S. R. (svenska)


Lesenswert?

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

von Videomann (Gast)


Lesenswert?

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!

von C. A. Rotwang (Gast)


Lesenswert?

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.

von S. R. (svenska)


Lesenswert?

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
Noch kein Account? Hier anmelden.