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
Was sind "kleine Offsets"? Wenn die Offsets wirklich klein im Vergleich zur Periodenlänge des Signals sind, dann kannste einfach eine Abtastphase nehmen, die für alle Signale passt. Gruß Marius
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ß
Du nimmst dann einfach den Takt einer Quelle und schiebst mit einer PLL/DCM den Abtastzeitpunkt da hin, wo alle Werte stabil anliegen. Gruß Marius
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?
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
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
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.
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.
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.
Wie sieht das denn mit zwei Synchronisations-Flipflops aus?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.