Signale mit unterschiedlichen clks einsynchronisieren

Gast #3036459
Lesenswert?

Hallo,

ich habe ein FPGA an den insgesamt 8 Quellen die jeweils über 3 
Datenleitungen Signale schicken. Leider haben die Datenquellen alle eine 
eigene clock. Sie laufen zwar alle mit der selben Frequenz, haben aber 
natürlich kleine Offsets zueinander.

Was wäre hier die beste Methode um die Daten auf den Master clock auf 
dem Board einzusynchronisieren?
Ich würde gerne auf Fifos verzichten.

Vielen Dank
Gast #3036477
Lesenswert?

Hallo,

ich weiss noch nicht genau wie klein aber auf alle Fälle klein im 
Vergleich zur Periodenlänge.

Wie genau meinst du das mit der Abtastphase die für alle passt? Und wie 
würde ich mir diese erzeugen?

Gruß
Gast #3036575
Lesenswert?

Die Frage ist, haben die Quellen (und das FPGA!) wirklich alle den 
selben Takt? Also eine gemeinsame Taktquelle? Oder haben die alle eine 
eigene Taktquelle, die mehr oder weniger die gleiche Frequenz haben? 
Wenn zweiteres, würde das bedeuten, dass die Phasenverschiebung zwischen 
den Takten nicht konstant ist.

Wie sind denn die Datenraten? Wie hoch ist die Taktfrequenz der 
Datenquellen? Hat das FPGA die selbe Frequenz? Wenn nein, welche dann?
#3036898
Lesenswert?

Ok, das sollte der TO vielleicht klären, ob die wirklich alle aus einer 
Taktquelle kommen. Wenn nicht, dann hat er aber immer noch die 
Möglichkeit eine automatische Adaption der Phasenlage zu machen. Xilinx 
hat dazu sogar mal eine Application Note verfasst:

http://www.xilinx.com/support/documentation/application_notes/xapp225.pdf

Ist zwar für den Virtex-II geschrieben. Funktioniert aber sicherlich auf 
neueren FPGAs (evtl mit leichten Anpassungen).

Gruß
Marius
Gast #3036978
Lesenswert?

Hallo,

vielen Dank schon mal für die Antworten.

Alle Quellen haben die gleiche Taktquelle. Allerdings tritt bis die 
Daten am FPGA ankommen eben eine kleine Phasenverschiebung auf.

Ist für diesen Fall die Lösung mit der PLL die beste Lösung oder gibt es 
noch andere Möglichkeiten?

Grüße
Gast #3037029
Lesenswert?

wenn das Datenauge wirklich klein wäre, könntest du mit IODElays die 
einzelnen Signale individuell so verschieben, dass sie die optimale Lage 
relativ zur Clock haben. Aber wenn das Datenauge groß genug ist, ist die 
Verschiebung der Clock die einfachere Lösung.
Gast #3037112
Lesenswert?

Dann solltest du als nächstes die maximale und minimale 
Phasenverschiebung aller deinen Eingangssignale berechnen. Wenn du die 
Werte hast, kannst du über mögliche Strategien nachdenken. Wie: Einen 
Abtastzeitpunkt, der für alle Signal passt, oder dynamische 
Phasenanpassung, oder IO-Delays oder was auch immer. Dazu muss man aber 
die Voraussetzungen kennen die groß die Phasenverschiebung zum FPGA Takt 
und der einzelnen Signale untereinander ist.
Gast #3037505
Lesenswert?

Vor allem muss man auch wissen, ob der FPGA den gleichen Takt wie die 
Quellen hat. Oder ist der deutlich flotter? Wie sieht dein Telegramm 
aus? Sind Synchronisationsstellen möglich. Also z.B. eine Startkennung?
Wenn ja, dann kannst du ja von der Startkennung weg eine bestimmte Zeit 
über eine counter warten und dann abtasten.
#3037679
Lesenswert?

Wozu Synchronisations-Flipflops für synchrone Signale? Das ist doch 
total überflüssig. Man muss halt nur die Phase der Abtastung passend 
wählen. Außerdem kann es dir passieren, dass du IMMER während des 
Flankenwechsels abtastest. Dann kannste auch ne Münze werfen... Ist 
genauso effektiv.

Gruß
Marius

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren