Forum: FPGA, VHDL & Co. PLL Eingang mit Glitches


von Christopher G. (cbg)


Lesenswert?

Hallo!
Ich hab einen Cyclone IV E FPGA, der mit 50 MHz läuft (dev board). Ich 
bekomme von einem CMOS Sensor Daten und einen Takt (CLK) von 20 MHz. Die 
Daten möchte ich jetzt an der fallenden Taktflanke von CLK latchen. Mein 
Problem ist nun, dass die Daten zwar stabil sind zwischen zwei 
steigenden CLK Flanken, CLK selber jedoch manchmal Glitches enthält. Das 
haut mir meinen Synchronizer für die Datenleitungen und die 
dahinterliegende Logik, welche die synchronisierten Signale verwendet, 
zusammen. Ich habe jetzt CLK als Eingang zu einer PLL, die im "normal 
mode", 1:1 und 0 deg Phasenverschiebung arbeitet und mir saubere 20 MHz 
liefern soll, womit ich die Synchronizer betreibe und auch meine Logik, 
die die Daten verarbeitet. Das Problem ist, dass die PLL anscheinend 
nicht mit dem instabilen 20 MHz Takt am Eingang klarkommt und mir 
ebenfalls unerwünschte Pegelwechsel liefert.

Ich hab noch nicht viel Erfahrung mit FPGAs und PLLs, hat jemand einen 
Tipp für mich? Die PLL hab ich mit dem MegaWizard im Quartus angelegt. 
Die Dokumentation zu den PLLs finde ich aber relativ irreführend. So ist 
z.B. gleich am Anfang des Wizards ein Speed-Grade auszuwählen (6 bis 9 
oder so), in der Doku steht aber nirgends beschrieben welche Zahl wofür 
steht.

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


Lesenswert?

Christopher G. schrieb:
> Die Daten möchte ich jetzt an der fallenden Taktflanke von CLK latchen.
Latchen? Kombinatorisch? Ein Latch ist pegelgesteuert....
Du meinst wahrscheinlich "eintakten" oder "übernehmen"...

> Ich hab noch nicht viel Erfahrung mit FPGAs und PLLs, hat jemand einen
> Tipp für mich?
Ich mit Alteras PLLs auch nicht, aber mit einem glitschigen Takt 
brauchst du z.B. bei Xilinx DCMs gar nicht erst auftauchen.

> Das Problem ist, dass die PLL anscheinend
> nicht mit dem instabilen 20 MHz Takt am Eingang klarkommt und mir
> ebenfalls unerwünschte Pegelwechsel liefert.
Welche Toleranz/Schwankung/Abweichung/Jitter darf denn der Eingangstakt 
für die PLL laut Datenblatt haben?

> Mein Problem ist nun, dass die Daten zwar stabil sind zwischen zwei
> steigenden CLK Flanken, CLK selber jedoch manchmal Glitches enthält.
Richtig:
Dein Problem ist nicht die PLL, dein Problem ist der versaute Takt!

> CLK selber jedoch manchmal Glitches enthält.
Warum?

von Lattice User (Gast)


Lesenswert?

Ist dein CMOS Sensor auf dem Board oder extern angeschlossen?

Wenn letzteres tippe ich auf versaute Signale. Die Aussage es sind ja 
nur 20 MHz gilt nicht, der FPGA kann ohne weiteres viel mehr als 100 MHz 
und wird deshalb auf unsaubere Clockflanken reagieren. Übersprechen von 
den Datenleitungen auf die Clockleitung ist auch ein Problem und 
mögliche Ursache für Glitches.

von Sigi (Gast)


Lesenswert?

Falls Clk einigermassen sauber ist und Glitches
nur im "Edge-Bereich" auftreten:
Nimm deine 50MHz-Clk, DDR-FFs als Input-FFs und
sample dein CMOS-Clk 10x. Suche H/L-Plateaus indem
du nachfolgende Samples zusammenfasst: Plateau
dann, wenn 2-3x H bzw L erkannt wird. So bekommst
du abwechselnd H/L/H/L (sind 2-3 zu wenig: nimm PLL
zur gen. von 100MHz etc.). Sind deine Daten zwischen
RisingEdge stabil => nimm Daten nach H/L-Übergang
(erkannte Falling Edge). Die Daten sind damit
einsynchronisiert. Bleibt noch die Daten gleichmäs.
auf in der 50MHz-Domain zu verteilen (kann man
z.B. mit Zähler versuchen hinzubekommen).

Gruss

von Christopher G. (cbg)


Lesenswert?

Danke für die Antworten. Ich habe gerade festgestellt, dass die CLK Slew 
Rate des Sensors (ja, extern über (nicht austauschbares) Kabel) im 
Gegensatz zur Daten Slew Rate auf den höchsten Wert eingestellt ist. Ich 
werd mal zuerst versuchen, die CLK Slew Rate zu reduzieren.

Ansonsten meint ihr, so wie ich es verstanden habe, dass ich selber 
überabtasten und manuell eine Art Tiefpass implementieren soll, richtig?

von Lattice User (Gast)


Lesenswert?

Christopher G. schrieb:
> Ansonsten meint ihr, so wie ich es verstanden habe, dass ich selber
> überabtasten und manuell eine Art Tiefpass implementieren soll, richtig?

50 MHz ist dafür etwas wenig, aber du kannst ja die Onboardclock 
verwenden um mit einer PLL eine höhere Frequenz zu erzeugen.

Was auch of hilft sind Serienwiderstände (33-100 Ohm) an der Quelle.

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


Lesenswert?

Christopher G. schrieb:
> Ansonsten meint ihr, so wie ich es verstanden habe, dass ich selber
> überabtasten und manuell eine Art Tiefpass implementieren soll, richtig?
Du sollst zuerst den Grund für den Fehler finden (falscher oder kein 
Abschluss, nicht angepasste Einkopplung, ...). Und wenn du dort den 
Fehler gefunden hast und den Fehlermechanismus kennst, dann kannst du 
eine Lösung suchen. Erst dann kannst du sagen, ob die brauchbarste oder 
einfachste Lösung ein zusätzlicher Widerstand, ein umprogrammiertes 
Register oder ein dazugebastelter Eintaktmechanismus ist...

Christopher G. schrieb:
> der CLK selber jedoch manchmal Glitches enthält.
Wie sehen diese Glitches analog aus? Sind das Überschwinger? Wo sind 
diese Glitches im Taktsignal (zeitlich)?

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.