Forum: FPGA, VHDL & Co. Ext. Daten mit internem Takt einlesen


von Micha (Gast)


Lesenswert?

Hi,
ich möchte ext. Daten in meinen FPGA einlesen. Zur Synchronisation steht 
mir nur ein Startbit (fallende Flanke) zur Verfügung.
Den Takt habe ich mit einem PLL erzeugt, ich weiss jetzt nur nicht wie 
ich die Daten auf den Takt synchronisieren soll.
Vielleicht könnt Ihr mir weiterhelfen.

Grüße
Micha

von Jan M. (mueschel)


Lesenswert?

Welche Art von Daten ist das (parallel, seriell..., sonstige Parameter)? 
Welche Geschwindigkeit?

von Micha (Gast)


Lesenswert?

Ups, sorry.
Es handelt sich um eine serielle Übertragung von Startbit + 26 Datenbits 
ohne Stopbit.
Die Frequenz beträgt 18,5 Mhz.
Ich hoffe das reicht.

Grüße
Micha

von Schrotty (Gast)


Lesenswert?

Wenn du einfach nur Abtasten willst, dann sollte dein Interner Takt 
mindestens doppelt so hoch sein, wie der Takt der Daten..
Den Dateneingang gibst du auf ein Register, das mit dem internen Takt 
getaktet ist. Und am Ausgang hast du dann deinen Datenstrom eingetaktet 
auf deinen Systemtakt. Besser ist es, zwei Register hintereinander zu 
schalten, um Glitches ruszufiltern.

Willst du allerdings deinen internen Takt auf die Phase des externen 
Taktes aufsynchronisieren, dann wird es ziemlich kompliziert und es ist 
fraglich, ob es mit den internen PLLs überhaupt geht.

von Jan M. (mueschel)


Lesenswert?

Das einfachste ist, das Signal mit einer hoeheren Frequenz abzutasten, 
z.B. 6x 18.5MHz. Dann wartest du auf die steigende Flanke des Startbits 
und weisst dann, dass das naechste Bit genau 6 Takte spaeter anfaengt. 
Zur Sicherheit solltest du natuerlich das ganze noch um 3 Takte 
verzoegern, um immer in der Mitte des Signals den Wert einzulesen.

So brauchst du deinen Takt nicht zum Signal zu synchronisieren, so lange 
die Takte nicht allzu unterschiedlich sind. Bei hoeheren Frequenzen 
muesstest du mehr Aufwand treiben, aber 18 MHz sind fuer einen FPGA ja 
fast noch "peanuts".

von Schrotty (Gast)


Lesenswert?

Ergänzung zu Jan:

Wenn du das so machst, dann ist dein eingetaktetes Bit entweder 5 oder 6 
Systemtakte lang. Je nachdem ob du mit deiner Abtastflanke die Grenze 
des Datenbits gerade noch oder eben gerade nicht mehr "mitbekommen" 
hast.
Du kannst einfach nicht davon ausgehen, dass due exakt 18,5 MHz bzw 
exakt 18,5 x 6 MHz hast.
Aber die von Jan dargestellte Methode ist üblich und funktioniert. Nur 
darfst eben nicht zu weit an die "Grenzen" gehen mit deinem Abtastpunkt.

von Jan M. (mueschel)


Lesenswert?

Genau Schrotty.
Mein Beispiel funktioniert also noch, wenn sich das Signal waehrend 
aller 27 Bits nicht um mehr als zwei Abtast-Takte verschiebt, das 
entspricht also einer Abweichung von gut einem Prozent. Da Quarze aber 
in der Regel deutlich genauer sind, stellt das kein Problem da.

von Matthias G. (mgottke)


Lesenswert?

Bei einem Takt der nicht einem Vielfachen entspricht, kann man die Bits 
trotzdem sicher einlesen. Die Taktrate sollte dann aber mindestens der 
2,5-fachen Bautrate entsprechen. Dann machst zu einen Zähler, der mit 
dem Startbit gestartet wird und ließt dann an den entsprechenden 
Zählerständen, die dem einzelnen Bit zeitlich am nähesten in der Mitte 
sind die Bits ein.

Wenn Du genau die Taktfrequenz oder eine Vielfache der Taktfrequenz 
hast, dann kannst Du auch mit der 1,5 fachen Baudrate ein sicheres 
einlesen erreichen. Dann müssen Die Bits allerdings die mit der 
steigenden und fallenden Flanke eingelesen werden.

Ich habe das selbst in einem Projekt schon realisiert. Da ist es mir 
über sehr laneg Testzeiträume nicht gelungen bei 50 MBaud auch nur einen 
einzigen Übertragungsfehler zu erzeugen. Obwohl da ungeschirmte 
Übertragungsleitungen mit mehreren Metern im zum Einsatz kahmen.

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.