Forum: FPGA, VHDL & Co. Aus 250 Mhz input Clock 80 Mhz utput clock herauszabubern?


von GS (chromosoma)


Lesenswert?

Einfache Frage:
Gegeben CPLD (ohne PLL) und Crystal Osilator mit 250 Mhz als input clock

Benötigt wird in CLK_OUT mit zB. 80 MHZ und 50% Duty Cycle

Mit einem  simplen Prescaler  kann ich  nur 1/2, 1/4 , 1/8 etc der 
Eingangsfrequenz erstellen.

Mit einem Counter kann ich fast beliebige Frequenz ausgeben, aber ohne 
50% Duty Cylce Bedienung.
Mein ADC, das mit CPLD (ALTERA MAXII) betriggert wird braucht aber diese 
50% DC.

 Gibt es irgedwelche Tricks,die mir weiterhelfen können?

von troll (Gast)


Lesenswert?

Böser Kommunist schrieb:
> Mit einem Counter kann ich fast beliebige Frequenz ausgeben, aber ohne
> 50% Duty Cylce Bedienung.
160MHz und dahinter ein Flipflop für die 50%?

von Marius W. (mw1987)


Lesenswert?

160 MHz mit Flip-Flop wird nicht gehen. Aus 250 MHz lassen sich keine 
160 MHz erreichen. Also ich sehe ohne PLL keine Möglichkeit, die 80 MHz 
zu bekommen.

Gruß
Marius

von Duke Scarring (Gast)


Angehängte Dateien:

Lesenswert?

Böser Kommunist schrieb:
> Mit einem  simplen Prescaler  kann ich  nur 1/2, 1/4 , 1/8 etc der
> Eingangsfrequenz erstellen.
Man kommt auch auf 1/3 oder 1/5 (siehe Anhang). Aber 250/80 = 3,125. Da 
wirst Du entweder an den 250 MHz oder den 80 MHz drehen müssen.

Duke

von Davis (Gast)


Lesenswert?

Zum Überlegen: Wenn du durch 25 dividieren kannst (sollte gehen), dann 
musst du mit 8 multiplizieren (sollte auch gehen). Es ist nur die Frage, 
ob dein CPLD genügend Resourcen hat.

von Der (Gast)


Lesenswert?

Davis schrieb:
> dann
> musst du mit 8 multiplizieren (sollte auch gehen)

Wie?

von Schlumpf (Gast)


Lesenswert?

Davis schrieb:
> Zum Überlegen: Wenn du durch 25 dividieren kannst (sollte gehen), dann
> musst du mit 8 multiplizieren (sollte auch gehen). Es ist nur die Frage,
> ob dein CPLD genügend Resourcen hat.

.. klar, wenn die Frequenz als integer vorliegt, kann man das locker 
machen :-)

von Davis (Gast)


Lesenswert?

Schlumpf schrieb:
> Davis schrieb:
>> Zum Überlegen: Wenn du durch 25 dividieren kannst (sollte gehen), dann
>> musst du mit 8 multiplizieren (sollte auch gehen). Es ist nur die Frage,
>> ob dein CPLD genügend Resourcen hat.
>
> .. klar, wenn die Frequenz als integer vorliegt, kann man das locker
> machen :-)

Quatschkopf. Duke hat zwei PFDs (s. o.) verlinkt. Durchlesen!


@ Der

Das Orginalsignal einmal direkt an ein EOR-Gatter führen und einmal 
verzögert.

---

Einfacher ist es, die 250 MHz zweimal durch 2,5 zu teilen (ergibt 40 
MHz) und dann zu verdoppeln um 80 MHz zu erhalten (siehe u. a. 
Beitrag "Re: Aus 250 Mhz input Clock 80 Mhz utput clock herauszabubern?").

von Lattice User (Gast)


Lesenswert?

Davis schrieb:

>
> Das Orginalsignal einmal direkt an ein EOR-Gatter führen und einmal
> verzögert.
>
> ---
>
> Einfacher ist es, die 250 MHz zweimal durch 2,5 zu teilen (ergibt 40
> MHz) und dann zu verdoppeln um 80 MHz zu erhalten (siehe u. a.
> Beitrag "Re: Aus 250 Mhz input Clock 80 Mhz utput clock herauszabubern?").

Ich bezweifle dass man auf diese Weise eine Clock bekommt die den 
Ansprüchen des ADC's an Jitter und Stabilität des Dutycycles genügt.

von Schlumpf (Gast)


Lesenswert?

Davis schrieb:
> musst du mit 8 multiplizieren

Davis schrieb:
> Quatschkopf. Duke hat zwei PFDs (s. o.) verlinkt. Durchlesen!

Dann erklär doch mal bitte anhand der verlinkten PDFs, wie du mit 8 
multiplizierst... Ich konnte da jedenfalls keinen Hinweis darauf finden.
PLL gilt nicht!

von Davis (Gast)


Lesenswert?

Lattice User schrieb:
> Davis schrieb:
>
>>
>> Das Orginalsignal einmal direkt an ein EOR-Gatter führen und einmal
>> verzögert.
>>
>> ---
>>
>> Einfacher ist es, die 250 MHz zweimal durch 2,5 zu teilen (ergibt 40
>> MHz) und dann zu verdoppeln um 80 MHz zu erhalten (siehe u. a.
>> Beitrag "Re: Aus 250 Mhz input Clock 80 Mhz utput clock herauszabubern?").
>
> Ich bezweifle dass man auf diese Weise eine Clock bekommt die den
> Ansprüchen des ADC's an Jitter und Stabilität des Dutycycles genügt.

Bei erhöhten Ansprüchen empfiehlt es sich, die Frequenz zu vervierfachen 
und dann per FF durch 2 zu dividieren.

von Davis (Gast)


Lesenswert?

Schlumpf schrieb:
> Davis schrieb:
>> musst du mit 8 multiplizieren
>
> Davis schrieb:
>> Quatschkopf. Duke hat zwei PFDs (s. o.) verlinkt. Durchlesen!
>
> Dann erklär doch mal bitte anhand der verlinkten PDFs, wie du mit 8
> multiplizierst... Ich konnte da jedenfalls keinen Hinweis darauf finden.
> PLL gilt nicht!

@ Schlumpf

Bitte nicht nur die PFDs lesen, sondern auch die anderen Beiträge (siehe 
meine Antwort an Der).

Mitdenken & mitlesen!

von Schlumpf (Gast)


Lesenswert?

@Davis:

Ein EOR (vermutlich meinst du XOR) macht noch lange keine Multiplikation 
mit 8. Da wäre diese Schaltung mehrfach notwendig.
Daher wäre es angebracht, dass du, bevor du den anderen hier so 
wertvolle Hinweise wie 'Denken!'  gibst, einfach mal selber vollständige 
Antworten auf Fragen gibst und dich nicht darauf beschränkst, nur mit 
Teilinformationen rumzufaseln...

Was die technische Realisierbarkeit in einem CPLD angeht, schließe ich 
mich der Meinung von Lattice User an. Aber vermutlich liegt es wieder 
daran, dass ich schneller Schreiben, als denken kann, wenn ich 
befürchte, dass dir so ein DC von 50% nicht gelingt.

von Davis (Gast)


Lesenswert?

Schlumpf schrieb:
> @Davis:
>
> Ein EOR (vermutlich meinst du XOR) macht noch lange keine Multiplikation
> mit 8. Da wäre diese Schaltung mehrfach notwendig.
> Daher wäre es angebracht, dass du, bevor du den anderen hier so
> wertvolle Hinweise wie 'Denken!'  gibst, einfach mal selber vollständige
> Antworten auf Fragen gibst und dich nicht darauf beschränkst, nur mit
> Teilinformationen rumzufaseln...

Wenn ich EOR schreibe, dann meine ich EOR (Exclusive OR). Wir beide 
wissen was gemeint ist "nitpicker".

> Was die technische Realisierbarkeit in einem CPLD angeht, schließe ich
> mich der Meinung von Lattice User an. Aber vermutlich liegt es wieder
> daran, dass ich schneller Schreiben, als denken kann, wenn ich
> befürchte, dass dir so ein DC von 50% nicht gelingt.

Du schreibts viel & schnell ;)

Wenn du mit LTSpice o. ä. umgehen kannst, dann solltest du dich 
hinsetzen und einen Schaltplan eingeben und mit dem Simulieren anfangen.

Stand der Diskussion:

Eingangsfrequenz  : 250 MHz
Teiler 1          : 2,5
Teiler 2          : 2,5
Zwischenfrequenz 1: 40 MHz
Multiplikation 1  : 2
Multiplikation 2  : 2
Zwischenfrequenz 2: 160 MHz
Teiler FF-Stufe DC: 2
Ausgangsfrequenz  : 80 MHz

von Schlumpf (Gast)


Lesenswert?

Für ein paar XORs und FF brauch ich kein Spice. Das kann ich auch noch 
im Kopf. Dumm nur, dass das CPLD deine Spice Simulation nicht sonderlich 
beeindrucken wird.

Simulier's doch mal mit anderen Phasenverschiebungen als 90° an den XOR 
Eingängen....

von Davis (Gast)


Lesenswert?

Schlumpf schrieb:

> Für ein paar XORs und FF brauch ich kein Spice. Das kann ich auch noch
> im Kopf. Dumm nur, dass das CPLD deine Spice Simulation nicht sonderlich
> beeindrucken wird.
> Simulier's doch mal mit anderen Phasenverschiebungen als 90° an den XOR
> Eingängen....

Was für einen Beruf übst du aus? Bitte nicht antworten. Lass mich raten: 
Konditor. Und - liege ich richtig? Dachte ich mir.

Leg dich schlafen, du musst morgen früh raus.

von Schlumpf (Gast)


Lesenswert?

Auf solche Leute regiere ich gar nicht mehr....

von W.S. (Gast)


Lesenswert?

Böser Kommunist schrieb:
> Gibt es irgedwelche Tricks,die mir weiterhelfen können?

Um die Diskussion mal wieder ein bissel sachlicher zu machen:

Es gibt keine Tricks und es braucht auch keine.

Stattdessen guck lieber bei Texas zu den "Clocks and Timers". Dort 
finden sich dutzende IC's, die fü genau solche Aufgaben gedacht sind, 
mit LVDS oder TTL, single oder mehrfach und so weiter. Das Prinzip ist 
zumeist, auf dem Chip einen Oszillator im GHz Bereich zu haben, der per 
PLL auf den angelegten Referenztakt synchronisiert wird und dann aus 
dieser recht hohen Frequenz die benötigten Takte herunterzuteilen. Die 
Chips kosten nicht die Welt, also such dir den raus, der dir am besten 
gefällt.

W.S.

von GS (chromosoma)


Lesenswert?

Danke für ihre Antworten.Wie ich auch vermutet habe, muss ich wohl mit 
62.5 Mhz auskommen.

von Schlumpf (Gast)


Lesenswert?

Du könntest versuchen, zwei Zähler im CPLD parallel laufen zu lassen. 
Der eine zählt mit der steigenden Flanke des Taktes und der andere mit 
der fallenden.
Beide Zähler zählen immer von 0..2 und fangen dann wieder von vorne an.

Damit hast du eine Zeitbasis von 12 ns, die eine Periode eines 83,3 MHz 
Taktes ergeben würde.
Durch die beiden Zähler hast du eine Granularität von 2ns. Mit der 
steigenden Flanke setzt du ein Register auf '1' , wenn beide Zähler den 
Wert 2 erreicht haben. Wenn der Zähler, der mit der steigenden Flanke 
zählt, auf 1 steht und der, der mit der fallenden Flanke zählt, auf 0 
steht, dann setzt du damit ein weiteres Register mit der fallenden 
Flanke für EINEN Takt. Den Ausgang dieses Registers führst du auf den 
asynchronen Reset des Registers, welches mit der steigenen Flanke 
gesetzt wurde.
Damit kannst du zumindest ungefähr einen DC von 50% erreichen..



TAKT              ----    ----    ----
                --    ----    ----    --
Zähler A        220000000011111111222222
Zähler B        222222000000001111111122
Hilfsregister   000000000000001111111100
Ausgangsreg.    001111111111110000000000


Hilfsregister wir mit der fallenden Flanke bei Zähler A = 1 und Zähler B 
= 0 gesetzt und bei Zähler A = 2 und Zähler B = 1 zurückgesetzt.
Ausgangsregister wird mit der steigenden Flanke gesetzt, wenn beide 
Zähler = 2 sind.
Das Hilfsregister setzt das Ausgangsregister asynchron zurück, wenn es 
auf 1 steht.

Hoff, ich hab da keinen Denkfehler drin. Aber das sollte einen 83,3 MHz 
Takt mit einem DC von UNGEFÄHR 50% ergeben..

von Markus F. (Gast)


Lesenswert?

Ich verstehe die Diskussion nicht. Warum schlagen sich die Leutz die 
Köppe ein statt vernüftig zu diskutiere und warum werden nicht die 80MHz 
benutzt, wenn die Antwort auf dem Tisch liegt?

Ich hätte noch einen alternativen Vorschlag, der braucht aber ein wenig 
Analogtechnik ausserhalb des PLD:

Man stimmt mit einem Regelkreis einen Oszilator so ab, dass sein 1/8tel 
genau dem 1/25tel des Eingangs entspricht. (Phasenvergleich, langsame 
Nachführung).

Der Oszillator wird per Schmitttrigger auf den PLD rückgeführt.

von Schlumpf (Gast)


Lesenswert?

Mark F. schrieb:
> Ich verstehe die Diskussion nicht. Warum schlagen sich die Leutz die
> Köppe ein statt vernüftig zu diskutiere

Verstehe ich auch nicht ;-)

von Markus F. (Gast)


Lesenswert?

UPS!

Deinen Vorschlag sehe ich ja eben erst - den hatte ich gestern 
übersehen: Du kannst damit 83MHz?

Ich bezog mich mit "Vorschlag auf dem Tisch" auf die Dokumente, die oben 
als PDF gelinkt waren, sehe aber nun, dass dort doch keine 80MHz zu 
machen sind.

Geht es also nun oder doch nicht?

von Schlumpf (Gast)


Lesenswert?

@ Mark:

Wenn man 250 durch 3 teilt, erhält man 83,333
Mein Vorschlag war neben den in den PFDs genannten, ein weiterer, wie 
eine Division mit 3 realisierbar wäre.

Den Vorschlag von Davis halte ich aus folgendem Grund nicht in einem 
CPLD realisierbar:

FÜr die Funktion der mehrstufigen Multiplizierer ist es erforderlich, 
dass die Takte an den Eingängen der XORs exakt 90° phasenverschoben 
sind. Und so exakte Delays lassen sich in einem CPLD nicht ohne weiteres 
erzeugen.

Was passiert, wenn das nicht der Fall ist, kann man recht einfach mit 
einem Stück Papier und nem Bleistift "simulieren"..

Erster "Verdoppler" mit undefinierter Phasenlage der Eingänge:
           ---------         ---------
A (XOR1) --         ---------         ------

             ---------         ---------
B (XOR1) ----         ---------         ----

           --       --       --       --
Q (XOR1) --  -------  -------  -------   ---

Zweiter "Verdoppler" mit undefinierter Phasenlage der Eingänge:
           --       --       --       --
A (XOR2) --  -------  -------  -------   ---

            --       --       --       --
B (XOR2) ---  -------  -------  -------   --

           - -      - -      - -      - -
Q (XOR2) -- - ------ - ------ - ------ - ---

Und das nachgeschaltete T-FF macht daraus folgendes:
           ---      ---      ---      ---
Q (TFF)  --   ------   ------   ------   ---

Für mich sieht ein DC von 50% jedenfalls anders aus. Aber falls ich bei 
meinen Überlegungen etwas übersehen habe, möge man es mir nachsehen. Ich 
bin schon wieder so müde, da ich immer um drei aufstehen muss, dass die 
Regale gefüllt sind, wenn die Leute um sechs in meiner Bäckerei stehen 
:-)

von flipsi (Gast)


Lesenswert?

Hallo böser Kommunist,

die Frage, wie man die Frequenzteilung vornehmen könnte, ist zwar an 
sich sehr interessant, aber ich würde Dich gern nochmal auf die Aussage 
von Lattice User hinweisen:
>>
>> Ich bezweifle dass man auf diese Weise eine Clock bekommt die den
>> Ansprüchen des ADC's an Jitter und Stabilität des Dutycycles genügt.

Dazu schrieb
Davis:
>
> Bei erhöhten Ansprüchen empfiehlt es sich, die Frequenz zu vervierfachen
> und dann per FF durch 2 zu dividieren.

Es stimmt zwar, daß man damit die Fehler mindern kann, man wird aber 
nicht die Qualität erreichen, die für Deinen ADC notwendig ist, falls 
dieser hochqualitativ (14 ... 16 Bit @80Mhz, vermutlich bereits 
darunter) ist.
Resultat wird ein erhöhtes Rauschen sein.
Von Analog Devices gibt es das Buch "The Data Conversion Handbook" von 
Walt Kester (auch kostenlos als PDF:
http://www.analog.com/library/analogDialogue/archives/39-06/data_conversion_handbook.html
).
Dort werden die Details besprochen und für unterschiedliche 
ADC-Bittiefen werden die Jitteranforderungen erläutert.
Du wirst eine hochqualitative Taktquelle und ein gutes 
Taktverteilungsnetz benötigen. Durch ein FPGA oder CPLD sollte der Takt 
dabei niemals laufen.

Viel Erfolg
   flipsi

von GS (chromosoma)


Lesenswert?

Hm...
mein  Projekt (hobby) hat einen  CPLD (ALTERA MAX II) und  3 ADC mit max 
200 MSPS und 8 Bit Auflösung.

 Außerdem will ich einen Quarzoszillator als Taktquelle verwenden (die 
ich  netterweise als Samples bekommen habe:).

Zur Auswahl stehen
http://www.maximintegrated.com/datasheet/index.mvp/id/5539

DS4300 (300MHZ)

oder

http://www.foxonline.com/pdfs/FXO_HC73.pdf

die Version mit 250 MHZ

Und ich dachte mir, ich kann mit meinem CPLD den CLK für die ADC 
erstellen, und so die Samplerate (fast) beliebig variiren.


Sieht aber so aus, als brauche ich doch  einen richtigen CLK distributor 
und eine PLL Einheit.
Mein Projekt wird immer komplizierter:)
Aber gut, so lernt man auch was

von Lattice User (Gast)


Lesenswert?

Böser Kommunist schrieb:

> Und ich dachte mir, ich kann mit meinem CPLD den CLK für die ADC
> erstellen, und so die Samplerate (fast) beliebig variiren.
>
>

Si514/Si570/Si598 könnte das sein was du suchst

http://www.silabs.com/products/clocksoscillators/xo/Pages/default.aspx

von GS (chromosoma)


Lesenswert?

Lattice User schrieb:
> Böser Kommunist schrieb:
>
>> Und ich dachte mir, ich kann mit meinem CPLD den CLK für die ADC
>> erstellen, und so die Samplerate (fast) beliebig variiren.
>>
>>
>
> Si514/Si570/Si598 könnte das sein was du suchst
>
> http://www.silabs.com/products/clocksoscillators/x...
Den habe ich auch sschon gesehen.
Leider:

"Currently, Silicon Labs offers free samples only to corporate 
customers." :(

von W.S. (Gast)


Lesenswert?

Böser Kommunist schrieb:
> "Currently, Silicon Labs offers free samples only..

Ja, es ist ein Problem, daß man als Bastler so oft auf's Schnorren 
angewiesen ist, bloß weil die hiesigen Distris einem nix verkaufen 
wollen. Nochmal mein Rat: Guck dich bei TI um und suche dann bei dem 
Farnell-Ableger oder Ebay.

W.S.

von Hans (Gast)


Lesenswert?

Das wäre aber nun eine Lösung mit Neugeneration des Taktes. Wie wird das 
dann synchronisiert?

von Matthias (Gast)


Lesenswert?

Davis schrieb:
> Multiplikation 2  : 2
>
> Zwischenfrequenz 2: 160 MHz
>
> Teiler FF-Stufe DC: 2
>
> Ausgangsfrequenz  : 80 MHz

Wofür wird erst 2x nach oben und dann wieder runtergeteilt?

von GS (chromosoma)


Lesenswert?

Ich werde das Problem einfach mit Prescaler lösen.
D.h . rein gehen 250 Mhz, und ich kann mit meiem CPLD 125MHz, 62.5Mhz, 
31.25 Mhz etc . erzeugen.
Zumindest habe ich es mit meinem FPGA und 50 Mhz Input Clock erfolgreich 
getestet. Am Ausgang  kriege ich saubere  stabile Frequenzen.

von J. S. (engineer) Benutzerseite


Lesenswert?

Du könntest von 250MHz mit dieser Methode auf 240MHz runtergehen und 
dann durch 3 teilen:
Beitrag "Re: Frequenz verschieben"

Wobei Du im PLD manuell instanziierte Delays verwenden musst, da der 
Trick mit den IO-Zellen nur bei FPGAs funktioniert.

Ist natürlich nur eine Lösung, um überhaupt 80MHz hinzubekommen, der 
Jitter liegt immer noch bei einigen %ten.

>50 Mhz Input Clock erfolgreich
Warum nimmst Du nicht die mal 8 und teilst durch 5?

von GS (chromosoma)


Lesenswert?

Ehm, wie kann ich den Clock multiplizieren, ohne PLL zu  benutzen?

von high tec ing (Gast)


Lesenswert?

Hat Dein FPGA keine PLL, bzw must Du unbedingt ein PLD nehmen?

von Markus F. (Gast)


Lesenswert?

Böser Kommunist schrieb:
> Ehm, wie kann ich den Clock multiplizieren, ohne PLL zu  benutzen?
Du musst ja nicht multiplizieren, nur teilen.

von FPGA-Vollprofi (Gast)


Lesenswert?

> Mit einem Counter kann ich fast beliebige Frequenz ausgeben, aber ohne
> 50% Duty Cylce Bedienung.
Du gibts mit dem Counter das Doppelte aus und gibt es auf ein FF. 50% 
d.c. stellen sich automatisch ein.

von Lothar S. (loeti)


Lesenswert?

> Danke für ihre Antworten.Wie ich auch vermutet habe, muss ich wohl mit
> 62.5 Mhz auskommen.

250/1,5=166,7; 166,7/2=83,333_

Wenn Deine Schaltung 4,2% Übertaktung verträgt wohl die einfachste 
Lösung.

Grüße Löti

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.