Forum: FPGA, VHDL & Co. Taktrückgewinnung


von Fabian S. (jacky2k)


Lesenswert?

Hallo,

ich habe vor eine kleine Übertragungsstrecke aufzubauen und hänge ein 
wenig an der Taktrückgewinnung aus dem digitalen Signal.
Zusammengefasst: Ich habe das Signal empfangen, AC-gekoppelt, verstärkt 
und in Komperatoren gejagt, die mir dann digitale Signale auswerfen. Das 
ganze sollte irgendwie drei-Stufig (z.B. mit AMI-Code) codiert werden, 
sprich ich habe sicher alle paar Takte nen Wechsel, aber eben nicht 
immer. Bedeutet: ich brauche eine Taktrückgewinnung. Mir ist klar, dass 
da tendenziell ne PLL für zu verwenden ist, aber wie baut man diese am 
besten auf?
Das ganze soll irgendwie durch einen CPLD/FPGA gehen, aber soweit ich 
das bislang verstanden habe kann ich die internen Hardware-PLLs eines 
FPGAs dafür nicht verwenden, da der Eingangstakt zu unregelmäßig und zu 
verjittert ist.
Eine weitere mir bekannte Alternative ist es das halb analog mit einem 
DAC und einem VCO zu bauen. VCOs mit ausreichend hoher Taktrate sind 
jedoch relativ teuer (das System soll 10MBits schaffen) und dann muss 
ich das ja auch noch mit der Phasenverschiebung für den richtigen 
Abtastzeitpunkt hinbiegen. Also ein recht hoher Hardwareaufwand.
Gibts da noch andere Möglichkeiten? Bin für konstruktive Ideen offen.

von H. G. (Gast)


Lesenswert?

Mit einem sehr schnellen FPGA in Software lösen. Eine PLL lässt sich 
manuell leicht programmieren. Welche Ausgangsgenauigkeit brauchst Du?

Wenn die Verarb im FPGA gemacht werden soll, ist das ab dann einfach 
möglich.

Wenn der Takt nochmal draussen gebraucht wird, wird es komplex.

von abc (Gast)


Lesenswert?

Falls ich nicht was übersehe sollte das viel elichter sein als mit pll 
etc.

10 Mbit -> 10 Mhz als grober Takt ist bekannt.

-> Im FPGA z.b. mit 100 MHz abtasten.

-> immer in der "Bitmitte" (in dem Fall nach fünf 100 MHz Takten) 
sampeln

-> bei jeder Flanke im reinkommenden Datenstrom den Bitcounter counter 
resetten sodass man wieder in der bitmitte sampeln kann.


solange die Trifft deiner beiden Takte im Verhältnis zu der Zeit ohne 
Flankenwechsel ist sollte das schon ausreichen.


Hab was vergleichbares schonmal mit 50Mhz sampling und 3-4 Mhz 
Datensignal gemacht, hat zuverlässig funktioniert.

von Fabian S. (jacky2k)


Lesenswert?

G. H. schrieb:
> Mit einem sehr schnellen FPGA in Software lösen. Eine PLL lässt sich
> manuell leicht programmieren. Welche Ausgangsgenauigkeit brauchst Du?
>
> Wenn die Verarb im FPGA gemacht werden soll, ist das ab dann einfach
> möglich.
>
> Wenn der Takt nochmal draussen gebraucht wird, wird es komplex.

Das hatte ich mir auch mal überlegt, aber die PLL ist dann doch nur so 
genau wie der schnelle Takt, den der FPGA zur Verfügung hat, also z.B. 
100MHz. Also ich meine der Teiler der PLL kann doch dann nur ganzzahlig 
sein oder? Sehe ich da noch was falsch?

@abc:
Das nimmt sich ja jetzt nicht sooo viel von der Idee des Freiburgers. 
Aber das klingt auf jeden Fall einfach und würde wohl auch noch in einen 
kleinen CPLD passen :)

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


Lesenswert?

Fabian S. schrieb:
> da der Eingangstakt zu unregelmäßig und zu verjittert ist.
Was heißt das in Zahlen?
Klar ist, dass du immer wieder mal z.B. für bis zu 3 Bits keine 
Taktflanke hast, aber woher kommt der Jitter?

von Fabian S. (jacky2k)


Lesenswert?

Naja ich hab ne Übertragungsstrecke, da ist Rauschen drauf und das wird 
mit verstärkt und kommt auf die Komperatoren, die dann mal etwas früher 
und etwas später (jenachdem wie das Rauschen ist) einen Pegel-Wechsel 
durchführen. Also habe ich Jitter. Wie groß der genau ist kann ich 
leider nicht sagen, da ich das System noch nicht aufgebaut habe.

von Thomas R. (Firma: abaxor engineering) (abaxor)


Lesenswert?

Hallo,

das Zauberwort ist CDR (Clock and Data Recovery). Such mal nach "CDR 
FPGA"! Da gibt es jede Menge Treffer.


Tom

von Fabian S. (jacky2k)


Lesenswert?

Na das ist doch mal was handfestes. Da gibts sogar ein paar AN von 
Xilinx (XAPP250). Frage dir bei mir noch bleibt (habe die AN noch nicht 
gelesen) ist, ob das auch auf einem kleinen CPLD funktioniert. Hatte da 
so z.B. den XC2C64A im Auge.

von abc (Gast)


Lesenswert?

Du brauchst doch den Takt garnicht außer zur Datengewinnung, demnach 
wäre eher Xapp224 hier angebracht, oder?

Aber das geht im (klassischen) CPLD nicht, weil es eine pll 
vorraussetzt.

Zudem ist das völlig mit Kanonen auf Spatzen geschossen bei 10 Mbit.

Bei einer Uart käme auch niemand auf die Idee da den Takt zurückgewinnen 
zu wollen.


Fabian S. schrieb:
> Das nimmt sich ja jetzt nicht sooo viel von der Idee des Freiburgers.
> Aber das klingt auf jeden Fall einfach und würde wohl auch noch in einen
> kleinen CPLD passen

von Software hatte ich im Post oben nie gesprochen, von Pll 
genausowenig, keine Ahnung wie es die gleiche Idee sein kann.

Und in ein CPLD passt das oben genannte problemlos. Würde auf unter 10 
Makrozellen schätzen.

von L. B. (hochpass)


Lesenswert?

Lothar Miller schrieb:
> Fabian S. schrieb:
>> da der Eingangstakt zu unregelmäßig und zu verjittert ist.
> Was heißt das in Zahlen?
> Klar ist, dass du immer wieder mal z.B. für bis zu 3 Bits keine
> Taktflanke hast, aber woher kommt der Jitter?

Jitter kommt von Rauschen auf dem Taktsignal und daher dass die 
Taktflanken nicht unendlich steil sind, die Eingangsstufen und 
Schmitt-Trigger schalten dann mit Jitter.

PLL geht nicht, da der Takt unregelmäßig ist. DCMs und PLLs brauchen 
viele Takte um aufzusynchronisieren und zu locken. Fehlt der Takt 
rasteten die Dinger aus und es geht in die Hose

Tackrückgewinnung fällt mir nur im Zusammenhang mit Serdes ein. Ist aber 
vermutlich übertrieben hier mit Gigabit Links anzufangen.

Ich würde wie abc vorgeschlagen hat überabtasten und wie bei ner UART 
auf Start Bits aufsynchronisieren.

Ich mache das gerade sehr erfolgreich mit 3-facher Überabtastung mit 100 
MBit
über 40 cm. Aber Quelle und Senke mit dem gleichen Takt gespeist, bei 
unterschiedlichen Takten ist höhere Überabtastung gefragt. Man kann 
ausrechenen wann man mit Start Bits neu aufsynchronisieren muss.

von Thomas R. (Firma: abaxor engineering) (abaxor)


Lesenswert?

abc schrieb:
> Bei einer Uart käme auch niemand auf die Idee da den Takt zurückgewinnen
> zu wollen.

Bei einer asynchronen Übertragung wie einer UART (das A steht für 
asynchron) gab es aber mal die Faustregel der 16fachen Überabtastung. 
Durch Einsynchronisieren kommt man 8fach vielleicht 4fach aus.

Viele Grüße


Tom

von Andi (chefdesigner)


Lesenswert?

Thomas Reinemann schrieb:
> gab es aber mal die Faustregel der 16fachen Überabtastung.
>
> Durch Einsynchronisieren kommt man 8fach vielleicht 4fach aus.

Benötigt werden 2x, oder? - Einsynchronisieren kostet aber keine 
Frequenzreserve.
?

von Christian R. (supachris)


Lesenswert?

Ich hab zum Beispiel in einer Anwendung 8Mbit/s Nutzdaten Manchester 
codiert, also dann 16 Mbit/s mit 64Mhz abgetastet laufen. Als Sync für 
ein Bit alle 32 Bit die Manchester Codierung verletzt. Das geht 
zuverlässig über zig m Glasfaser.

von Bastian (Gast)


Lesenswert?

Warum brauchst Du einen Synch?
Kann man das nicht den Worten entnehmen?

von Christian R. (supachris)


Lesenswert?

Da aufgrund verschiedener Faktoren eine 8B10B oder sonstige Kodierung 
nicht möglich ist und ich ja mal den Anfang finden muss. Außerdem laufen 
Sender und Empfänger völlig asynchron.

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.