Forum: FPGA, VHDL & Co. Schwierigkeiten mit dem Video Decoder auf dem Altera DE2 Board


von Prediko (Gast)


Angehängte Dateien:

Lesenswert?

Bevor ich mein Problem schildere schicke ich voraus, dass ich mit 
Quartus II v8.1 Web Edition, dem the Altera DE2 Board (besonders mit dem 
ADV7181B Video Decoder) und dem PAL-Ausgang einer Panasonic Digital 
Camera arbeite.

Um mich in das Thema einzuarbeiten, wollte ich einfach die Clock Zyklen 
zählen, die PAL-Zeile dauert. Das habe ich mit einem sehr einfachen 
Counter, welcher mit HSYNC zurückgesetzt wird und seinen Endwert auf den 
roten LED’s anzeigt, auch hinbekommen. Die Simulation funktionierte auch 
einwandfrei. Aber wenn ich versuche meine Hardware auf den FPGA zu laden 
passiert Folgendes: Es gibt LEDs die durchgängig leuchten und welche die 
sehr schnell blinken. Wenn ich nur die betrachte die durchgängig 
leuchten, dann zeigt mein Counter die richtige Länge einer Zeile an.

Aber ich kann ja die blinkenden nicht außer acht lassen. Sollte nicht 
jede Zeile eines PAL-Signals die gleiche länge haben? An was könnte das 
liegen – an meiner Programmierten Hardware (im Anhang), dem Decoder 
Schaltkreis oder gar meiner Camera?

Ich bin etwas verzweifelt, weil das Problem mir eigentlich so einfach 
erschien, aber mich schon eine ganze Weile gefangen hält. Ich freue mich 
wirklich sehr über jede Hilfe.

MfG Alex

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Ich sehe den Fehler auch nicht auf Anhieb,
Es ist mehr eine Denksportaufgabe.

versuche es mit dem Prinzip "Teile und herrsche."

Ein Prozess für den horizontalen Counter und einen zweiten Prozess für 
den vertikalen Counter.

Da wird es gleich übersichtlicher.

René

von Prediko (Gast)


Angehängte Dateien:

Lesenswert?

Danke für die schnelle Antwort. Ich hab das vorher schon einfach 
probiert und hätte wirklich besser gleich die andere Datei hochladen 
sollen.
Leider kommt es da bei mir auf das selbe Problem heraus.

Ich hab hab wirklich keine Idee mehr woran das liegen könnte. Laut 
Datenblatt vergehen 1728 Takte bis zum nächsten HSYNC Impuls. Da ich 
während des HSYNC Impulses keine Takte zähle, bleiben bei mir demzufolge 
1726 Takte. Wie gesagt, ich komme auch auf die Anzahl, aber eben nur 
wenn ich nur die dauerhaft leuchtenden LEDs betrachte alle anderen 
blinken ganz schnell. Das würde ja bedeuten, dass zwischendrin Zeilen 
mit anderen Längen auftreten und das macht aber ja keinen Sinn.

Vielleicht hat ja jemand schon ähnliche Probleme mit dem Decoder 
gemacht. Oder es ist wirklich der PAL Ausgang der Camera, der den 
Decoder dazu bringt, dass er so komisch reagiert. Aber andererseits kann 
ich mir das auch nicht vorstellen.
Der Decoder läuft auch mit den Grundeinstellungen.

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


Lesenswert?

1
     if(hsync = '0') then
2
      pstate <= '1';
3
      pixel_count <= pcount;
4
    elsif(rising_edge(video_clk)) then
Ein Klassiker: Ein asynchroner Reset ist schlecht.
Wenn das zudem noch ein funktionales Signal ist, entspricht das einer 
Statemachine mit einem asynchronen Eingang. Sieh dir mal die Erklärung 
dazu an: 
http://www.lothar-miller.de/s9y/archives/64-State-Machine-mit-asynchronem-Eingang.html

Fazit: Es ist Zufall, was passiert, wenn hsync = '1' wird...

Warum machst du es nicht so:
1
  if(rising_edge(video_clk)) then
2
           if(hsync = '0') then
3
         pstate <= '1';
4
         pixel_count <= pcount;
5
           else
6
               if vsync = '0' then
7
                  :

von Alexander P. (prediko)


Angehängte Dateien:

Lesenswert?

Vielen Dank für die Antwort. Ich habe es auf jeden Fall jetzt einmal so 
gemacht, wie du mir vorgeschlagen hast. Leider komme ich erst morgen 
wieder an das Board ran. Ich werde dann Bescheid geben, ob es so 
funktioniert hat.

von Alexander P. (prediko)


Angehängte Dateien:

Lesenswert?

Ich hab es jetzt auf das DE2 Board gespielt und es funktioniert zwar 
wesentlich besser, aber immer noch nicht einwandfrei.
Das heißt im Prinzip, dass der Kontrast zwischen den LEDs größer 
geworden ist. Allerdings blitzen die "falschen" LEDs immer noch auf.

Hat vielleicht irgendwer noch eine andere Fehlerstelle gesehen? Oder hab 
ich gar einen neuen Fehler rein gemacht?

Vielen Dank für eure Zeit.

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


Lesenswert?

> Hat vielleicht irgendwer noch eine andere Fehlerstelle gesehen?
Ich würde mal eine Flankenerkennung auf den Hsync setzen, und dann von 
Flanke zu Flanke zählen: 
http://www.lothar-miller.de/s9y/categories/18-Flankenerkennung

> Allerdings blitzen die "falschen" LEDs immer noch auf.
Bist du sicher, dass nicht doch mal zwischendurch unterschiedlich lange 
Sync-Impulse kommen? Z.B. durch den vsync, denn der kann dir das Zählen 
unterbrechen:
      if vsync = '0' then
        if hsync = '0' then

von Alexander P. (prediko)


Angehängte Dateien:

Lesenswert?

Danke Lothar, dass sieht wirklich schon viel besser aus.
Ich hab einfach das edge_detect Design von dir genommen und den 
Rise-Ausgang im Schematic an mein Design (l_counter_micro_2.vhd) 
angekoppelt. Und jetzt halten die LEDs verhältnismäßig ruhig.
Verhältnismäßig bedeutet hier, dass er offensichtlich zwischen den 
Werten 1725 und 1726 hin und her springt. Ich bin mir nicht ganz sicher 
woran das liegen könnte.
Ich verstehe ehrlich gesagt auch noch nicht so richtig, wieso es nicht 
schon vorher funktioniert hat. Die Systematik ist doch die Gleiche 
geblieben. Es liegt quasi ausschließlich an der Synthese?

von matzunami (Gast)


Lesenswert?

Hi... ich mache momentan auch eine Bildverarbeitung mit einem FPGA 
(Virtex5). Am Anfang wollte ich mir auch meine Pixel und Linien 
mitzählen, da ich kein schönes stehendes Bild hatte. Und siehe da, ich 
hatte den selben Effekt wie du, meine Pixelwerte schwankten leicht. Dies 
lag aber nicht an der Synthese, sondern an meinem Aufbau (Leitung vom 
Sensor zum FPGA Board). Habe diesen geändert und schon funktionierte 
alles. eventuell hast du ja ein ähnliches Problem? Wie überträgst du 
deine Sensordaten?

mfg
matzunami

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


Lesenswert?

> Ich bin mir nicht ganz sicher woran das liegen könnte.
Wie steil sind die Flanken des HSYNC? Zu welchem Zeitpunkt kommt die 
Flanke des HSYNC? Evt. zusammen mit der Taktflanke?
Nimm mal testweise die  falling_edge(video_clk)...

von Alexander P. (prediko)


Lesenswert?

An Lothar:
Ich hab nach Simulation schon vermutet, dass die Zeit, die der 
RISE-Impuls stehen bleibt, vielleicht etwas knapp werden könnte und habe 
in deinem edge detector auf falling_edge umgesattelt. Das Ergebnis war 
identisch - keine Besserung.
Die Rise/Fall Time der Ausgänge beträgt laut Datenblatt 1 ns. Die Flanke 
des HSYNC kommt mit der fallenden Flanke des Taktes.


An Matzunami:
Ich kann an dem Routing nichts machen. Ich nutze das vorgefertigte DE2 
Board von Altera. Und falls du den Weg von meiner Kamera zum Board 
meinst - da kann ich auch nicht viel machen. Ich hab leider nur diese 
Eine und dazu nur dieses eine Kabel.

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


Lesenswert?

> Die Flanke des HSYNC kommt mit der fallenden Flanke des Taktes.
Wie steil und sauber ist die HSYNC-Flanke (gemessen)?

von Alexander P. (prediko)


Lesenswert?

Leider komm ich so ohne Weiteres nicht da ran. Ich versuche das mal 
herauszubekommen.

Danke noch mal, und wenn jemandem noch etwas auffällt, dann würde ich 
mich freuen, wenn er es sagt.

MfG Alex

von Alexander P. (prediko)


Angehängte Dateien:

Lesenswert?

So, dann will ich die Sache hier mal etwas abrunden. Ich hab mir heute 
mal den Takt und HSYNC mit einem Oszi angeguckt und sehr erstaunliche 
Erkenntnisse erlangt.
Altera hat das DE2 Board in zwei Revisionen herausgebracht. Die 
unterscheiden sich äußerlich nur durch einen anderen Typ von 
Kondensatoren. Ist ja auch egal.
Auf jeden Fall sieht es wohl so aus, dass bei der älteren Revision (mit 
der habe ich gearbeitet) der Takt absolut asynchron zum HSYNC läuft. 
Wenn ich auf eins der beiden Signale getriggert habe ist das andere 
immer davon gelaufen.
Glücklicherweise waren im Labor auch Boards der zweiten Revision 
vorhanden und bei denen kommt der HSYNC genau mit der fallenden 
Taktflanke. Ich hab das bei mehreren Boards ausgetestet.
Quintessenz also, bei den Boards der ersten Revision haut da irgendwas 
nicht hin. Ich kann mir auch gar nicht vorstellen wie das gehen soll, da 
ja das HSYNC Signal im Decoder mit dem selben Takt erzeugt wird.
Das passt auch alles genau zu meinem Ergebnis. Da mein Counter ja 
offensichtlich 1726 +- 1 angezeigt hat.
Auf jeden Fall bin ich sehr dankbar für den Hinweis, die Signale zu 
messen und hab mir jetzt ein Board der zweiten Revision mitgenommen :)

MfG
Alex

PS: ich hab mal trotzdem schnell die zwei Bilder angehängt. Die 
Bezeichnungen sprechen für sich.

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.