Hallo zusammen, Bedingungen (siehe Anhang): Data_A ist synchron zu Clk_A Data_B ist synchron zu Clk_B Die Frequenzen von Clk_A und Clk_B sind identisch und phasenstarr, jedoch um einen unbekannten Wert phasenverschoben. Ziel: Ich möchte im FPGA mit nur einem der beiden Clocks weiterarbeiten. Frage: Ist es möglich Clk_A & Clk_B miteinander zu vergleichen und den Phasenversatz zu ermitteln? Diesen Phasenversatz könnte ich schließlich auf Data_A oder Data_B addieren/subtrahieren um die Phasenverschiebung auszugleichen. Frage: Gibt es eine Möglichkeit zwei Clocks miteinander zu vergleichen und den ermittelten Wert als Delay auf ein Datensignal zu legen? PS: Natürlich kann man auch einsynchronisieren indem man ein Schieberegister verwendet und im Register nach Flankenwechseln sucht. Allerdings muss man das mit einer entsprechend ausreichenden Abtastrate machen. Ich wollte einfach mal fragen ob es da auch andere Optionen gibt, sofern zwei Clks phasenstarr sind und nur eine Phasenverschiebung vorliegt... Ich hoffe meine Frage ist verständlich und ich bedanke mich ganz herzlich Fragender
Fragender schrieb: > PS: Natürlich kann man auch einsynchronisieren indem man ein > Schieberegister verwendet und im Register nach Flankenwechseln sucht. > Allerdings muss man das mit einer entsprechend ausreichenden Abtastrate > machen. Ich wollte einfach mal fragen ob es da auch andere Optionen > gibt, sofern zwei Clks phasenstarr sind und nur eine Phasenverschiebung > vorliegt... Mit ausreichender Abtastrate wirst du so oder so arbeiten müssen. Du taktest die Daten eben mit dem entsprechenden CLK ein, also DATA_A mit CLK_A und DATA_B mit CLK_B und machst dann intern eine Syncronisationsstufe von CLK_B auf CLK_A und evtl noch ein FIFO (also Schieberegister) für DATA_A damit sie latenzmäßig zusammenpassen wenn das wichtig ist. http://www.fpga4fun.com/CrossClockDomain.html Wo ist das Problem?
Fragender schrieb: > Die Frequenzen von Clk_A und Clk_B sind identisch und phasenstarr, > jedoch um einen unbekannten Wert phasenverschoben. Aufgrund der unbekannten Phasenverschiebung kannst Du Setup- und Holdtimeverletzungen nicht ausschließen. Behandele die Takte als asynchron und mach ein FIFO dazwischen. Das muß ja auch nicht groß sein, wenn die Frequenzen wirklich phasenstarr sind. Duke
Unbekannt und Phasenstarr schließt sich doch irgendwie aus? Irgendwann ändert sich die Phase also, wenn sie nicht bekannt ist. Soll das bedeuten nur beim Einschalten? Oder wenn ein Sicherheitssystem ein Flugzeug in den Berg fliegt? Oder ...
Klar kann man die Clocks per Logik miteinander vergleichen und daraus sich etwas bauen. Für den FPGA sind diese Clockspielereien aber nur schwer zu kontrollieren. Wäre der Phasenversatz voraussagbar kann man mit IDELAY Gliedern das korrigieren(ggf. wäre auch ein Regelkreis aus IDELAY und obigen Ansatz möglich). Dein Problem kann man aber auch elegant über den Begriff "Phase Alignment FIFO" lösen. Das ist quasi ein FIFO was mit der selben Frequenz, aber mit unterschiedlicher Phasenlage ausgelesen wird. Ein Überlauf ist dadurch nicht möglich. Im Beispiel arbeitest du einfach mit ClkA. DatenB und ClkB gehen in das FIFO, dass du mit ClkA einfach wieder ausliest. Jetzt hast du DataB und DataA auf ClkA und musst dich nur noch um den Versatz kümmern, der maximal um einen Takt schwanken kann. Also FIFO dann einfach das asynchrone FIFO nehmen.
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.
