Forum: FPGA, VHDL & Co. CPLD-Einstieg: Frequenzteiler für PLL realisierbar?


von Michael B. (mibo)


Angehängte Dateien:

Lesenswert?

Hallo CPLD-Experten,

ich will eine PLL aufbauen (Skizze unten) und brauche dafür einige 
Frequenzteiler. Einen Teiler von 78125 kann ich natürlich per 74HC390 
aufbauen (78125 = 25*25*25*5). Leider brauche ich dann davon 3,5 Stück 
:-(

Um Platz auf der Platine zu sparen, und einen CPLD/FPGA-Einstieg zu 
finden, würde ich die benötigten Teiler gerne per CPLD realisieren.
Leider verstehe ich bisher nicht so viel von CPLDs, so dass ich nicht 
mal aus dem Datenblatt entnehmen kann, ob der CPLD das kann, was ich mir 
vorstelle...

Frequenzteiler sind ja normalerweise kaskadierte Flip-Flops. Da ich 
viele Teiler:5 benötige, muss ich also jeweils 3 Bits bzw. 3 Flip-Flops 
benutzen. Ich habe gelesen, dass CPLDs meist nur ein Flip-Flop pro 
Makrozelle haben. Mein 78125er Teiler braucht 7 x Teiler:5 -> 7x3=21 
Flip-Flops  - sehe ich das richtig?

Relativ einfach in meine Schaltung zu integrieren, wäre z.B. solch ein 
CPLD-Modul 
http://www.digilentinc.com/Products/Detail.cfm?NavPath=2,400,798&Prod=CMOD
Dieser CPLD hätte 64 Makrozellen.

Außerdem habe ich bei den Xilinx-CPLDs gesehen, dass sie mehrere 
Clock-Eingänge besitzen. Bedeutet das, dass ich sowohl den Teiler 
(78125) für das 10MHz Signal, als auch die Teiler für das 8,192MHz 
Signal in einem einzigen CPLD realisieren kann? Dann wäre ein CPLD 
natürlich eine große Vereinfachung für meine Schaltung.

Danke für Eure Kommentare,
Michael

von Lötix (Gast)


Lesenswert?

Michael Born schrieb:
> Mein 78125er Teiler braucht 7 x Teiler:5 -> 7x3=21
> Flip-Flops  - sehe ich das richtig?
Ja.
Lade dir doch mal Xilinx ISE runter und gib das, was du willst, in Form 
eines Schaltplanes ein. So habe ich auch mal angefangen. Später dann 
VHDL.
Bei Xilinx wird die Anzahl der integrierten Flip-Flops XC95nn angegeben. 
So würde für dein Beispiel ein XC9536 (36 Makrozellen) ausreichen.

von Michael B. (mibo)


Lesenswert?

Danke Lötix für die Empfehlung. Ich lade nun die fette Software von 
Xilinx runter. Mal sehen, ob ich mich darin zurecht finde...

Vielleicht kann mir noch jemand sagen, wie das mit den verschiedenen 
Clock-Eingängen ist. Kann ich da zwei unterschiedliche Frequenzen 
anschließen und die im CPLD teilen lassen?

Gruß,
Michael

von Michael B. (mibo)


Lesenswert?

Zitat aus dem Xilinx XC9500XL Datenblatt:
"- Local clock inversion with three global and one product-term clocks"

...und ich habe nicht die leiseste Ahnung, was das bedeutet :-(

von Schlumpf (Gast)


Lesenswert?

Michael Born schrieb:
> Mein 78125er Teiler braucht 7 x Teiler:5 -> 7x3=21
> Flip-Flops  - sehe ich das richtig?

Ich nehme mal an, dass die Ausgangstakte nach den Teilern einen 
Duty-Cycle von 50% haben sollen. Also die High-Zeit ist genauso lange, 
wie die Low-Zeit.

Mal anhand des Beispieles des 10MHz/128Hz Teilers:

f=128Hz.. Das beutet, dass die Periodendauer 1/128 s ist. Also 
0,0078125s. Davon ist das Signal die Hälfte dieser Zeit H und die andere 
Hälfte L.
Also 0,00390625 s H und 0,00390625 s L.

Der Eingangstakt hat 10 MHz. Also eine Periodendauer von 100ns.
Damit kannst du einen Zähler betreiben, der alle 100ns um "1" 
weiterzählt.

Dein Zähler muss also bis 39062,5 zählen, dann das Ausgangssignal 
invertieren und wieder von vorne anfangen. Dann hättest du ein 128Hz 
Signal, mit exaktem 50/50-Verhältnis von High zu Low. Wie du jetzt aber 
selbst siehst, klappt das nicht, da du dazu eine Auflösung von 50ns 
brauchst, was leider mit einem 10Mhz Takt nicht vernünftig geht.
Daher wirst du entweder kein exaktes 50/50 Verhältnis einstellen können, 
oder du wirst mit einem Ausgangstakt "leben" müssen, der etwas schneller 
oder langsamer als 128Hz ist.


Nehmen wir an, dass du mit einem Takt von 127,998 Hz leben 
(Perdiodendauer = 39063 10Mhz-Impulse), dann wäre der Zähler für deinen 
Frequenzteiler 16 Bit groß. (mit 15 Bit kannst du nur bis ca. 32768 
zählen). Und für jedes Bit benötigst du 1 Register. Also 16 Register + 1 
Ausgangsregister, welches du immer invertierst, wenn der Zähler die 
39063 erreicht hat.

Das war jetzt ziemlich ausführlich, aber ich hoffe, dir hat es zum 
Verständnis geholfen, wie sowas prinzipiell funkioniert.

Kleine Anmerkung: Das, was ich grad beschrieben habe, ist nicht 
unbedingt die Vorgehensweise, wenn man den Takt innerhalb des CPLDs 
weiterverwenden will, da man in diesem Fall dann nur kurze 
Enable-Impulse erzeugen würde, statt eines echten "50/50-Taktes". Aber 
das nur zur Ergänzung, um einem "Aufschrei" im Forum vorzubeugen ;-)

von Christian R. (supachris)


Lesenswert?

Naja, kommt auch noch drauf an, wie groß der Jitter des geteilten Taktes 
sein darf. Der ist nämlich bei allen internen Teiler-Methoden nicht zu 
vernachlässigen. Einen ADC kann man mit so einem Taktsignal nicht 
sinnvoll speisen.

von Schlumpf (Gast)


Lesenswert?

Christian R. schrieb:
> Naja, kommt auch noch drauf an, wie groß der Jitter des geteilten Taktes
> sein darf.

Der Jitter von wo nach wo?

von Michael B. (mibo)


Lesenswert?

Danke für die Erklärungen.

Jitter ist für mich DER wichtige Punkt. Sonst würde ich die 65536 Hz 
nicht Phasen-stabil an den 10 MHz Takt binden wollen. Und ja, die 65536 
Hz sind zum Takten eines ADCs :-)

Nur für das 1 PPS Signal will ich keinen 50% duty-cycle.

Wegen der 100ns (wo 50ns gebraucht werden): Ich meine, in einem 
Datenblatt (vermutlich CoolRunnerII) davon gelesen zu haben, dass der 
Chip eine Frequenz verdoppeln kann - das würde dann reichen, oder?
Andere Möglichkeit: Gibt es keine Zähler für steigende und fallende 
Flanke? Damit sollte man auch einen Wert um 2 pro 10 MHz Takt erhöhen 
können.

von Schlumpf (Gast)


Lesenswert?

Michael Born schrieb:
> ...dass der
> Chip eine Frequenz verdoppeln kann - das würde dann reichen, oder?

Wenn der das kann, dann würde das reichen, denn dann bekommst du 50ns 
Auflösung

Michael Born schrieb:
> Gibt es keine Zähler für steigende und fallende
> Flanke?

Jein.. fertig gibt es sowas nicht, aber man kann sowas theoretisch 
basteln, wobei man dann schon sehr genau wissen muss, was man tut, damit 
es nicht zu Setup-Zeit-Verletzungen kommt oder man wilde Glitches im 
Design hat. Also von dieser Idee würde ich dir dringend abraten!

Was verstehst du unter Jitter? Unter einem Jitter in der Phasenlage 
verstehe ich, dass der Phasenversatz zwischen Eingang und Ausgang nicht 
immer gleich ist. Also hin- und her springt.

Würde die Phase zwischen Ein- und Ausgang eine konstante Verschiebung 
aufweisen, dann würde ich vom Skew reden.

von Christian R. (supachris)


Lesenswert?

Die CoolRunner II haben spezielle FlipFlops, die auf beide Flanken 
schalten können, das ist da aber eine sehr spezielle Ausnahme, das gibts 
im Normalfall nicht.
Jitter bekommst du durch das Schaltverhalten des Ausgangs-FF rein, die 
sind nicht drauf ausgelegt, jitterarm einen Takt auszugeben. Schon, wenn 
man am FPGA einen Takt von einem externen Quarz-Oszillator wieder am 
Ausgang mit einem ODDR-FF ausgibt, bekommt man beachtlichen Jitter rein, 
ich meine, da mal einige 100ps gemessen zu habenn.

Welche Auflösung soll der ADC senn haben? Dann kann man z.B. mit dem 
Jitter Calculator auf der Maxim Homepage den maximalen Jitter 
ausrechnen.

von Michael B. (mibo)


Lesenswert?

Christian R. schrieb:
> Die CoolRunner II haben spezielle FlipFlops, die auf beide Flanken
> schalten können, das ist da aber eine sehr spezielle Ausnahme, das gibts
> im Normalfall nicht.
Ah, danke für die Info.

> Jitter bekommst du durch das Schaltverhalten des Ausgangs-FF rein, die
> sind nicht drauf ausgelegt, jitterarm einen Takt auszugeben. Schon, wenn
> man am FPGA einen Takt von einem externen Quarz-Oszillator wieder am
> Ausgang mit einem ODDR-FF ausgibt, bekommt man beachtlichen Jitter rein,
> ich meine, da mal einige 100ps gemessen zu habenn.
Was für einen Jitter erwartet man denn,wenn man die Frequenzteiler mit 
einzelnen ICs realisiert? Im Datenblatt vom 74HC390 finde ich das Wort 
"Jitter" jedenfalls nicht :-( nur "propagation delay" ist erwähnt, was 
mich aber nicht stört - ich will nur die Phase feststehend haben. Der 
absolute Wert ist nicht wichtig.

> Welche Auflösung soll der ADC senn haben? Dann kann man z.B. mit dem
> Jitter Calculator auf der Maxim Homepage den maximalen Jitter
> ausrechnen.
Den Rechner werde ich mir ansehen.
Der 16 Bit ADC ist auf ner Steckkarte im PC und wird mit den 65536 Hz 
getriggert( 
http://www.generalstandards.com/view-products2.php?BD_family=16ai32ssc 
).

Als Anforderung an den Jitter würde ich definieren, dass es mit CPLD 
nicht schlechter ist, als mit diskreter IC Logik.

von Schlumpf (Gast)


Lesenswert?

Michael Born schrieb:
> Was für einen Jitter erwartet man denn,wenn man die Frequenzteiler mit
> einzelnen ICs realisiert? Im Datenblatt vom 74HC390 finde ich das Wort
> "Jitter" jedenfalls nicht :-( nur "propagation delay" ist erwähnt, was
> mich aber nicht stört - ich will nur die Phase feststehend haben. Der
> absolute Wert ist nicht wichtig.

richtig!
Man bekommt einen Skew aber keinen Jitter.
Der Skew ist eben so lange, wie der "propagation delay", ist aber 
konstant. Das heißt, du bekommst eine Phasenverschiebung, welche aber 
konstant ist. Also nicht jittert.

von Christian R. (supachris)


Lesenswert?

Solange es nur Skew ist, ist das ja OK. Aber jedes Bauteil in einer 
Takt-Kette bringt zusätzlichen Jitter ins den Takt, weil die 
Schaltschwellen eben nicht perfekt immer an der gleichen Stelle sind, 
das streut auch mit Temperatur, Betriebsspannung...

Ich hab vorhin mal gemessen, die 200MHz vom Quarzoszillator (laut 
Datenblatt <1ps Phasenjitter) auf dem SP605 über ein ODDR2 auf eine SMA 
Buchse ausgegeben, der Jitter liegt meistens bei +- 30ps, gibt aber auch 
Ausreißer bis hin zu > 100 ps. Sagt jedenfalls der Wave Pro 760.

von Michael B. (mibo)


Lesenswert?

Schlumpf schrieb:
> Michael Born schrieb:
>> Was für einen Jitter erwartet man denn,wenn man die Frequenzteiler mit
>> einzelnen ICs realisiert? Im Datenblatt vom 74HC390 finde ich das Wort
>> "Jitter" jedenfalls nicht :-( nur "propagation delay" ist erwähnt, was
>> mich aber nicht stört - ich will nur die Phase feststehend haben. Der
>> absolute Wert ist nicht wichtig.
>
> richtig!
> Man bekommt einen Skew aber keinen Jitter.
> Der Skew ist eben so lange, wie der "propagation delay", ist aber
> konstant. Das heißt, du bekommst eine Phasenverschiebung, welche aber
> konstant ist. Also nicht jittert.

Du beziehst Dich jetzt auf diskrete Teiler ICs, wie den 74HC390, oder?
Ich vermute mal, dass die auch Jittern, aber anscheinend (weil sie ja 
für PLLs verwendet werden) sehr wenig.
Leider habe ich kein Gefühl, was "sehr wenig Jittern" bedeutet. Die von 
Christian R. erwähnten einige 100ps sind ja eigentlich auch nicht viel, 
wenn ich meine ca. 15µs (65536 Hz Samplingrate) damit vergleiche.

von Schlumpf (Gast)


Lesenswert?

Michael Born schrieb:
> Du beziehst Dich jetzt auf diskrete Teiler ICs, wie den 74HC390, oder?
> Ich vermute mal, dass die auch Jittern, aber anscheinend (weil sie ja
> für PLLs verwendet werden) sehr wenig.
> Leider habe ich kein Gefühl, was "sehr wenig Jittern" bedeutet. Die von
> Christian R. erwähnten einige 100ps sind ja eigentlich auch nicht viel,
> wenn ich meine ca. 15µs (65536 Hz Samplingrate) damit vergleiche.

Ich bezog mich auf gar keinen Baustein, sondern auf deine Aussage, dass 
du eine feststehende Phase willst.
Und dass ein CPLD am Ausgang mehrere 100ps jittert, glaub ich einfach 
nicht. Aber das kannst ja mal nachmessen.

von Michael B. (mibo)


Lesenswert?

Schlumpf schrieb:
> Michael Born schrieb:
>> Du beziehst Dich jetzt auf diskrete Teiler ICs, wie den 74HC390, oder?
>> Ich vermute mal, dass die auch Jittern, aber anscheinend (weil sie ja
>> für PLLs verwendet werden) sehr wenig.
>> Leider habe ich kein Gefühl, was "sehr wenig Jittern" bedeutet. Die von
>> Christian R. erwähnten einige 100ps sind ja eigentlich auch nicht viel,
>> wenn ich meine ca. 15µs (65536 Hz Samplingrate) damit vergleiche.
>
> Ich bezog mich auf gar keinen Baustein, sondern auf deine Aussage, dass
> du eine feststehende Phase willst.
> Und dass ein CPLD am Ausgang mehrere 100ps jittert, glaub ich einfach
> nicht. Aber das kannst ja mal nachmessen.

Ich bin gerade erst in der Planungsphase. Wenn ein CPLD Ausgang stark 
Jittert, werde ich mir gar keinen zulegen, den ich nachmessen könnte. 
Zumal ich mich dafür erst mal in die Benutzung/Programmierung 
einarbeiten müsste, nur um festzustellen, dass der CPLD mein Problem 
nicht lösen kann.
Deshalb frage ich ja hier nach und bin froh, wenn mir so ein Irrweg 
erspart bleibt.

von Schlumpf (Gast)


Lesenswert?

Wie gesagt: Ich sehe keinen Grund, warum ein CPLD-Ausgang so jittern 
sollte, dass es einen Einfluss auf deine Schaltung haben könnte.

von Helmut L. (helmi1)


Lesenswert?

Was noch an deiner PLL jittern koente ist deine sehr tiefe 
Refernzfrequenz von nur 128 Hz. Da kann zwischen 2 Phasenvergleichen 
dein VCO sehr viel jittern bis der wieder zur Ordnung gerufen wird. Das 
wuerde ich als grosseres Problem ansehen. Wenn es geht mach die 
Vergleichfrequenz hoeher. Dann jitter der VCO weniger und du hast ein 
schnelleres einschwingen der PLL.

von Michael B. (mibo)


Lesenswert?

Helmut Lenzen schrieb:
> Was noch an deiner PLL jittern koente ist deine sehr tiefe
> Refernzfrequenz von nur 128 Hz. Da kann zwischen 2 Phasenvergleichen
> dein VCO sehr viel jittern bis der wieder zur Ordnung gerufen wird. Das
> wuerde ich als grosseres Problem ansehen. Wenn es geht mach die
> Vergleichfrequenz hoeher. Dann jitter der VCO weniger und du hast ein
> schnelleres einschwingen der PLL.

Die niedrigen 128 Hz kommen daher, weil ich die 65536 Hz 
Samplingfrequenz vorgegeben habe und langzeitstabile Referenzen 
hauptsächlich als 10 MHz Signal (GPS-Empfänger, Rubidium-Uhr, DCF77) 
daher kommen. Der größte gemeinsame Teiler von den 10 MHz und 65536 Hz 
sind die 128 Hz.

von Schlumpf (Gast)


Lesenswert?

Ich kenn deine Applikation nicht, aber wenn du von deinen 65536 Hz 
geringügig abweichen könntest, dann könntest du einfach die 10MHz teilen 
und wärst fertig...
Aber darüber hast du vermutlich auch schon selber nachgedacht.

von Michael B. (mibo)


Lesenswert?

Schlumpf schrieb:
> Ich kenn deine Applikation nicht, aber wenn du von deinen 65536 Hz
> geringügig abweichen könntest, dann könntest du einfach die 10MHz teilen
> und wärst fertig...
> Aber darüber hast du vermutlich auch schon selber nachgedacht.

Ja, das geht leider nicht. (die Software auf dem PC zählt die ADC Zyklen 
mit und vergleicht die mit NTP Zeit. Bei längerer Datenerfassung laufen 
dann die Zeiten auseinander. Änderungen an der Software sind nicht 
möglich.)

von Schlumpf (Gast)


Lesenswert?

.. das ist dann natürlich blöd..

von Lattice User (Gast)


Lesenswert?

Schau die mal hier um, da gibts es sicher etwas passendes, (Si5324 sieht 
auf den ersten Blick gut aus).

http://www.silabs.com/products/clocksoscillators/pages/default.aspx

von Michael B. (mibo)


Lesenswert?

Christian R. schrieb:
> Welche Auflösung soll der ADC senn haben? Dann kann man z.B. mit dem
> Jitter Calculator auf der Maxim Homepage den maximalen Jitter
> ausrechnen.

Ich habe in den Rechner mal meine Daten eingegeben 
http://www.maximintegrated.com/design/tools/calculators/general-engineering/jitter.cfm

16 Bit ADC und 1000 Hz Signal -> 2,4 ns Jitter sind dann tolerabel.
Wenn ich die Beschreibung des Rechners verstanden habe, wird dort mit 
idealisierten Werten gearbeitet. Mein ADC hat real wohl eher 14 Bit, 
wodurch schon knapp 10 ns Jitter ok sind... damit wären 100 ps Jitter 
vom CPLD tolerabel.

Hmm, darüber muss ich mal schlafen.

Danke für die vielen Anregungen,
Michael

von Christian R. (supachris)


Lesenswert?

Michael Born schrieb:
> Leider habe ich kein Gefühl, was "sehr wenig Jittern" bedeutet. Die von
> Christian R. erwähnten einige 100ps sind ja eigentlich auch nicht viel,
> wenn ich meine ca. 15µs (65536 Hz Samplingrate) damit vergleiche.

Naja, bei 16 Bit sieht das schon wieder anders aus. Kommt halt drauf an, 
ob du die wirklich erreichen willst/kannst bei deinem Aufbau. Wenn man 
den Maxim Jitter Calculator* hernimmt, und 16 Bit sowie maximale 
Frequenz von 32767Hz (fs/2) eingibt, kommt man auf 7.41e-11 s maximalen 
Aperture Jitter. Das müssten 71ps sein, wenn ich mich nicht verrechnet 
hab.

Das geht schon noch und ist evtl. auch mit CPLD/FPGA Ausgang machbar. 
Bei höheren Abtast- und Signalfrequenzen kommt man dann ganz schnell in 
den Femtosekundenbereich, da geht das nicht mehr.

* 
http://www.maximintegrated.com/design/tools/calculators/general-engineering/jitter.cfm

Edit: Achso, nur 1kHz Signalfrequenz. Na dann

von Helmut L. (helmi1)


Lesenswert?

Leute seit ihr eigentlich sicher das euch der Jitter Calculator da nicht 
etwas zu kleinen Jitter ausgibt. Dieser Jitter des Taktsignales gilt 
doch nur wenn der ADC keine S+H Stufe hat. Wenn man jetzt bei einem ADC 
der gerade mal 1kHz abtasten soll einen Takt braucht der im ps Bereich 
bloss jittern darf wie soll das den erst bei ADCs aussehen die im GHz 
bereich arbeiten. Da haette man ja astronomische Anforderungen an den 
Takt.
In de Regel betreibt man einen ADC mit einer S+H bzw. sind die meistens 
mit eingebaut.

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.