Forum: FPGA, VHDL & Co. vga Ausgabe - was bremst denn da.


von Clemens M. (panko)


Angehängte Dateien:

Lesenswert?

Alle Monate wieder setze ich mich in freien Tagen hin und beschäftige 
mich mit der fpga Welt. Klappt schon deutlich besser, aber immer noch 
mit Fragezeichen und ohne Gurt.

Ich will zu meiner jetzigen Übung nicht allzu viele Fragen auf einmal 
stellen und mit einer anfangen.
Es geht um ein vga Signal. Das muss langsam mal drin sein, habe ich mir 
gedacht und es funktioniert auch dahingehend, daß der Monitor was 
anzeigt aber eben nicht dahingehend, daß ich fraglos glücklich wäre.

Ich baue auf einem Nexys2 Board von Digilent auf. Wer es nicht kennt: 
Spartan3e und ein 50 MHz Oszillator. Daraus habe ich per dcm 80 MHz 
gemacht, denn die kann ich für den benötigten Pixeltakt von 40 MHz 
komfortabel teilen und ich habe mal einen höheren Takt erzeugt. 
Benötigen tue ich 80 MHz derzeit nicht, könnte aber ja auch mal sein.


Frage 1: Bei einer Synthese wird mir ja von der ise eine bestimmte 
maximale Frequenz genannt. Bezieht sich das auf den physikalischen 
Eingangstakt vor dcm (weiß ise also zu dem Zeitpunkt, daß eine dcm 
vorliegt) oder ist das der maximale Takt nach dcm?

Nur nach dem Timing wurden da so 119 MHz genannt. Da kam es mir schon 
komisch vor, denn man liest immer von 200 MHz und mehr. Ich habe jetzt 
ja Pong in Angriff, also vergleiche ich die Strahlkoordinaten mit dem 
Ball und gebe Sprite-mäßig Hintergrund oder Ball aus. Wenn ich mal ein 
Ram, Framebuffer oder irgendwelche wirklichen Berechnungen in Angriff 
nehme wo soll das dann hinführen. Ein Ram mit 67 MHz clk scheint mir 
mehr als mau zu sein.

Das gesamte Design, also wirklich ja nix großartiges, ist schon auf 67 
MHz rausgekommen. Komischerweise macht der Ball abe rkeine Zicken und 
die dcm spuckt ja 80 MHz aus. Das verwirrt mich grad total.

Da wüsste ich gerne, ob ich meine Denkweise grundsätzlich falsch 
angesetzt habe, WAS wirklich die Zeit schluckt und was für Tips ich in 
die Zukunft mitnehmen kann.
Allgemeine andere Verbesserungsvorschläge sind mir natürlich auch 
willkommen. Wirklich zufrieden bin ich mit dem Code nicht.

von Clemens M. (panko)


Lesenswert?

Ach ja: zweite Frage. Ich habe das Reflektieren des Balls ja jetzt durch 
Zustände gemacht.
Zuerst hatte ich als vx_s ein integer range -5 to 5 und habe immer vx 
auf die Position addiert, sowie ggf. vx <= -vx gemacht.

Handelt man sich bei so einer Vorgehensweise früher oder später Probleme 
ein verglichen mit so kleinen state-machines oder ist das eher 
empfehlenswert?

schönen Gruß

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Clemens M. schrieb:
> Bezieht sich das auf den physikalischen Eingangstakt vor dcm
Ja.

> wo soll das dann hinführen.
Wirf mal die statische Timinganalyse an und such den kritischen Pfad. 
Ich vermute, der ist irgendwo da:
1
      if ( to_integer(unsigned(x_s)) >= ball_x_s and to_integer(unsigned(x_s)) < ball_x_s+20 and to_integer(unsigned(y_s)) >= ball_y_s and to_integer(unsigned(y_s)) < ball_y_s+20) then

> wo soll das dann hinführen.
Nur als Tipp: du kannst die Sachen ganz relaxt vorher berechnen, denn 
der Ball taucht ja nicht unvermittelt irgendwo auf...

von Clemens M. (panko)


Lesenswert?

"Nur als Tipp: du kannst die Sachen ganz relaxt vorher berechnen, denn
der Ball taucht ja nicht unvermittelt irgendwo auf..."

Da verstehe ich glaube ich nicht, was du meinst. Ich hätte da einfach 4 
Vergleicher erwartet, was und wie kann ich da vorher machen?
Wäre nett, wenn du das noch mal klarstellst.
danke


P.S. bezüglich dieser Timinganalys muss ich mich erst mal einlesen, wie 
das geht etc. pp. das wird wohl vor morgen nichts.

von P. K. (pek)


Lesenswert?

Resultat jedes Vergleichers zwischenspeichern, das nennt sich dann 
Pipelining...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Clemens M. schrieb:
> Ich hätte da einfach 4 Vergleicher erwartet,
> was und wie kann ich da vorher machen?
Du kannst den langsamen Vergleicher für die Zeile (die ist ja recht 
lang stabil und zudem zu erwarten) da rausnehmen und nur noch ein vorher 
ausgewertetes Bit in den schnellen Vergleicher reingeben.
So wie du es jetzt beschrieben hast, muss der Synthesizer alles mit 
maximaler Geschwindigkeit auslegen.

Probier mal einen Vergleich auf Gleichheit und schalte dann ein Flag 
aktiv, und setze das ein paar Pixel/Zeilen später wieder inaktiv:
1
  if (anfangs_zeile-1 = akt_zeile) then zeile_passt<=1; end if;
2
  if (ende_zeile-1 = akt_zeile) then zeile_passt<=0; end if;
3
  if (anfangs_spalte-1 = akt_spalte) then spalte_passt<=1; end if;
4
  if (ende_spalte-1 = akt_spalte) then spalte_passt<=0; end if;
5
6
  if (zeile_passt und spalte_passt) then Ball_anzeigen; 
7
  else                                   Hintergrund_anzeigen;
8
  end if;
Damit entkoppelst du die Vergleicher voneinander und nimmst eine 
Logikebene aus dem Pfad heraus...

von Clemens M. (panko)


Lesenswert?

Muss ich erst mal sacken lassen.
Ok daß sich ein Zeilenvergleich rausnehmen lässt leuchtet mir ein.
Du hast die Vergleiche jetzt schon noch im getakteten Prozess? Ich hätte 
jetzt gedacht, ich muss denn hsync noch hinnehmen, um bei eienr neuen 
Zeile den Vergleich anzustoßen.

Die Vorgehensweise deckt sich mit dem von Peter gesagten? Oder meintest 
du etwas anderes.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Clemens M. schrieb:
> Die Vorgehensweise deckt sich mit dem von Peter gesagten?
Richtig, da hatte ich das Fenster vor dem Senden zu lange offen 
rumliegen. Peter hats viel kompakter gesagt... ;-)

von Clemens M. (panko)


Lesenswert?

Erst mal vielen Dank an euch.
Kann man sozusagen als Mantra abspeichern, daß Überprüfung auf 
Gleichheit und Flag setzen meiner Intervall Abfrage immer vorzuziehen 
ist, und große Logikverknüpfungen zu vermeiden sind?

Ich muss wirklich sagen, das ist haarig für einen mittelmäßigen 
Softwerker - aber auch spannend :-)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Das macht man nur, wenn nötig, denn wie gesagt: du musst dieses Flag in 
einem Register speichern (sonst bringt das alles nichts) und handelst 
dir so gleich mal einen Takt Latency ein...

von Berater (Gast)


Lesenswert?

Clemens M. schrieb:
> benötigten Pixeltakt von 40 MHz
Was ist denn das für ein komischer Pixeltakt?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Berater schrieb:
>> benötigten Pixeltakt von 40 MHz
> Was ist denn das für ein komischer Pixeltakt?
SVGA. Denn VGA hat 25MHz...
http://martin.hinner.info/vga/timing.html

von J. S. (engineer) Benutzerseite


Lesenswert?

> Clemens M. schrieb:
> Was ist denn das für ein komischer Pixeltakt?

Ich würde eher zu grösseren Taktraten raten, da man mit 108 / 135 MHz 
auch die 1280x1024 hinbekommt, was etwas ansehnlicher ist auf grossen 
TFTs.

http://www.mikrocontroller.net/articles/Projekt_VGA_Core_in_VHDL

von Duke Scarring (Gast)


Lesenswert?

Jürgen Schuhmacher schrieb:
> Ich würde eher zu grösseren Taktraten raten, da man mit 108 / 135 MHz
> auch die 1280x1024 hinbekommt, was etwas ansehnlicher ist auf grossen
> TFTs.
Die größere Bildauflösung bedingt aber auch eine größere 
Speicherbandbreite. Wenn man es dann noch bunter haben will (8 Bit -> 32 
Bit Farbtiefe) kommt da nochmal Faktor 4 dazu.

z.B.:
 800x600  @ 256 Farben -->  40 MByte/s
1280x1024 @ 16M Farben --> 540 MByte/s

Diese Speicherbandbreite muß der Speichercontroller und ein ggf. 
verwendetes Bussytem liefern können.

Duke

von Clemens M. (panko)


Lesenswert?

Genau das war auch meine Überlegung.
Derzeit experimentiere ich ja noch mit, ich nenns mal 
Echtzeitgenerierung der Bilddaten.
Wenn ich später überhaupt ne Chance haben möchte irgendwie einen 
Framebuffer anzugehen, habe ich mit größerer Auflösung gar keine Chance 
gesehen ich dachte 800x600 ist ein halbwegs guter Kompromiss zwischen 
Takt und TFT.

Aber falls ein experter Speicher ins Spiel kommt werde ich euch ganz 
sicher ohnehin um Rat fragen müssen. :-)

P.S. Durch meinen Anfängermalus würde ich bei allem, was theoretisch 
möglich ist einen Geschwindigkeitsfaktor von 2-3 abziehen. :-(
Ich hab halt wenig Wissen darum, bin im abflachenden Bereich der 
Lernfähigkeit und habe begrenzte Zeit. Aber umso mehr freue ich mich 
über das Forum hier

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.