mikrocontroller.net

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


Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jan M. (mueschel)
Datum:

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

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Schrotty (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht 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".

Autor: Schrotty (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias G. (mgottke)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.