Forum: FPGA, VHDL & Co. PLL input clock zu klein


von Andi M. (andi6510) Benutzerseite


Lesenswert?

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?

von Samsam (Gast)


Lesenswert?

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.

von Andi M. (andi6510) Benutzerseite


Lesenswert?

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
von jemand (Gast)


Lesenswert?

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...)

von Sigi (Gast)


Lesenswert?

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).

von Lattice User (Gast)


Lesenswert?

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.

von J. S. (engineer) Benutzerseite


Lesenswert?

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.

von Andi M. (andi6510) Benutzerseite


Lesenswert?

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.

von J. S. (engineer) Benutzerseite


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

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.

von Sigi (Gast)


Lesenswert?

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.

von J. S. (engineer) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.