Hallo Leute, in meinem Altera FPGA (MAX10) brauche ich eine clock von 64MHz. Diese soll per PLL an eine externe clock von nur 1MHz gekoppelt werden. Der PLL Wizard von Altera sagt mir nun, dass die externe Clock Frequenz zu klein ist und somit die PLL nicht erzeugt werden kann (DCO or PFD frequency range exceeded). Es ab 5MHz input clock ist er zufrieden. Welche Möglichkeiten gibt es mein Problem dennoch zu lösen? Kann ich die PLL irgendwie manuell programmieren so dass die Frequenzen wieder passen? Was wäre allgemnein die übliche Vorgehensweise bei diesem Problem?
Ich bin kürzlich auf ein ähnliches Problem gestoßen. Tatsächlich denke ich nicht das da etwas mit 'manuell programieren' zu machen ist. Das sind Einschränkungen, die sich aus dem Design der PLLs ergeben. Meine Lösung hies dann CDCE913, ein kleiner, nicht-flüchtiger PLL Chip, der in meinem Fall die Referenzfrequenz erstmal verfünffacht. In deinem Fall wird dieser spezielle nicht gehen, weil die Mindestfrequenz 8 MHz sind. Vielleicht findest du aber etwas ähnliches.
Bei der Erkenntnis bin ich auch gerade - der Clock and PLL guide definiert 5Mhz als minimale Frequenz bei der der Phasenkomperator noch arbeitet. Gerade schaue ich daher, ob ich mit ausreichender Genauigkeit mit dem (frei laufenden) internen Oszillator die 1MHz clock absamplen, vermessen, vervielfachen und dann wieder in eine PLL einspeisen kann. Das gibt sicher später Spaß beim timing closure... Hat wer ne bessere Idee?
:
Bearbeitet durch User
Ist das ganze nur als Bastelei und nicht als Endprodukt? Habe schon öfters mal einfach eine zu niedrige Clock in die PLL eingespeist (Xilinx) und bisher nie Probleme gehabt... Einfach per Constraint vortäuschen, dass sie schnell genug ist, bei Abweichung im Bereicht Faktor 2-3 ging das mal bisher immer gut. Klar, sauber ist es nicht.... (Bei mir Pixelclock bei sehr niedrigen Auflösungen, also Fehler sieht man ganz gut, und da ist nix...)
jemand schrieb: > Ist das ganze nur als Bastelei und nicht als Endprodukt? Habe schon > öfters mal einfach eine zu niedrige Clock in die PLL eingespeist > (Xilinx) und bisher nie Probleme gehabt... Das gilt für (ältere) Altera-FPGAs nicht. Ändert man bei den vom Megawizzard generierten VHDL-Files die Input-Clock-Frequenz, dann bekommt man eine deutlich abweichende Ausgangs-Clock-Frequenz (Mult/Div-Konstanten natürlich richtig berechnet).
Sigi schrieb: > jemand schrieb: >> Ist das ganze nur als Bastelei und nicht als Endprodukt? Habe schon >> öfters mal einfach eine zu niedrige Clock in die PLL eingespeist >> (Xilinx) und bisher nie Probleme gehabt... > Das gilt für (ältere) Altera-FPGAs nicht. Ändert man bei den vom > Megawizzard generierten VHDL-Files die Input-Clock-Frequenz, dann > bekommt man eine deutlich abweichende Ausgangs-Clock-Frequenz > (Mult/Div-Konstanten natürlich richtig berechnet). Man muss dabei natürlich im Frequenzbereich des VCO bleiben. Für vorgetäuschte 5 MHz generieren, und dann mit 1 MHz betreiben wird nicht gehen, da dabei garantiert die untere Grenzfrequenz des VCO unterschritten wird. Die minimale Frequenz für den PFD habe ich bei Lattice ECP3 (sind auch 5 MHz) auch schon deutlich unterschritten. Ich habe dazu aber die PLL Primitive von Hand instanziert, dabei klopft einem kein Zauberer auf die Finger. Die untere Grenze der PFD Frequenz wird durch den onchip Loopfilter vorgegeben, d.h. wenn man eine kleinere Frequenz als spezifiziert verwendet, geht das auf Kosten der Stabilität und Jitter. Ich wollte mir dass zwar schon immer mal auf einem Speci anschauen, habe es aber noch nicht gemacht.
Da gibt es 2 Möglichkeiten: 1) Man kann auf die DLL verzichten und arbeitet nur mit der DCM unter Berücksichtigung des skew, die aber bei modernen FPGAs in Relation zu eben der geringen Frequenz akzeptabel ist. Der Fall der 5MHz kommt mir da bekannt vor (Xilinx S3). 2) Man baut sich die PLL digital und erzeugt einen analogen Loop mit gfs einem Filter. Dazu muss ein Ausgang mit einem Delay so geregelt werden, dass sich die Phase eines runtergeteilten Signals auf die Quellphase einstellt. Das erzeugt erstmal kräftig jitter, führt aber bei der zwangsläufigen Deizimation, die nötigt ist, um auf die geringe Zielfrequenz zu kommen, zu einem recht glatten Verhalten. Mit modernen FPGAs kann man den Ausgang ja per Delays im Bereich von 50ps mehr oder weniger kontrolliert, oder mit Gattern gegated unkontrolliert auf 10ps schieben. Ein Beispiel für einen Frequenztuner findet sich hier: http://www.96khz.org/htm/frequencyconverter.htm Das Konzept mit dem Schieber ist dies hier: http://www.96khz.org/oldpages/frequencyshifter2.htm Das gilt aber nur, für Umbauten und Ausbauten. Wenn Du aber noch im Design bist und noch an dem PCB bauen kannst, ist ein billiger PLL-Baustein heutzutage die bessere Wahl.
danke an alle fuer die guten Tipps... ich kaempfe leider mit Platzproblemen. Und zwar auf dem FPGA und auf dem Board. Jedes bisschen externe Beschaltung macht mir Sorgen und umfangreiche Implementierungen im FPGA ebenfalls. Daher waere die 'PLL underclocking' Variante wohl die angenehmste. Fuer den Augenblick waere es (wenn es funktioniert) eine Zwischenloesung. Allerdings auf lange Sicht nicht, da das Design irgend wann mal in Stueckzahlen geht und da will man sowas ja eher nicht. Also mal schauen, welche Variante es dann mal spaeter wird.
Traust Du Dir zu, einen händischen Clock Multiplier zu bauen? Die Verzögerungen in einem PLD sind ja recht deterministisch. Brauchst ja nur 8MHz, wenn ich es richtig sehe. (8>5 und 8x8=64). Ansonsten frei laufender Takt durch explizite Rückkopplung und Regelung der Phase wie oben. Braucht einen 3 Pins nach draussen, den Treiber, die dynamische Last und der feedback-Eingang. Da kommen in einem PLD intern gerne 100MHz zusammen. Damit könntest Du 1MHz sogar voll digital aufsynchen.
Naja, ehe ich SOLCHE Stunts machen würde, würde ich lieber ein digitale PLL aufsetzen. Man muss nur einen möglichst hochfrequenten Mastertakt irgendwo herzaubern (100-200MHz), damit generiert man dann den vervielfachten Takt aus den 1MHz. Das Problem ist dann allerdings, ob die echte PLL im FPGA den schon deutlichen Jitter dieses Taktes frißt. Die DLLs von früher waren dagegen allergisch. Alles in allem dennoch nur ein Workaround. Besser wäre es natürlich, das Übel an der Wurzel zu packen und möglichst direkt auf einen höherfrequenten Takt direkt zu synchronisieren.
Falk Brunner schrieb: > Alles in allem dennoch nur ein Workaround. Besser wäre es natürlich, das > Übel an der Wurzel zu packen und möglichst direkt auf einen > höherfrequenten Takt direkt zu synchronisieren. oder: die 1MHz-Quelle durch einen z.B. 50MHz-Quarz ersetzen und per FPGA einfach 1MHz ausgeben.
Falk Brunner schrieb: > Naja, ehe ich SOLCHE Stunts machen würde, würde ich lieber ein digitale > PLL aufsetzen. Man muss nur einen möglichst hochfrequenten Mastertakt > irgendwo herzaubern (100-200MHz) Genauso macht es ja mein Design, bis auf den Umstand, dass die die "hochgezauberte" Frequenz nicht alleine lasse, sondern durch einen festen Wert teile, dass es wieder 1 MHz gibt und mit den a) entweder gesteuerten Delays oder b) dem belasteten über einen externen Pin arbeitenden self osc in der Phase auf den Eingangstakt synche. Damit jittert das Signal deutlich weniger, als die beiden 2 Takte der 100 MHz. Man muss die Regelung eben nur genügend teiffrequent einstellen und filtern. Z.b. 1024 der 1MHz Takte aufintegrieren und daran die Regelung festmachen.
:
Bearbeitet durch User
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.